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