diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 26e0139e31775f7bb71add4cda385dd556d96ed5..ea4ed7ad95ca5979424c73289eaa812cbc8c568a 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -1218,8 +1218,160 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'sxr'} + case {'sxr', 'mpx'} + if strcmp(data_request_eff,'mpx') + data_request_eff = 'mpx'; % mpx chosen through parameter 'source' within 'sxr' + gdat_data.data_request = data_request_eff; + gdat_data.gdat_params.source = 'mpx'; + end % sxr from Xtomo by default or dmpx if 'camera','dmpx' is provided + if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) + gdat_data.gdat_params.source = 'mpx'; + elseif ~strcmp(lower(gdat_data.gdat_params.source),'xtomo') && ~strcmp(lower(gdat_data.gdat_params.source),'mpx') + if gdat_data.gdat_params.nverbose>=1 + warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff]) + end + return + end + if ~isfield(gdat_data.gdat_params,'time_interval') + gdat_data.gdat_params.time_interval = []; + end + if ~isfield(gdat_data.gdat_params,'freq') + gdat_data.gdat_params.freq = 'slow'; + end + switch lower(gdat_data.gdat_params.source) + case {'mpx', 'dmpx'} + gdat_data.gdat_params.source = 'mpx'; + if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) + gdat_data.gdat_params.camera = 'top'; + else + gdat_data.gdat_params.camera = lower(gdat_data.gdat_params.camera); + end + if ~any(liuqe_version==[1, 2, 3]) + if gdat_data.gdat_params.nverbose>=3 + disp(['liuqe_version = ' liuqe_version ' not supported for data_request= ' data_request_eff]); + end + return + end + freq_opt = 0; + if strcmp(gdat_data.gdat_params.freq,'fast'); freq_opt = 1; end + t_int = [0 10]; % starts from 0 otherwise mpxdata gives data from t<0 + if ~isempty(gdat_data.gdat_params.time_interval); t_int = gdat_data.gdat_params.time_interval; end + gdat_data.top.data = []; + gdat_data.top.x = []; + gdat_data.top.channel = []; + gdat_data.bottom.data = []; + gdat_data.bottom.x = []; + gdat_data.bottom.channel = []; + try + mpx = mpxdata(shot,'svgr','freq',freq_opt,'liuqe',liuqe_version,'detec',gdat_data.gdat_params.camera, ... + 'time',t_int); + catch + if gdat_data.gdat_params.nverbose>=1 + warning('problem with mpxdata') + end + return + end + gdat_data.units = {'au'}; % not known at this stage + gdat_data.dimunits = {'', 's'}; + gdat_data.data_fullpath = ['using mpxdata(' num2str(shot) ',''svgr'') with params in gdat_data.gdat_params']; + if ~strcmp(gdat_data.gdat_params.camera,'both') + % invert index of time and channel (rho) + gdat_data.data = mpx.(gdat_data.gdat_params.camera(1:3)).signal.data'; + gdat_data.t = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; + gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t); + gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; + gdat_data.x = gdat_data.dim{1}; + gdat_data.(gdat_data.gdat_params.camera).data = gdat_data.data; + gdat_data.(gdat_data.gdat_params.camera).x = gdat_data.x; + gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2}; + gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ... + char(10) gdat_data.data_fullpath]; + else + gdat_data.data = mpx.signal.data'; + gdat_data.t = mpx.signal.dim{1}; + gdat_data.dim{1} = interp1(mpx.top.rho.time,mpx.top.rho.rhopsi,gdat_data.t); + gdat_data.dim{2} = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{1}; + % + gdat_data.top.data = mpx.top.signal.data'; + gdat_data.top.x = gdat_data.dim{1}; + gdat_data.top.channel = mpx.top.signal.dim{2}; + gdat_data.bottom.data = mpx.bot.signal.data; + gdat_data.bottom.x = interp1(mpx.bot.rho.time,mpx.bot.rho.rhopsi,gdat_data.t); + gdat_data.bottom.channel = mpx.bottom.signal.dim{2}; + gdat_data.(gdat_data.gdat_params.camera).channel = mpx.(gdat_data.gdat_params.camera(1:3)).signal.dim{2}; + gdat_data.data_fullpath = ['MPX for ' gdat_data.gdat_params.camera ' camera in .data, "rho" in .x between [-1,1]' ... + char(10) gdat_data.data_fullpath]; + gdat_data.x = gdat_data.dim{1}; + end + + case 'xtomo' + % so far allow string and array as 'camera' choices: + % camera = [] (default, thus get XTOMOGetData defaults), 'central', [3 6] (camera numbers) + camera_xtomo = []; + channel_xtomo = []; + if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) + gdat_data.gdat_params.camera = []; + elseif isnumeric(gdat_data.gdat_params.camera) + if length(gdat_data.gdat_params.camera) > 10 + if gdat_data.gdat_params.nverbose>=1; warning('max number of camera is 10 for XTOMO'); end + gdat_data.gdat_params.camera = gdat_data.gdat_params.camera(1:10); + end + camera_xtomo = zeros(1,10); + camera_xtomo(gdat_data.gdat_params.camera) = 1; + elseif ischar(gdat_data.gdat_params.camera) + gdat_data.gdat_params.camera = lower(gdat_data.gdat_params.camera); + if strcmp(gdat_data.gdat_params.camera,'central') + camera_xtomo = zeros(1,10); + icam = 3 + camera_xtomo(icam) = 1; + channel_xtomo = (icam-1)*20 + 9; + end + else + if gdat_data.gdat_params.nverbose>=3; disp(['camera = ' gdat_data.gdat_params.camera ' not implemented']); end + gdat_data.gdat_params.camera = []; + end + + try + if isempty(gdat_data.gdat_params.time_interval); + [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,[],[],camera_xtomo,[]); + else + [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,gdat_data.gdat_params.time_interval(1), ... + gdat_data.gdat_params.time_interval(2),camera_xtomo,[]); + end + catch + if gdat_data.gdat_params.nverbose>=1 + warning('problem with XTOMOGetData, no data') + end + return + end + gdat_data.t = t; + gdat_data.units = 'au'; + gdat_data.xtomo.extra_params = cat_default; + gdat_data.xtomo.saturated_channels = Sat_channel; + gdat_data.data_fullpath = ['using XTOMOGetData(' num2str(shot) ') with some additional params from gdat_data.gdat_params']; + if isempty(channel_xtomo) + % provide all chords + gdat_data.data = sig; + gdat_data.x = [1:size(sig,1)]; + gdat_data.dimunits = {'20 chords per camera'; 's'}; + else + keyboard + % extract only given channels + gdat_data.data = sig(channel_xtomo,:); + gdat_data.x = channel_xtomo; + gdat_data.dimunits = {'chords where floor(dim{1}/10) gives camera nb and mod(dim{1},10) chord nb'; 's'}; + end + gdat_data.dim = {gdat_data.x; gdat_data.t}; + + otherwise + if gdat_data.gdat_params.nverbose>=1 + warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff]) + end + return + + end + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'profnerho','profterho'} diff --git a/crpptbx/TCV/tcv_help_parameters.m b/crpptbx/TCV/tcv_help_parameters.m index 102d98585e5550f1a7f84050b1015aad04fdbf7c..8c292b39a0f6a686b3733b8704f6383453bdf980 100644 --- a/crpptbx/TCV/tcv_help_parameters.m +++ b/crpptbx/TCV/tcv_help_parameters.m @@ -37,8 +37,15 @@ help_struct_all.edge = '0 (default), 1 to get edge Thomson values'; help_struct_all.fit = '0, no fit profiles, 1 (default) if fit profiles desired as well, relevant for _rho profiles. See also fit_type'; help_struct_all.fit_type = 'provenance of fitted profiles ''conf'' (default) from conf nodes, ''avg'' or ''local'' for resp. proffit: nodes'; help_struct_all.trialindx = 'value of trialindx desired to get a specific one when relevant, otherwise gets ok_trialindx, that is 1 usually'; +help_struct_all.source = 'sxr: main source: ''MPX'' (default) or ''XTOMO'', case insensitive'; +help_struct_all.camera = ['sxr: for MPX: ''central'', ''top'' (default), ''bottom'' or ''both'' ; ' ... + ' for XTOMO: ''central'' (a central chord only), defaults if empty, [1 3 5] if only camera 1, 3 and 5 are desired']; +help_struct_all.freq = '''slow'', default, lower sampling; ''fast'' full samples for both mpx and xtomo'; %help_struct_all. = ''; +%help_struct_all. = ''; + + if ~exist('parameter_list') || isempty(parameter_list) help_struct = help_struct_all; diff --git a/crpptbx/TCV/tcv_requests_mapping.m b/crpptbx/TCV/tcv_requests_mapping.m index 1cb4e89bdfd32fd3fdb787c4e312b33d237d0b39..135195be264cdd2a1e31267888c99da26063d70c 100644 --- a/crpptbx/TCV/tcv_requests_mapping.m +++ b/crpptbx/TCV/tcv_requests_mapping.m @@ -193,7 +193,8 @@ switch lower(data_request) mapping.method = 'tdiliuqe'; mapping.expression = '\results::r_axis'; case 'sxr' - mapping.timedim = 2; + mapping.timedim = 1; + mapping.gdat_timedim = 2; mapping.method = 'switchcase'; case 'te' mapping.timedim = 2; @@ -253,6 +254,10 @@ switch lower(data_request) % extra TCV cases (not necessarily in official data_request name list) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % + case 'mpx' + mapping.timedim = 1; + mapping.gdat_timedim = 2; + mapping.method = 'switchcase'; case {'profnerho','profterho'} mapping.timedim = 1; mapping.label = data_request;