diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 6fc82f4bc579d6f4d49508a121cf520085e4fca8..1a19074293a972e25ed52dacb75a0081bcf2928b 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -193,7 +193,7 @@ if (nargin>=ivarargin_first_char) for i=1:2:nargin-ivarargin_first_char+1 if ischar(varargin_eff{i}) % enforce lower case for any character driven input - if ischar(varargin_eff{i+1}) + if ischar(varargin_eff{i+1}) && ~strcmp('path',varargin_eff{i}) gdat_params.(lower(varargin_eff{i})) = lower(varargin_eff{i+1}); else gdat_params.(lower(varargin_eff{i})) = varargin_eff{i+1}; @@ -1151,7 +1151,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') else for i=1:length(gdat_data.gdat_params.source) gdat_data.gdat_params.source{i} = lower(gdat_data.gdat_params.source{i}); - if ~any(strmatch(gdat_data.gdat_params.source{i},lower(sources_avail))) + if ~any(strmatch(gdat_data.gdat_params.sourc{i},elower(sources_avail))) if gdat_data.gdat_params.nverbose>=1 warning(['source = ' gdat_data.gdat_params.source{i} ' not expected with data_request= ' data_request_eff]) end @@ -1385,67 +1385,342 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') [qfit,~,~,phi]=interpos(q_rho.dim{1}(ij).^2,q_rho.data(ij,it),rhoequal.^2); dataeff = sqrt(phi .* psi_axis.data(it) ./ b0tpsi(it) ./ pi) ; % Delta_psi = -psi_axis else - dataeff = NaN; + dataeff = NaN; end if strcmp(data_request_eff,'rhotor_edge') - gdat_data.data(it) = dataeff(end); + gdat_data.data(it) = dataeff(end); elseif strcmp(data_request_eff,'rhotor') - gdat_data.data(:,it) = dataeff./dataeff(end); - gdat_data.rhotor_edge(it) = dataeff(end); + gdat_data.data(:,it) = dataeff./dataeff(end); + gdat_data.rhotor_edge(it) = dataeff(end); end gdat_data.b0 = b0tpsi(it); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'rhovol','volume_rho','volume'} - % volume_rho = vol(rho); volume = vol(LCFS) = vol(rho=1); - % rhovol = sqrt(vol(rho)/vol(rho=1)); - nodenameeff='\results::psitbx:vol'; - if liuqe_version==-1 - nodenameeff=[begstr 'vol' substr_liuqe]; - end - tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) - % try to run psitbxput - psitbxput_version = 1.3; - psitbxput(psitbxput_version,shot); - ishot = mdsopen(shot); - tracetdi=tdi(nodenameeff); - if isempty(tracetdi.data) || isempty(tracetdi.dim) - return - end - end - gdat_data.units = tracetdi.units; - if strcmp(data_request_eff,'volume') - gdat_data.data = tracetdi.data(end,:); - gdat_data.dim{1} = tracetdi.dim{2}; - gdat_data.data_fullpath=['\results::psitbx:vol(end,:)']; - gdat_data.dimunits{1} = tracetdi.dimunits{2}; - gdat_data.request_description = 'volume(LCFS)=volume(rhopol=1)'; - else - gdat_data.data = tracetdi.data; - gdat_data.dim = tracetdi.dim; - gdat_data.x = gdat_data.dim{1}; - gdat_data.dimunits = tracetdi.dimunits; - if strcmp(data_request_eff,'volume_rho') - gdat_data.data_fullpath=['\results::psitbx:vol']; - gdat_data.request_description = 'volume(rho)'; - elseif strcmp(data_request_eff,'rhovol') - gdat_data.volume_edge = gdat_data.data(end,:); - gdat_data.data = sqrt(gdat_data.data./repmat(reshape(gdat_data.volume_edge,1,size(gdat_data.data,2)),size(gdat_data.data,1),1)); - gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)'; - gdat_data.request_description = 'sqrt(volume(rho)/volume(edge))'; - else - if (gdat_params.nverbose>=1) - disp(['should not be here in vol cases with data_request = ' data_request_eff]); - end - return - end - end - gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; + case {'rhovol','volume_rho','volume'} + % volume_rho = vol(rho); volume = vol(LCFS) = vol(rho=1); + % rhovol = sqrt(vol(rho)/vol(rho=1)); + nodenameeff='\results::psitbx:vol'; + if liuqe_version==-1 + nodenameeff=[begstr 'vol' substr_liuqe]; + end + tracetdi=tdi(nodenameeff); + if isempty(tracetdi.data) || isempty(tracetdi.dim) + % try to run psitbxput + psitbxput_version = 1.3; + psitbxput(psitbxput_version,shot); + ishot = mdsopen(shot); + tracetdi=tdi(nodenameeff); + if isempty(tracetdi.data) || isempty(tracetdi.dim) + return + end + end + gdat_data.units = tracetdi.units; + if strcmp(data_request_eff,'volume') + gdat_data.data = tracetdi.data(end,:); + gdat_data.dim{1} = tracetdi.dim{2}; + gdat_data.data_fullpath=['\results::psitbx:vol(end,:)']; + gdat_data.dimunits{1} = tracetdi.dimunits{2}; + gdat_data.request_description = 'volume(LCFS)=volume(rhopol=1)'; + else + gdat_data.data = tracetdi.data; + gdat_data.dim = tracetdi.dim; + gdat_data.x = gdat_data.dim{1}; + gdat_data.dimunits = tracetdi.dimunits; + if strcmp(data_request_eff,'volume_rho') + gdat_data.data_fullpath=['\results::psitbx:vol']; + gdat_data.request_description = 'volume(rho)'; + elseif strcmp(data_request_eff,'rhovol') + gdat_data.volume_edge = gdat_data.data(end,:); + gdat_data.data = sqrt(gdat_data.data./repmat(reshape(gdat_data.volume_edge,1,size(gdat_data.data,2)),size(gdat_data.data,1),1)); + gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)'; + gdat_data.request_description = 'sqrt(volume(rho)/volume(edge))'; + else + if (gdat_params.nverbose>=1) + disp(['should not be here in vol cases with data_request = ' data_request_eff]); + end + return + end + end + gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + case {'rtc'} + + addpath('~/rtccode/development/tools/io_defs') + % load all real-time memory signals for various nodes + + %Get the data from mds and fill the data structure defined by + %define_simulink_signals + + sources_avail = {'all','defined','combined'}; + + %Check if varargins match source_avail + if ~isfield(gdat_data.gdat_params,'path') + path = '~/rtccode/development/models/R2015a/algorithms/SCD06advancedcontrol1/define_mem_list.m' + else + % path = gdat_data.gdat_params.path; + path = gdat_data.gdat_params.path + end - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'sxr', 'mpx'} + + %Check if varargins match source_avail + if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) % with no specifications all, defined, combined are taken + gdat_data.gdat_params.source = sources_avail; + + elseif ~iscell(gdat_data.gdat_params.source) + if ischar(gdat_data.gdat_params.source) + gdat_data.gdat_params.source = lower(gdat_data.gdat_params.source); + if ~any(strmatch(gdat_data.gdat_params.source,lower(sources_avail))) + if (gdat_params.nverbose>=1) + warning(['source= ' gdat_data.gdat_params.source ' is not part of the available sources: ' sprintf('''%s'' ',sources_avail{:})]); + end + return + else + gdat_data.gdat_params.source = {gdat_data.gdat_params.source}; + end + else + if (gdat_params.nverbose>=1); warning([' source parameter not compatible with: ' sprintf('''%s'' ',sources_avail{:})]); end + return + end + else + tmp = {}; + for i=1:length(gdat_data.gdat_params.source) + gdat_data.gdat_params.source{i} = lower(gdat_data.gdat_params.source{i}); %put vargin in params + + if ~any(strmatch(gdat_data.gdat_params.source{i},lower(sources_avail))) + if gdat_data.gdat_params.nverbose>=1 + warning(['source = ' gdat_data.gdat_params.source{i} ' not expected with data_request= ' data_request_eff]) + end + else + tmp{end+1} = gdat_data.gdat_params.source{i}; + end + end + gdat_data.gdat_params.source = tmp; + end + + + + + % Get data for the source requested + for ii=1:numel(gdat_data.gdat_params.source) + switch gdat_data.gdat_params.source{ii} + case 'defined' + mdsconnect('scd'); + mdsopen('rtc', shot); + + + DS = read_from_memlist(path); %Read from memlist in SVN repository + + % Default signals initialization + %DS = init_default_signals(); + + + % Put signals in standard data strucure (SDS) + SDS_DS = define_simulink_signals(DS); + + % Add the .data and .t structure + for ii=1:numel(SDS_DS) %iter over node + node = ii; + for jj=1:numel(SDS_DS{ii}) %iter over threads + thread = jj; + fieldnameslist = fieldnames(SDS_DS{ii}{jj}); + + if numel(SDS_DS{ii})>1 + is_with_threads = 1; + else + is_with_threads = 0; + end + + for kk=1:numel(fieldnameslist) %iter over fieldnames + + indices = SDS_DS{ii}{jj}.(fieldnameslist{kk}).ind; + SDS_DS{ii}{jj}.(fieldnameslist{kk}).data = {}; + SDS_DS{ii}{jj}.(fieldnameslist{kk}).t = {}; + for zz=1:numel(indices) %iter over indices + ind = indices(zz); + + % data expression + if is_with_threads ==0 + expression = sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind); + else + expression = sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind); + end + + tmp = tdi(expression); + + if isnumeric(tmp.data) + SDS_DS{ii}{jj}.(fieldnameslist{kk}).data{zz} = tmp.data; + + SDS_DS{ii}{jj}.(fieldnameslist{kk}).t{zz} = tmp.dim{1}; + else + fprintf('Warning node: %d thread: %d signal: %s ind %d not available\n', ii,jj,fieldnameslist{kk}, zz ); + end + + + end + end + + end + end + + gdat_data.rtc_defined = SDS_DS; + mdsclose; + mdsdisconnect; + + case 'all' + mdsconnect('scd'); + mdsopen('rtc', shot); + + %[node, threads, #number of signals for each thread of the node] + global_node_thread_signals = ... + [1,1,32; + 2,1,32; + 3,1,32; + 6,4,256; + 7,2,32]; + + % Default signals initialization + AS = init_all_signals(global_node_thread_signals); + + % Put signals in standard data strucure (SDS) + SDS_AS = define_simulink_signals(AS); + + % Add the .data and .t structure + for ii=1:numel(SDS_AS) %iter over node + node = ii; + for jj=1:numel(SDS_AS{ii}) %iter over threads + thread = jj; + fieldnameslist = fieldnames(SDS_AS{ii}{jj}); + + if numel(SDS_AS{ii})>1 + is_with_threads = 1; + else + is_with_threads = 0; + end + + for kk=1:numel(fieldnameslist) %iter over fieldnames + + indices = SDS_AS{ii}{jj}.(fieldnameslist{kk}).ind; + SDS_AS{ii}{jj}.(fieldnameslist{kk}).data = {}; + SDS_AS{ii}{jj}.(fieldnameslist{kk}).t = {}; + for zz=1:numel(indices) %iter over indices + ind = indices(zz); + + % data expression + if is_with_threads ==0 + expression = sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind); + else + expression = sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind); + end + + tmp = tdi(expression); + + + if isnumeric(tmp.data) + SDS_AS{ii}{jj}.(fieldnameslist{kk}).data{zz} = tmp.data; + + SDS_AS{ii}{jj}.(fieldnameslist{kk}).t{zz} = tmp.dim{1}; + + else + fprintf('Warning node: %d thread: %d signal: %s ind %d not available\n', ii,jj,fieldnameslist{kk}, zz ); + end + + + end + end + + end + end + + gdat_data.rtc_all = SDS_AS; + mdsclose; + mdsdisconnect; + + case 'combined' + mdsconnect('scd'); + mdsopen('rtc', shot); + + %[node, threads, #number of signals for each thread of the node] + global_node_thread_signals = ... + [1,1,32; + 2,1,32; + 3,1,32; + 6,4,256; + 7,2,32]; + + % Defined signalds initialization + DS = read_from_memlist(path); %Read from memlist in SVN repository + + % Combined signals initialization + CS = init_combined_signals(DS,global_node_thread_signals); + + % Put signals in standard data strucure (SDS) + SDS_CS = define_simulink_signals(CS); + + % Add the .data and .t structure + for ii=1:numel(SDS_CS) %iter over node + node = ii; + for jj=1:numel(SDS_CS{ii}) %iter over threads + thread = jj; + fieldnameslist = fieldnames(SDS_CS{ii}{jj}); + + if numel(SDS_CS{ii})>1 + is_with_threads = 1; + else + is_with_threads = 0; + end + + for kk=1:numel(fieldnameslist) %iter over fieldnames + + indices = SDS_CS{ii}{jj}.(fieldnameslist{kk}).ind; + SDS_CS{ii}{jj}.(fieldnameslist{kk}).data = {}; + SDS_CS{ii}{jj}.(fieldnameslist{kk}).t = {}; + for zz=1:numel(indices) %iter over indices + ind = indices(zz); + + % data expression + if is_with_threads ==0 + expression = sprintf('\\top.crpprt%.2d.mems.mem_%.2d',node,ind); + else + expression = sprintf('\\top.crpprt%.2d.thread%.1d.mems.mem_%.3d',node,thread,ind); + end + + tmp = tdi(expression); + + + if isnumeric(tmp.data) + SDS_CS{ii}{jj}.(fieldnameslist{kk}).data{zz} = tmp.data; + + SDS_CS{ii}{jj}.(fieldnameslist{kk}).t{zz} = tmp.dim{1}; + + else + fprintf('Warning node: %d thread: %d signal: %s ind %d not available\n', ii,jj,fieldnameslist{kk}, zz ); + end + + + end + end + + end + end + + gdat_data.rtc_combined = SDS_CS; + mdsclose; + mdsdisconnect; + otherwise + %to be added + end + end + + + + + + + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + case {'sxr', 'mpx'} if strcmp(data_request_eff,'mpx') data_request_eff = 'mpx'; % mpx chosen through parameter 'source' within 'sxr'