Skip to content
Snippets Groups Projects
SCDclass_taskmdsloadprevADC.m 4.72 KiB
classdef SCDclass_taskmdsloadprevADC < SCDclass_task
    % This is a special class which loads previous
    % values of the ADCs for the acquiring nodes
    properties
        modelbus
        node
        workspacedatabasestructure
    end
    
    methods
        
        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==2)));
            obj=obj.parseconstructorcommon(id, varargin);
            obj.modelbus=obj.cparser.Results.modelbus;
            obj.node=obj.cparser.Results.node;
            switch(obj.node)
                case 2
                    obj.workspacedatabasestructure='SCDsimdata.SCDnode02simdata.adc';
                otherwise
                    obj.workspacedatabasestructure='';
            end    
            obj.classname=mfilename;
        end
        
        function init(obj, shot)
            mdsconnect(obj.mdsserver);
            mdsopen(obj.mdstree, shot);
                  
            switch(obj.node)
                case 2
                    obj.actualizeNode02(shot); 
            end    
        end
            
        function [obj, value] = getdata(obj,shot)
            %obj=obj.actualizegetcmd('mdsvalue(''%s'')', shot);            
            %value=eval(obj.getcommand);
            
            switch(obj.node)
                case 2
                    [~,value]=obj.getdataNode02ACQ196(shot); %% Here we need to switch betweeen old and new acquisition unit and tcv standard also
            end                
        end
        
        function printinfo(obj)
            obj.printinfocommon;
            fprintf('  Init model bus: %s, node: %d, ws base struct: %s\n',obj.modelbus, obj.node, obj.workspacedatabasestructure);
        end
        
            
        function entrystring = genMARTe2entry(obj, shot)
           % TODO: this is a workaround which works by chance, need a more accurate fix 
           entrystring = ''; 
        end
        
    end
    
    methods(Access = private)
       
        function obj = actualizeNode02(obj, shot)
            dd=SCDconf_getdatadict(obj.datadictionary);
            adcbus=dd.getEntry(obj.modelbus).getValue;
            [~,data]=obj.getdata(shot);
            T=timeseries; 
            if obj.verbose==1
               fprintf('Actualizing data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
            end
            for ii=1:192
                T.Time=data.Time;
                T.Data=int16(data.Data(:,ii));
                assignin('base','temp',T);
                assigncmd=sprintf('%s.%s=temp;',obj.workspacedatabasestructure, adcbus.Elements(ii).Name);
                evalin('base',assigncmd);
                if obj.verbose==1 && mod(ii,4)==0
                    fprintf('.');
                end
            end
            evalin('base','clear temp');
            if obj.verbose==1
                fprintf('\n');
            end   
        end
        
        function [obj, value] = getdataNode02ACQ196(obj, shot)
            T=timeseries;
            timebase=mdsvalue('dim_of(\top.crpprt02.board1.adc_01)'); %% TODO: check with marte
            d_time = double(mdsvalueraw( '\top.crpprt02.params:d_time' ))*1.0e-6;
            %timebase = round(timebase.*1/d_time)*d_time-d_time/2;
            timebase = round(timebase.*1/d_time)*d_time-d_time/100;
            T.Time=timebase;
            T.Data=zeros(numel(timebase),192);
            if obj.verbose==1
               fprintf('Getting data for bus: ''%s'' (%s, shot %d) ', obj.modelbus, obj.classname, shot);
            end
            for ii=1:96
                % NOTE: physical2logical remapping is only for
                % data acquired with the present ACQ196 system
                % it must go away when using the new ACQ2106 system
                %fprintf('Loading channel %d:%d ...\r',1,physical2logical(ii));

                channelstr=sprintf('\\top.crpprt02.board1.adc_%02d.raw',physical2logical(ii));
                T.Data(:,ii)=int16(mdsvalue(channelstr));   
                if obj.verbose==1 && mod(ii,4)==0 
                    fprintf('.');
                end
            end
            for ii=1:96
                %fprintf('Loading channel %d:%d ...\r',2,physical2logical(ii));
                channelstr=sprintf('\\top.crpprt02.board2.adc_%02d.raw',physical2logical(ii));
                T.Data(:,ii+96)=int16(mdsvalue(channelstr));
                if obj.verbose==1 && mod(ii,4)==0
                    fprintf('.');
                end
            end
            value=T;
            if obj.verbose==1
                fprintf('\n');
            end  
        end
        
    end
end