From 56162837224d84150a5b5d27d3e0d0324d7e5c65 Mon Sep 17 00:00:00 2001
From: galperti <cristian.galperti@epfl.ch>
Date: Fri, 19 Feb 2021 16:10:03 +0100
Subject: [PATCH] adc load task for node 07 added, ready for sim

---
 code/classes/SCDclass_taskmdsloadprevADC.m | 100 +++++++++++++++++----
 1 file changed, 82 insertions(+), 18 deletions(-)

diff --git a/code/classes/SCDclass_taskmdsloadprevADC.m b/code/classes/SCDclass_taskmdsloadprevADC.m
index af6ba19..8faff58 100644
--- a/code/classes/SCDclass_taskmdsloadprevADC.m
+++ b/code/classes/SCDclass_taskmdsloadprevADC.m
@@ -16,7 +16,7 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
         function obj=SCDclass_taskmdsloadprevADC(id, varargin)   
             obj@SCDclass_task(id, varargin);
             obj.cparser.addRequired('modelbus',@(x) ischar(x));
-            obj.cparser.addParameter('node', 0, @(x) (isnumeric(x) && ((x==1) || x==2)));
+            obj.cparser.addParameter('node', 0, @(x) (isnumeric(x) && ((x==1) || x==2 || x==7)));
             obj=obj.parseconstructorcommon(id, varargin);
             obj.modelbus=obj.cparser.Results.modelbus;
             obj.node=obj.cparser.Results.node;
@@ -25,6 +25,8 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
                     obj.workspacedatabasestructure='SCDsimdata.SCDnode01simdata.adc';                    
                 case 2
                     obj.workspacedatabasestructure='SCDsimdata.SCDnode02simdata.adc';
+                case 7
+                    obj.workspacedatabasestructure='SCDsimdata.SCDnode07simdata.adc';
                 otherwise
                     obj.workspacedatabasestructure='';
             end    
@@ -36,17 +38,19 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
             mdsconnect(obj.mdsserver);
             mdsopen(obj.mdstree, shot);
             
-            try
+            %try
                 switch(obj.node)
                     case 1
-                        obj.actualizeNode(shot, 96);
+                        obj.actualizeNode(shot, 96, false);
                     case 2
-                        obj.actualizeNode(shot, 192); 
+                        obj.actualizeNode(shot, 192, false);
+                    case 7
+                        obj.actualizeNode(shot, 96, true);
                 end
-            catch
-                fprintf('\n');
-                warning('SCDclass_taskmdsloadprevADC:init','Error initializing ADC bus for node %d.',obj.node);
-            end
+            %catch
+            %    fprintf('\n');
+            %    warning('SCDclass_taskmdsloadprevADC:init','Error initializing ADC bus for node %d.',obj.node);
+            %end
         end
             
         function [obj, value] = getdata(obj,shot)
@@ -63,7 +67,10 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
                       [~,value]=obj.getdataNode02ACQ196(shot); 
                     else
                       [~,value]=obj.getdataNode02ACQ2106(shot); 
-                    end    
+                    end
+                case 7
+                    % TODO: differentiate old and new system here ?
+                      [~,value]=obj.getdataNode07(shot, 256);
             end                
         end
         
@@ -80,9 +87,11 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
         
     end
     
-    methods(Access = private)
+    %methods(Access = private)
+    methods
+        
        
-        function obj = actualizeNode(obj, shot, nadcs)
+        function obj = actualizeNode(obj, shot, nadcs, packetized)
             dd=SCDconf_getdatadict(obj.datadictionary);
             adcbus=dd.getEntry(obj.modelbus).getValue;
             [~,data]=obj.getdata(shot);
@@ -91,11 +100,15 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
                fprintf('Actualizing data for bus: ''%s'' (%s, shot %d) 0%% ', obj.modelbus, obj.classname, shot);
             end
             for ii=1:nadcs
-                T.Time=data.Time;
-                T.Data=int16(data.Data(:,ii));
+                if ~packetized
+                 T.Time=data.Time;
+                 T.Data=int16(data.Data(:,ii));
+                else
+                 T=data.get(['adc' num2str(ii)]);
+                end    
                 assignin('base','temp',T);
                 assigncmd=sprintf('%s.%s=temp;',obj.workspacedatabasestructure, adcbus.Elements(ii).Name);
-                evalin('base',assigncmd);
+                evalin('base',assigncmd);                
                 if obj.verbose==1 && mod(ii,obj.logdecimate)==0
                     fprintf('%.0f%% ', ii/nadcs*100);
                 end
@@ -106,8 +119,7 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
             end   
         end
                            
-%%
-% Node 01 loading functions
+%% Node 01 loading functions
 
         function [obj, value] = getdataNode01ACQ196(obj, shot)
             T=timeseries;
@@ -138,8 +150,7 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
             end  
         end
 
-%%
-% Node 02 loading functions
+%% Node 02 loading functions
 
         function [obj, value] = getdataNode02ACQ196(obj, shot)
             T=timeseries;
@@ -212,6 +223,59 @@ classdef SCDclass_taskmdsloadprevADC < SCDclass_task
             end              
         end
 
+%% Node 07 loading functions
+        
+        function [obj, value] = getdataNode07(obj, shot, samppck)
+            nch=96;
+            if shot>70100 % TODO, wrong shotno here
+                mdsnodename='node07'; 
+            else
+                mdsnodename='crpprt07';
+            end
+            mdsopen('rtc',shot);
+            %T=timeseries;
+            timebase=mdsvalue(['dim_of(\top.' mdsnodename '.board1.adc_01)']);
+            d_time = double(mdsvalueraw(['\top.' mdsnodename '.params:d_time']))*1.0e-6;
+            timebase = timebase(1:samppck:end); % TODO: is this safe against lost cycles ?
+            %timebase = round(timebase.*1/d_time)*d_time-d_time/2;
+            %timebase = round(timebase.*1/d_time)*d_time-d_time/100;
+            %timebase = timebase + d_time; % this fits perfectly sim/rt data on 68072
+            %T.Time=timebase;
+            %T.Data=zeros(numel(timebase),nch);
+            value = tscollection(timebase);
+            if obj.verbose==1
+               fprintf('Getting data for bus: ''%s'' (%s, shot %d) 0%% ', obj.modelbus, obj.classname, shot);
+            end
+            for ii=1:nch
+                T=timeseries;             
+                T.Time=timebase;
+                channelstr=sprintf(['\\top.' mdsnodename '.board1.adc_%02d.raw'],ii);
+                %T.Data(:,ii)=int16(mdsvalue(channelstr));  
+                %T.Data(:,ii)=int16(mdsvalueraw(channelstr));                  
+                
+                data=mdsvalueraw(channelstr);
+                if isnumeric(data)
+                  datamatrix=reshape(int16(data),[numel(timebase),samppck]);
+                else
+                  datamatrix=int16(zeros(numel(timebase),samppck));
+                end
+                T.Data=datamatrix;
+                
+                if obj.verbose==1 && mod(ii,obj.logdecimate)==0 
+                    fprintf('%.0f%% ', ii/nch*100);
+                end
+                T.Name=['adc' num2str(ii)];
+                value=addts(value,T);
+            end
+            %T.Data=datamatrix; % this speeds up a lot the loading
+            %value.addts;
+            if obj.verbose==1
+                fprintf('100%% \n');
+            end                          
+        end    
+
+
+
     end
 end
 
-- 
GitLab