diff --git a/crpptbx/JET/gdat_jet.m b/crpptbx/JET/gdat_jet.m index 2a0ca4e7d7f1325b6d4de15641d8809f0efee56d..b3caeb64aadb8e7f5da469e4563353634b0a47a7 100644 --- a/crpptbx/JET/gdat_jet.m +++ b/crpptbx/JET/gdat_jet.m @@ -734,7 +734,7 @@ elseif strcmp(mapping_for_jet.method,'switchcase') gdat_data.data(:,1) = (gdat_data.sig1.data - gdat_data.sig2.data)./2; gdat_data.data(:,2) = (gdat_data.sig1.data + gdat_data.sig2.data)./2; end - keyboard + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne','te'} nodenameeff_rho = 'rho'; @@ -795,6 +795,8 @@ elseif strcmp(mapping_for_jet.method,'switchcase') gdat_data.(data_request_eff).rhopol = gdat_data.x; gdat_data.dimunits{1} = 'rhopol'; end +keyboard + gdat_data = get_grids_1d(gdat_data,1,1,gdat_params.nverbose); % defaults for fits, so user always gets std structure gdat_data.fit.rhotornorm = []; % same for both ne and te @@ -1562,17 +1564,10 @@ elseif strcmp(mapping_for_jet.method,'switchcase') gdat_data.t = gdat_data.dim{mapping_for_jet.gdat_timedim}; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - 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 dmpx by default or xtomo if 'camera','xtomo' is provided + case {'sxr'} 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') + gdat_data.gdat_params.source = 'H'; + elseif ~strmatch(lower(gdat_data.gdat_params.source),{'h','v','t'}) if gdat_data.gdat_params.nverbose>=1 warning(['source = ' gdat_data.gdat_params.source ' not expected with data_request= ' data_request_eff]) end @@ -1581,195 +1576,106 @@ elseif strcmp(mapping_for_jet.method,'switchcase') 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 + case 'h' + camera_all = [1:2:16]; + case 't' + camera_all = [1:3:35]; + case 'v' + camera_all = [1:3:35]; + end + if ~isfield(gdat_data.gdat_params,'camera') || isempty(gdat_data.gdat_params.camera) + camera = camera_all; + elseif isnumeric(gdat_data.gdat_params.camera) + camera = gdat_data.gdat_params.camera; + elseif ischar(gdat_data.gdat_params.camera) + if strcmp(lower(gdat_data.gdat_params.camera),'central') + gdat_data.gdat_params.source = 'h'; + camera = 11; else if gdat_data.gdat_params.nverbose>=3; disp(['camera = ' gdat_data.gdat_params.camera ' not implemented']); end - gdat_data.gdat_params.camera = []; + camera = camera_all; end - - try - if isempty(gdat_data.gdat_params.time_interval); - [sig,t,Sat_channel,cat_default] = XTOMOGetData(shot,0,4,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 + gdat_data.gdat_params.camera = camera; + source = gdat_data.gdat_params.source; + try + gdat_data.chord_ok = []; + for ichord=1:length(camera) + aa = gdat_jet(shot,{'ppf','sxr',[source num2str(camera(ichord),'%.2d')]}); + if ~isempty(aa.data) && ~isempty(aa.dim) + if isempty(gdat_data.data) + gdat_data.data = NaN*ones(numel(camera_all),numel(aa.dim{gdat_data.mapping_for.jet.timedim})); + gdat_data.dim{1} = camera_all; + gdat_data.dim{gdat_data.mapping_for.jet.gdat_timedim} = aa.dim{gdat_data.mapping_for.jet.timedim}; + end + gdat_data.data(ichord,:) = aa.data'; + gdat_data.chord_ok(end+1) = camera(ichord); 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 + catch if gdat_data.gdat_params.nverbose>=1 - warning(['camera = ' gdat_data.gdat_params.camera ' not expected with data_request= ' data_request_eff]) + warning(['problem with sxr, source = ' source]) end return - end - + gdat_data.t = gdat_data.dim{gdat_data.mapping_for.jet.gdat_timedim}; + gdat_data.x = gdat_data.dim{1}; + gdat_data.units = 'au'; + gdat_data.dimunits = {'chord', 's'}; + gdat_data.label = ['sxr/' gdat_data.gdat_params.source num2str(camera(1)) ' to ' num2str(camera(end))]; + gdat_data.legend = num2str(gdat_data.chord_ok'); + gdat_data.data_fullpath = [gdat_data.label ', see .chord_ok for the effective channels ok']; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - case {'profnerho','profterho'} - % for backward compatibility but corresponds to ne_rho with param.fit_type='auto' (JET special) - % - nodenameeff=['\results::THOMSON.PROFILES.AUTO:' data_request_eff(5:6)]; - nodenameeff_vers = [nodenameeff ':version_num']; - avers = tdi(nodenameeff_vers); - if avers.data==0 - % may be because nodes not yet filled in, so call once a node - ab=tdi(nodenameeff); - avers = tdi(nodenameeff_vers); - end - if avers.data>0 - tracetdi=tdi(nodenameeff); - if avers.data < 2.99 - % for earlier version the bug made it to have logically (rho,t) - gdat_data.data=tracetdi.data; - if ~isempty(tracetdi.dim) && ~ischar(tracetdi.data) - gdat_data.x=tracetdi.dim{1}; - gdat_data.t=tracetdi.dim{2}; - error_status=0; - else - error_status=2; - gdat_data.x=[]; - gdat_data.t=[]; - end - else - gdat_data.data=tracetdi.data'; % error in dimensions for autofits - if ~isempty(tracetdi.dim) && ~ischar(tracetdi.data) - if gdat_params.nverbose>=3; disp('assumes dim{2} for x in THOMSON.PROFILES.AUTO'); end - gdat_data.x=tracetdi.dim{2}; - gdat_data.t=tracetdi.dim{1}; - error_status=0; - else - gdat_data.x=[]; - gdat_data.t=[]; - error_status=2; - end + case {'vloop'} + if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) + gdat_data.gdat_params.source = 'ppf'; + end + params_eff = gdat_data.gdat_params; + switch lower(params_eff.source) + case 'ppf' + params_eff.data_request = [{'PPF'},{'MAGN'},{'VL'}]; + params_eff.label = 'Vloop from MAGN/VL(index)'; + channel_index = 3; + tension = -1e2; + case 'jpf' + params_eff.data_request = [{'JPF'},{'DA'},{'C2-VLRRU'}]; + params_eff.label = 'Vloop Upper Restraint Ring Flux Flux Loop, non-integrated'; + channel_index = []; + tension = -1e4; + otherwise + if params_eff.nverbose>=1 + warning(['source = ' params_eff.source ' not expected with data_request= ' data_request_eff]) end + return + end + if ~isfield(params_eff,'channel_index') || isempty(params_eff.channel_index) + params_eff.channel_index = channel_index; else - tracetdi=avers; - gdat_data.x=[]; - gdat_data.t=[]; + channel_index = params_eff.channel_index; end - gdat_data.dim=[{gdat_data.x};{gdat_data.t}]; - gdat_data.dimunits=[{'sqrt(psi\_norm)'} ; {'time [s]'}]; - if ~isempty(gdat_data.t) && any(strcmp(fieldnames(tracetdi),'units')) - gdat_data.units=tracetdi.units; + if ~isfield(params_eff,'tension') || isempty(params_eff.tension) + params_eff.tension = tension; + else + tension = params_eff.tension; end - gdat_data.request_description = 'quick autofits within thomson nodes, using version'; - gdat_data.fullpath = ['Thomson autfits from ' nodenameeff]; + + aa=gdat_jet(shot,params_eff); + gdat_data.gdat_params = rmfield(params_eff,'data_request'); + if ~isempty(params_eff.channel_index) && length(aa.data)~=numel(aa.data) + gdat_data.data = aa.data(params_eff.channel_index,:); + else + gdat_data.data = aa.data; + end + gdat_data.units = 'V'; + gdat_data.dim{1} = aa.t; + gdat_data.t = gdat_data.dim{1}; + gdat_data.dimunits{1} = 's'; + % add tension + gdat_data.data_smooth=interpos(gdat_data.t,gdat_data.data,gdat_data.gdat_params.tension); + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% otherwise if (gdat_params.nverbose>=1); warning(['switchcase= ' data_request_eff ' not known in gdat_jet']); end error_status=901; diff --git a/crpptbx/JET/jet_help_parameters.m b/crpptbx/JET/jet_help_parameters.m index f4dbe90cdcf2c9aa0de03f9518bf8ba96c016dbe..ee75d00d39b8332c95f07cd56136d6c09579f164 100644 --- a/crpptbx/JET/jet_help_parameters.m +++ b/crpptbx/JET/jet_help_parameters.m @@ -37,9 +37,8 @@ help_struct_all.cocos = ['cocos value desired in output, uses eqdsk_cocos_transf % $$$ 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.source = 'sxr: ''G'' (default, with ssx), camera name ''J'', ''G'', ...[[F-M], case insensitive'; -help_struct_all.camera = ['[] (default, all), [i1 i2 ...] chord nbs ([1 3 5] if only chords 1, 3 and 5 are desired), ''central'' uses J_049']; -help_struct_all.freq = '''slow'', default (means ssx, 500kHz), lower sampling; ''fast'' full samples 2MHz; integer value nn for downsampling every nn''th points'; +help_struct_all.source = 'sxr: ''H'' (default), camera name ''T'', ''V'' ; for Vloop: ''ppf''(default),''jpf'''; +help_struct_all.camera = ['[] (default, all), [i1 i2 ...] chord nbs ([1 3 5] if only chords 1, 3 and 5 are desired), ''central'' uses H10']; %help_struct_all. = ''; %help_struct_all. = ''; diff --git a/crpptbx/JET/jet_requests_mapping.m b/crpptbx/JET/jet_requests_mapping.m index dd010bf4715cdae2126802d236ce6d7d3d3c9502..3b579e5ece405661fa3c3044bae5a59d9003f845 100644 --- a/crpptbx/JET/jet_requests_mapping.m +++ b/crpptbx/JET/jet_requests_mapping.m @@ -316,8 +316,11 @@ switch lower(data_request) case 'vloop' mapping.label = 'Vloop Upper Restraint Ring Flux Flux Loop, non-integrated'; mapping.timedim = 1; - mapping.method = 'signal'; - mapping.expression = [{'JPF'},{'DA'},{'C2-VLRRU'}]; + mapping.label = 'Vloop'; + mapping.method = 'switchcase'; +% $$$ mapping.method = 'signal'; +% $$$ mapping.expression = [{'PPF'},{'MAGN'},{'VL'}]; % tension -1e2 (3rd signal good one +% $$$ mapping.expression = [{'JPF'},{'DA'},{'C2-VLRRU'}]; % tension -1e4 case 'volume' mapping.label = 'Volume'; mapping.timedim = 1; diff --git a/crpptbx/gdat_plot.m b/crpptbx/gdat_plot.m index edec2ea4c02171951b38c08b337c8dcd1d61cd16..4251c694bd0876f3ea0da445c742d6d5a5d4cc97 100644 --- a/crpptbx/gdat_plot.m +++ b/crpptbx/gdat_plot.m @@ -102,7 +102,7 @@ if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty( tmhdm=mean(reshape(gdat_data.t(1:nfft*fix(length(gdat_data.t)/nfft)),nfft,fix(length(gdat_data.t)/nfft))); for i=1:size(gdat_data.data,2) [B,F,T]=specgram(gdat_data.data(:,i),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2); - figure + figure; imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet; ylabel('freq') xlabel(gdat_data.dimunits{1}) @@ -112,7 +112,7 @@ if all(isfield(gdat_data,{'data','t'})) && ~isempty(gdat_data.data) && ~isempty( mhd_sum_data = mhd_sum_data + gdat_data.data(:,i); end [B,F,T]=specgram(mhd_sum_data./size(gdat_data.data,2),nfft,1/mean(diff(gdat_data.t)),hanning(nfft),nfft/2); - figure + figure; imagesc(T+tmhdm(1),F/1e3,20*log10(abs(B)));axis xy;colormap jet; ylabel('freq') xlabel(gdat_data.dimunits{1})