From fa569febaf1b92415a6ab4fb88e262165a4f4725 Mon Sep 17 00:00:00 2001 From: Olivier Sauter <olivier.sauter@epfl.ch> Date: Fri, 22 Mar 2019 09:17:05 +0000 Subject: [PATCH] add remote mds get data for AUG, tested test_all_requestnames full, only remaining problem is Lpf thus all equilibrium, _rho related. Now ready to check on IPP part git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@11623 d63d8f72-b253-0410-a779-e742ad2e26cf --- crpptbx/AUG/aug_requests_mapping.m | 30 +-- crpptbx/AUG/gdat_aug.m | 158 +++++++---- crpptbx/AUG/rdaAUG_eff.m | 407 +++++++++++++++++++++-------- crpptbx/TCV/gdat_tcv.m | 10 + crpptbx/TCV_IMAS/tcv2ids.m | 9 +- crpptbx/gdat.m | 19 +- crpptbx/test_all_requestnames.m | 21 +- 7 files changed, 459 insertions(+), 195 deletions(-) diff --git a/crpptbx/AUG/aug_requests_mapping.m b/crpptbx/AUG/aug_requests_mapping.m index db44b860..247f29e8 100644 --- a/crpptbx/AUG/aug_requests_mapping.m +++ b/crpptbx/AUG/aug_requests_mapping.m @@ -72,19 +72,19 @@ switch lower(data_request) mapping.method = 'signal'; mapping.expression = [{'TOT'},{'beta_N'}]; % in many cases, in particular just after an experiment, betaN is not present in TOT, thus compute it from 2/3Wmhd/V /(B0^2/2mu0) - mapping.method = 'expression'; - mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TOT''},{''beta_2N''},{''AUGD''}];' ... - 'gdat_tmp=gdat_aug(shot,params_eff); if isempty(gdat_tmp.data);' ... - 'params_eff.data_request=''ip'';gdat_ip=gdat_aug(shot,params_eff);' ... - 'params_eff.data_request=''b0'';gdat_b0=gdat_aug(shot,params_eff);' ... - 'params_eff.data_request=''a_minor'';gdat_aminor=gdat_aug(shot,params_eff);' ... - 'params_eff.data_request=''wmhd'';gdat_tmp=gdat_aug(shot,params_eff);' ... - 'params_eff.data_request=''volume'';gdat_vol=gdat_aug(shot,params_eff);' ... - 'tmp_data_ip=interp1(gdat_ip.t,gdat_ip.data,gdat_tmp.t,[],NaN);' ... - 'tmp_data_b0=interp1(gdat_b0.t,gdat_b0.data,gdat_tmp.t,[],NaN);' ... - 'tmp_data_a=interp1(gdat_aminor.t,gdat_aminor.data,gdat_tmp.t,[],NaN);' ... - 'tmp_data_vol=interp1(gdat_vol.t,gdat_vol.data,gdat_tmp.t,[],NaN);' ... - 'gdat_tmp.data = 100.*abs(2./3.*gdat_tmp.data./tmp_data_vol.*8e-7.*pi./tmp_data_b0.^2./tmp_data_ip.*1e6.*tmp_data_a.*tmp_data_b0);end;']; +% $$$ mapping.method = 'expression'; +% $$$ mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TOT''},{''beta_2N''},{''AUGD''}];' ... +% $$$ 'gdat_tmp=gdat_aug(shot,params_eff); if isempty(gdat_tmp.data);' ... +% $$$ 'params_eff.data_request=''ip'';gdat_ip=gdat_aug(shot,params_eff);' ... +% $$$ 'params_eff.data_request=''b0'';gdat_b0=gdat_aug(shot,params_eff);' ... +% $$$ 'params_eff.data_request=''a_minor'';gdat_aminor=gdat_aug(shot,params_eff);' ... +% $$$ 'params_eff.data_request=''wmhd'';gdat_tmp=gdat_aug(shot,params_eff);' ... +% $$$ 'params_eff.data_request=''volume'';gdat_vol=gdat_aug(shot,params_eff);' ... +% $$$ 'tmp_data_ip=interp1(gdat_ip.t,gdat_ip.data,gdat_tmp.t,[],NaN);' ... +% $$$ 'tmp_data_b0=interp1(gdat_b0.t,gdat_b0.data,gdat_tmp.t,[],NaN);' ... +% $$$ 'tmp_data_a=interp1(gdat_aminor.t,gdat_aminor.data,gdat_tmp.t,[],NaN);' ... +% $$$ 'tmp_data_vol=interp1(gdat_vol.t,gdat_vol.data,gdat_tmp.t,[],NaN);' ... +% $$$ 'gdat_tmp.data = 100.*abs(2./3.*gdat_tmp.data./tmp_data_vol.*8e-7.*pi./tmp_data_b0.^2./tmp_data_ip.*1e6.*tmp_data_a.*tmp_data_b0);end;']; case 'betap' mapping.timedim = 1; mapping.label = '\beta_p'; @@ -136,7 +136,7 @@ switch lower(data_request) mapping.expression = [{'TTH'},{'H/L-facs'},{'AUGD'}]; mapping.method = 'expression'; mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=[{''TTH''},{''H/L-facs''},{''AUGD''}];params_eff.source=''TTH'';' ... - 'gdat_tmp=gdat_aug(shot,params_eff);S = sf2ps(''TTH'',shot,''scal_par'');gdat_tmp.dimunits{1}=cellstr(S.items(end).value'');' ... + 'gdat_tmp=gdat_aug(shot,params_eff);S = rdaAUG_eff(shot,''TTH'',[],''AUGD'',[],[],''param-set:scal_par'');if isfield(S,''items'');gdat_tmp.dimunits{1}=cellstr(S.items(end).value'');end;' ... 'gdat_tmp.data = min(gdat_tmp.data,10.);']; case 'ioh' mapping.timedim = 1; @@ -416,7 +416,7 @@ switch lower(data_request) mapping.label = data_request; mapping.method = 'signal'; % assume a full tracename is given, so just try with tdi (could check there are some ":", etc...) mapping.expression = data_request; - + end if isempty(mapping.gdat_timedim) diff --git a/crpptbx/AUG/gdat_aug.m b/crpptbx/AUG/gdat_aug.m index 09da3e2e..43330947 100644 --- a/crpptbx/AUG/gdat_aug.m +++ b/crpptbx/AUG/gdat_aug.m @@ -2,7 +2,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req % % function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request,varargin) % -% Aim: get data from a given machine using full path or keywords. +% Aim: get data from a given machine using full path or keywords. % data_request are and should be case independent (transformed in lower case in the function and outputs) % % If no inputs are provided, return the list of available pre-defined data_request in gdat_data and default parameters gdat_params @@ -41,7 +41,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req % % Examples: % (should add working examples for various machines (provides working shot numbers for each machine...)) -% +% % [a1,a2]=gdat; % a2.data_request = 'Ip'; % a3=gdat(32827,a2); % gives input parameters as a structure, allows to call the same for many shots @@ -55,7 +55,16 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_aug(shot,data_req % % so any signal can be loaded by giving the diagnostic, signal name and experiment, etc % - +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Remote data access for AUG +% You need to make a "tunnel" in one unix session from the remote node using for example: +% ssh -losauter -L 8001:mdsplus.aug.ipp.mpg.de:8000 gate1.aug.ipp.mpg.de % to create a tunnel to port 8001 to mds server mdsplus.aug.ipp.mpg.de +% +% Then in another unix session on the remote node, in matlab and with the appropriate mds path do: +% >> mdsconnect('localhost:8001') +% >> mdsvalue('1+2') % should return 3 if correctly connected +% % % Comments for local developer: % This gdat is just a "header routine" calling the gdat for the specific machine gdat_`machine`.m which can be called @@ -226,7 +235,7 @@ else ij=[]; end -if ~isempty(ij); +if ~isempty(ij); gdat_data.gdat_request = data_request_names_all{ij}; if isfield(data_request_names.all.(data_request_names_all{ij}),'description') && ~isempty(data_request_names.all.(data_request_names_all{ij}).description) % copy description of keyword @@ -342,6 +351,7 @@ if strcmp(mapping_for_aug.method,'signal') gdat_data.dim{mapping_for_aug.timedim} = gdat_data.t; gdat_data.dimunits{mapping_for_aug.timedim} = 'time [s]'; nbdims = length(size(gdat_data.data)); +keyboard for i=1:nbdims if i~=mapping_for_aug.timedim ieff=i; @@ -354,7 +364,7 @@ if strcmp(mapping_for_aug.method,'signal') gdat_data.units = aatmp.units; if mapping_for_aug.gdat_timedim>0 && mapping_for_aug.gdat_timedim ~= mapping_for_aug.timedim % shift timedim to gdat_timedim data(i,j,...itime,k,...) -> data(i,inewtime,j,...,k,...) - % note that this means that gdat_data.x and gdat_data.t are same and correct, + % note that this means that gdat_data.x and gdat_data.t are same and correct, % only .data, .dim and .dimunits need to be changed iprev=[1:nbdims]; ij=find(dim_nontim>mapping_for_aug.gdat_timedim-1); @@ -410,7 +420,7 @@ elseif strcmp(mapping_for_aug.method,'expression') ijdim=find(strcmp(tmp_fieldnames,'dim')==1); if ~isempty(ijdim) nbdims = length(gdat_data.dim); - if mapping_for_aug.timedim==-1; + if mapping_for_aug.timedim==-1; mapping_for_aug.timedim = nbdims; if (size(gdat_data.data,nbdims)==1 && nbdims>1); mapping_for_aug.timedim = nbdims-1; end end @@ -464,21 +474,36 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end % R, Z positions of measurements try - eval(['[r_time]=sf2ab(diag_name,shot,r_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); + % eval(['[r_time]=sf2ab(diag_name,shot,r_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); + % both for CEZ and CMZ Ti:1 is ok, otherwise introduce string above + [r_time,err]=rdaAUG_eff(shot,diag_name,r_node,exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:1'); catch ME_R_time % assume no shotfile - getReport(ME_R_time,'basic'); + disp(getReport(ME_R_time)) return end - gdat_data.r = r_time.value{1}; + gdat_data.r = r_time.data; inotok=find(gdat_data.r<=0); gdat_data.r(inotok) = NaN; - eval(['[z_time]=sf2ab(diag_name,shot,z_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); - gdat_data.z = z_time.value{1}; - inotok=find(gdat_data.z<=0); - gdat_data.z(inotok) = NaN; - eval(['[time]=sf2tb(diag_name,shot,''time'',''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); - gdat_data.t = time.value; + try + % eval(['[z_time]=sf2ab(diag_name,shot,z_node,''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); + [z_time,err]=rdaAUG_eff(shot,diag_name,z_node,exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:1'); + gdat_data.z = z_time.data; + inotok=find(gdat_data.z<=0); + gdat_data.z(inotok) = NaN; + catch ME_R_time + disp(getReport(ME_R_time)) + return + end + try + % eval(['[time]=sf2tb(diag_name,shot,''time'',''-exp'',exp_name_eff' extra_arg_sf2sig_eff_string ');']); + %[time,err]=rdaAUG_eff(shot,diag_name,'time',exp_name_eff,[],extra_arg_sf2sig_eff_string,'time-base:Ti:0'); + [time,err]=rdaAUG_eff(shot,diag_name,'time',exp_name_eff,[],extra_arg_sf2sig_eff_string,'area-base:Ti:0'); + gdat_data.t = time.data; + catch ME_R_time + disp(getReport(ME_R_time)) + return + end gdat_data.dim{1} = {gdat_data.r , gdat_data.z}; gdat_data.dimunits{1} = 'R, Z [m]'; gdat_data.dim{2} = gdat_data.t; @@ -486,6 +511,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.x = gdat_data.dim{1}; % vrot [a,error_status]=rdaAUG_eff(shot,diag_name,'vrot',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig); + a.name = 'vrot'; if isempty(a.data) || isempty(a.t) || error_status>0 if gdat_params.nverbose>=3; a @@ -502,6 +528,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') % [a,e]=rdaAUG_eff(shot,diag_name,'Ti',exp_name_eff); % [aerr,e]=rdaAUG_eff(shot,diag_name,'err_Ti',exp_name_eff); [a,e]=rdaAUG_eff(shot,diag_name,'Ti_c',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig); + a.name = 'Ti_c'; [aerr,e]=rdaAUG_eff(shot,diag_name,'err_Ti_c',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig); gdat_data.ti.data = a.data; gdat_data.data = a.data; @@ -639,7 +666,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end end end - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ece', 'eced', 'ece_rho', 'eced_rho'} nth_points = 13; @@ -662,7 +689,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') else gdat_data.gdat_params.match_rz_to_time = match_rz_to_time; end - time_interval = [-Inf +Inf]; + time_interval = []; if isfield(gdat_data.gdat_params,'time_interval') && ~isempty(gdat_data.gdat_params.time_interval) time_interval = gdat_data.gdat_params.time_interval; else @@ -778,7 +805,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.rhos.rhovolnorm = rhovolnorm_out; gdat_data.rhos.t = gdat_data.rz.t; end - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'eqdsk'} % @@ -823,7 +850,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') else eqdsk_cocosout = eqdskAUG; end - % for several times, use array of structure for eqdsks, + % for several times, use array of structure for eqdsks, % cannot use it for psi(R,Z) in .data and .x since R, Z might be different at different times, % so project psi(R,Z) on Rmesh, Zmesh of 1st time if length(time_eqdsks) > 1 @@ -853,7 +880,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.dimunits = {'m','m','s'}; gdat_data.request_description = ['data=psi, x=(R,Z), eqdsk contains eqdsk structure with which ' ... 'plot_eqdsk, write_eqdsk, read_eqdsk can be used']; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'equil'} % get equil params and time array in gdat_data.t @@ -962,23 +989,23 @@ elseif strcmp(mapping_for_aug.method,'switchcase') qfit = zeros(size(gdat_data.rhopolnorm(:,it))); end gdat_data.qvalue(:,it) = qfit; - end + end % get rhotor values gdat_data.phi(:,it) = phi_tree.value(it,Lpf1:-1:1)'; gdat_data.rhotornorm(:,it) = sqrt(abs(gdat_data.phi(:,it) ./ gdat_data.phi(end,it))); % get rhovol values - gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; + gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; gdat_data.dvoldpsi(:,it)=Vol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi gdat_data.rhovolnorm(:,it) = sqrt(abs(gdat_data.vol(:,it) ./ gdat_data.vol(end,it))); - gdat_data.area(:,it)=Area.value(it,2*Lpf1-1:-2:1)'; + gdat_data.area(:,it)=Area.value(it,2*Lpf1-1:-2:1)'; gdat_data.dareadpsi(:,it)=Area.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi gdat_data.Rmesh(:,it) = Ri.value(it,1:M_Rmesh); gdat_data.Zmesh(:,it) = Zj.value(it,1:N_Zmesh); gdat_data.psi2D(1:M_Rmesh,1:N_Zmesh,it) = PFM_tree.value(1:M_Rmesh,1:N_Zmesh,it); - gdat_data.pressure(:,it)=Pres.value(it,2*Lpf1-1:-2:1)'; + gdat_data.pressure(:,it)=Pres.value(it,2*Lpf1-1:-2:1)'; gdat_data.dpressuredpsi(:,it)=Pres.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi if ~isempty(Jpol.value) - gdat_data.jpol(:,it)=Jpol.value(it,2*Lpf1-1:-2:1)'; + gdat_data.jpol(:,it)=Jpol.value(it,2*Lpf1-1:-2:1)'; gdat_data.djpolpsi(:,it)=Jpol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi else gdat_data.jpol = []; @@ -1041,7 +1068,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.dim{2} = gdat_data.t; gdat_data.dimunits{1} = 'rhopolnorm'; gdat_data.dimunits{2} = 'time [s]'; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne','te'} exp_name_eff = gdat_data.gdat_params.exp_name; @@ -1107,7 +1134,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.(lower(node_child_nameeff_e)).z = []; end gdat_data.x=gdat_data.dim{1}; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'ne_rho', 'te_rho', 'nete_rho'} if ~isfield(gdat_data.gdat_params,'fit') || isempty(gdat_data.gdat_params.fit) || ~isnumeric(gdat_data.gdat_params.fit) @@ -1124,7 +1151,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') return end % add rho coordinates - params_eff.data_request='equil'; + params_eff.data_request='equil'; [equil,params_equil,error_status]=gdat_aug(shot,params_eff); if error_status>0 if gdat_params.nverbose>=3; disp(['problems with ' params_eff.data_request]); end @@ -1343,8 +1370,8 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end end end - - + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'pgyro'} extra_arg_sf2sig_eff_string = ''; @@ -1352,7 +1379,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') extra_arg_sf2sig_eff_string = [',' gdat_data.gdat_params.extra_arg_sf2sig]; end % LOAD MULTI CHANNEL DATA ECS - % powers, frequencies, etc + % powers, frequencies, etc params_eff = gdat_data.gdat_params; params_eff.data_request={'ECS','PECRH'}; % pgyro tot in index=9 @@ -1384,7 +1411,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end end try - eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'gyr_freq']); + % eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch % gyr_freq not present (old shots for example) a=[]; @@ -1395,7 +1424,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.freq_ec(i) = a.value; end try - eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GPolPos']); + % eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch % GPolPos not present a=[]; @@ -1406,7 +1437,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.polpos_ec(i) = a.value; end try - eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy1_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GTorPos']); + % eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy1_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch a=[]; end @@ -1428,7 +1461,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end end try - eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'gyr_freq']); + % eval(['a = sf2par(''ECS'',shot,''gyr_freq'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch a=[]; end @@ -1438,7 +1473,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.freq_ec(i+4) = a.value; end try - eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GPolPos']); + % eval(['a = sf2par(''ECS'',shot,''GPolPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch a=[]; end @@ -1448,7 +1485,9 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.polpos_ec(i+4) = a.value; end try - eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); + [a,e]=rdaAUG_eff(shot,'ECS',['P_sy2_g' num2str(i)],gdat_data.gdat_params.exp_name,[], ... + gdat_data.gdat_params.extra_arg_sf2sig,['param:' 'GTorPos']); + % eval(['a = sf2par(''ECS'',shot,''GTorPos'',''P_sy2_g' num2str(i) '''' extra_arg_sf2sig_eff_string ');']); catch a=[]; end @@ -1611,6 +1650,8 @@ elseif strcmp(mapping_for_aug.method,'switchcase') try nbi=gdat_aug(shot,params_eff); catch + nbi.data = []; + nbi.dim = []; end if ~isempty(nbi.data) && ~isempty(nbi.dim) for i=1:length(fields_to_copy) @@ -1643,6 +1684,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.label{end+1}='P_{ic}'; end end + index_prad = []; if any(strmatch('rad',gdat_data.gdat_params.source)) % radiated power params_eff.data_request='prad'; @@ -1658,16 +1700,18 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end % add to main with linear interpolation and 0 for extrapolated values gdat_data.data(:,end+1) = interpos(-21,gdat_data.rad.t,gdat_data.rad.data,gdat_data.t); + index_prad = size(gdat_data.data,2); % to not add for ptot gdat_data.x(end+1) =gdat_data.x(end)+1; gdat_data.label{end+1}='P_{rad}'; end end % add tot power - gdat_data.data(:,end+1) = sum(gdat_data.data,2); - gdat_data.label{end+1}='P_{tot}'; + index_noprad = setdiff([1:size(gdat_data.data,2)],index_prad); + gdat_data.data(:,end+1) = sum(gdat_data.data(:,index_noprad),2); + gdat_data.label{end+1}='P_{tot,h}'; gdat_data.x(end+1) =gdat_data.x(end)+1; gdat_data.dim{2} = gdat_data.x; gdat_data.dimunits{2} = ''; - gdat_data.data_fullpath = 'tot powers from each sources, and total power in .data(:,end)'; + gdat_data.data_fullpath = 'tot powers from each sources, and total heating power in .data(:,end)'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'q_rho'} @@ -1728,12 +1772,12 @@ elseif strcmp(mapping_for_aug.method,'switchcase') qfit = zeros(size(gdat_data.rhopolnorm(:,it))); end gdat_data.qvalue(:,it) = qfit; - end + end % get rhotor values phi_it = phi_tree.value(it,Lpf1:-1:1)'; gdat_data.rhotornorm(:,it) = sqrt(abs(phi_it ./ phi_it(end))); % get rhovol values - vol_it=Vol.value(it,2*Lpf1-1:-2:1)'; + vol_it=Vol.value(it,2*Lpf1-1:-2:1)'; gdat_data.rhovolnorm(:,it) = sqrt(abs(vol_it ./ vol_it(end))); % Qpsi and similar data is on (time,radius) with radius being: LCFS..Lpf_points dummy LCFS..SOL part % change it to (radial,time) and use only Lpf+1 points up to LCFS @@ -1789,7 +1833,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.dim{1} = gdat_data.t; gdat_data.dimunits{1} = 'time [s]'; for it=1:NTIME - Lpf1 = Lpf1_t(it); + Lpf1 =min(Lpf1_t(it),size(psi_tree.value,2)); psi_it=psi_tree.value(it,Lpf1:-1:1)'; if strcmp(data_request_eff,'psi_axis') gdat_data.data(it)= psi_it(1); @@ -1804,7 +1848,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'raptor'} - sources_avail = {'observer','predictive'}; + sources_avail = {'observer','predictive'}; for i=1:length(sources_avail) gdat_data.(sources_avail{i}).data = []; gdat_data.(sources_avail{i}).units = []; @@ -1908,7 +1952,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') gdat_data.units = gdat_data.(source_promoted).units; gdat_data.dim = gdat_data.(source_promoted).dim; gdat_data.dimunits = gdat_data.(source_promoted).dimunits; - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'rhotor', 'rhotor_edge', 'rhotor_norm', 'rhovol', 'volume_rho'} if strcmp(upper(gdat_data.gdat_params.equil),'FPG') @@ -1947,7 +1991,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') psi_axis(it)= psi_it(1); psi_lcfs(it)= psi_it(end); gdat_data.x(:,it) = sqrt(abs((psi_it-psi_axis(it)) ./(psi_lcfs(it)-psi_axis(it)))); - gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; + gdat_data.vol(:,it)=Vol.value(it,2*Lpf1-1:-2:1)'; % gdat_data.dvoldpsi(:,it)=Vol.value(it,2*Lpf1:-2:2)'; % 2nd index are dV/dpsi gdat_data.rhovolnorm(:,it) = sqrt(abs(gdat_data.vol(:,it) ./ gdat_data.vol(end,it))); end @@ -2066,7 +2110,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') exp_name_eff = 'AUGD'; icount = 0; nnth = 1; - if isnumeric(gdat_data.gdat_params.freq) && gdat_data.gdat_params.freq>1; + if isnumeric(gdat_data.gdat_params.freq) && gdat_data.gdat_params.freq>1; nnth = floor(gdat_data.gdat_params.freq+0.5); gdat_data.gdat_params.freq = nnth; end @@ -2115,14 +2159,14 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end else - % add fields not yet defined in case all cases have empty data + % add fields not yet defined in case all cases have empty data end end gdat_data.chords = chords_ok_nb; if length(gdat_data.dim)>=1 gdat_data.x = gdat_data.dim{1}; end - + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case {'transp'} extra_arg_sf2sig_eff_string = ''; @@ -2161,7 +2205,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') end end % copy TIME to .t - if isfield(gdat_data,'TIME') && isfield(gdat_data.TIME,'value') + if isfield(gdat_data,'TIME') && isfield(gdat_data.TIME,'value') && ~isempty(gdat_data.TIME.value) gdat_data.t = gdat_data.TIME.value; gdat_data.dim{1} = gdat_data.t; gdat_data.dimunits{1} = gdat_data.TIME.unit; @@ -2172,7 +2216,7 @@ elseif strcmp(mapping_for_aug.method,'switchcase') error_status=901; return end - + else if (gdat_params.nverbose>=1); warning(['AUG method=' mapping_for_AUG.method ' not known yet, contact Olivier.Sauter@epfl.ch']); end error_status=602; @@ -2202,11 +2246,17 @@ shot=gdat_data.shot; exp_name_eff = gdat_data.gdat_params.exp_name; gdat_data.gdat_params.equil = upper(gdat_data.gdat_params.equil); DIAG = gdat_data.gdat_params.equil; % 'EQI' by default at this stage, should become EQH? -eval(['M_Rmesh_par = sf2par(DIAG,shot,''M'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +% eval(['M_Rmesh_par = sf2par(DIAG,shot,''M'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +[M_Rmesh_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ... + extra_arg_sf2sig_eff_string,['param:' 'M']); M_Rmesh = M_Rmesh_par.value + 1; % nb of points -eval(['N_Zmesh_par = sf2par(DIAG,shot,''N'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +% eval(['N_Zmesh_par = sf2par(DIAG,shot,''N'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +[N_Zmesh_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ... + extra_arg_sf2sig_eff_string,['param:' 'N']); N_Zmesh = N_Zmesh_par.value + 1; % nb of points -eval(['NTIME_par = sf2par(DIAG,shot,''NTIME'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +% eval(['NTIME_par = sf2par(DIAG,shot,''NTIME'',''PARMV''' extra_arg_sf2sig_eff_string ');']); +[NTIME_par,e]=rdaAUG_eff(shot,DIAG,'PARMV',gdat_data.gdat_params.exp_name,[], ... + extra_arg_sf2sig_eff_string,['param:' 'NTIME']); NTIME = NTIME_par.value; % nb of points Lpf_par = rdaAUG_eff(shot,DIAG,'Lpf',exp_name_eff,[],gdat_data.gdat_params.extra_arg_sf2sig); % since June, nb of time points in EQ results is not consistent with NTIME and time diff --git a/crpptbx/AUG/rdaAUG_eff.m b/crpptbx/AUG/rdaAUG_eff.m index 6a5d1424..c6fb2eb9 100644 --- a/crpptbx/AUG/rdaAUG_eff.m +++ b/crpptbx/AUG/rdaAUG_eff.m @@ -1,5 +1,9 @@ function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin); % +% [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin); +% +% inputs: shot,diagname,sigtype,shotfile_exp are mandatory, so specify default shotfile_exp before for example +% % gets data using sf2sig or mdsplus (when mdsplus will be available) % 1D arrays: assumes dimension is time % 2D arrays: assumes data vs (x,time) @@ -8,20 +12,50 @@ function [adata,error]=rdaAUG_eff(shot,diagname,sigtype,shotfile_exp,varargin); % varargin{1}: time interval or timevalue, will get data closest to that time or within that time interval % varargin{2}: extra args for sf2sig like '-raw' % +% varargin{3}: 'param:xxx' means get parameter (instead of signal) with xxx as parameter to get +% 'param-set:xxx' means get parameter-set (at this stage available only with sf2ps) +% 'area-base:yy:i' means it's an area-base type signal and if known from yy dim_of(i) +% +% for mds usage, calls: augparam (_shot, _diag, _psetname, _parameter, _experiment, _edition, _oshot, _oedition) +% for sf2 usage: help sf2par or sf2ps on ipp relevant node +% : [] empty means get signal (default), +% for mds usage: augdiag (_shot, _diag, _signame, _experiment, _edition, _t1, _t2, _oshot, _oedition) +% for sf2 usage: help sf2sig on ipp relevant node +% % examples: % [data,error]=rdaAUG_eff(15133,'MAG','Ipi'); % [data,error]=rdaAUG_eff(15133,'MAG','Ipi',[1 5]); % % set global variable: usemdsplus to decide if sf2sig or mdsplus is used: -% >> global usemdsplus -% >> usemdsplus=1 % means use mds to get data -% >> usemdsplus=0 % means use sf2sig (default if not defined) -% if ~exist('usemdsplus'); usemdsplus=0; end +% usemdsplus=1 except if sf2sig is a function, then usemdsplus=0 +% (----begin of old comments: >> global usemdsplus +% >> usemdsplus=1 % means use mds to get data +% >> usemdsplus=0 % means use sf2sig (default if not defined) +% if ~exist('usemdsplus'); usemdsplus=0; end -----end of old comments) % - -global usemdsplus +% +% return: 1D array and dimensions as 1xN +% 2D array transposed (assumed were changed from C origin, this way gets usually time as 2nd) +% +%global usemdsplus +usemdsplus = ~[exist('sf2sig')==2]; if ~exist('usemdsplus') || isempty(usemdsplus); usemdsplus=0; end -error=1; +error=999; +adata.data = []; +adata.value = []; +adata.units = []; +adata.dim = []; +adata.dimunits = []; +adata.t = []; +adata.x = []; +adata_time.data = []; +adata_time.value = []; +adata_area = []; +adata.time_aug = adata_time; +adata.area = adata_area; +adata.exp = shotfile_exp; +adata.edition_in = []; +adata.edition_out = []; time_int=[]; if nargin>=5 & ~isempty(varargin{1}) @@ -32,8 +66,38 @@ if nargin>=6 & ~isempty(varargin{2}) extra_arg_sf2sig=varargin{2}; end -if usemdsplus +param_name=[]; +param_set_name=[]; +area_base=false; +area_base_name=[]; +area_base_dimof=[]; +if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ... + && length(varargin{3})>=7 && strcmp(lower(varargin{3}(1:6)),'param:') + param_name=varargin{3}(7:end); +end +if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ... + && length(varargin{3})>=11 && strcmp(lower(varargin{3}(1:10)),'param-set:') + param_set_name=varargin{3}(11:end); +end +if nargin>=7 && ~isempty(varargin{3}) && ischar(varargin{3}) ... + && length(varargin{3})>=9 && strcmp(lower(varargin{3}(1:9)),'area-base') + area_base = true; + ij=findstr(varargin{3},':'); + if length(ij)==2 + area_base_name=varargin{3}(ij(1)+1:ij(2)-1); + area_base_dimof = str2num(varargin{3}(ij(2)+1:end)); + elseif length(ij)==1 + area_base_name=varargin{3}(ij(1)+1:end); + end +end +if usemdsplus + % a_remote=mdsremotelist; does not seem sufficient if connection broken, test with 1+2 + is3 = mdsvalue('1+2'); + if is3 ~= 3 + warning('not connected to an mds server, cannot use mds to get data') + return + end % use mdsplus % $$$ if ~unix('test -d /home/duval/mdsplus') @@ -46,42 +110,135 @@ if usemdsplus % $$$ mdsconnect('localhost'); % $$$ end + % extract edition number if provided as '-ed',value in extra_arg_sf2sig + ij=strfind(extra_arg_sf2sig,'-ed'); + ed_number = ''; + if ~isempty(ij) + ed_number = num2str(sscanf(extra_arg_sf2sig(ij+5:end),'%d')); + end user=getenv('USER'); - if nargin>=5 & ~isempty(varargin{1}) - ['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '",,,' ... - num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');'] - eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '",,,' ... - num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']); + if isempty(param_name) && isempty(param_set_name) && ~area_base + % use augdiag + if nargin>=5 & ~isempty(varargin{1}) + eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' sigtype '","' shotfile_exp ... + '",' ed_number ',' num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']); + else + eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' sigtype '","' shotfile_exp ... + '",' ed_number ',,,_oshot' user diagname ',_oed' user diagname ')'');']); + end + elseif isempty(param_set_name) && ~area_base + % use augparam + eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augparam(' num2str(shot) ',"' diagname '","' sigtype '","' param_name '"' ... + ',"' shotfile_exp '",' ed_number ',_oshot' user diagname ',_oed' user diagname ')'');']); + elseif ~area_base + % param-set, cannot get this yet with mdsvalue + disp(['cannot get param-set with mds yet (only sf2ps): ' param_set_name]) + data = []; + error = 11; else - eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augsignal(' num2str(shot) ',"' diagname '","' sigtype '")'');']); + % area-base, can only get dim_of at this stage + if ~isempty(area_base_name) + if nargin>=5 & ~isempty(varargin{1}) + eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_base_name '","' shotfile_exp ... + '",' ed_number ',' num2str(varargin{1}(1),'%.14f') ',' num2str(varargin{1}(end),'%.14f') ')'');']); + else + eval(['[data,error]=mdsvalue(''_rdaeff' user diagname '=augdiag(' num2str(shot) ',"' diagname '","' area_base_name '","' shotfile_exp ... + '",' ed_number ',,,_oshot' user diagname ',_oed' user diagname ')'');']); + end + if ~isempty(area_base_dimof) + eval(['data=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(area_base_dimof) ')'');']); + else + for j=1:length(size(data)) + eval(['dataj=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(j) ')'');']); + if (prod(size(dataj))~=length(dataj)) + data = dataj; + area_base_dimof = j; + break + end + end + end + end + + end + if error < 10 + adata.data=data; + adata.edition_in = str2num(ed_number); + adata.edition_out = mdsvalue(['_oed' user diagname]); + else + if error~=11 && mod(error,2)==1; keyboard; end end - adata.data=data; + % hsig=[]; ss=size(data); nbofdim=length(ss); if prod(ss)==length(data); nbofdim=1; end nbofdim=max(nbofdim,1); switch nbofdim - case 1 + case 1 + adata.data=reshape(adata.data,1,length(adata.data)); eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']); + time = reshape(time,1,length(time)); x=[]; + adata.dim = {time}; + eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']); + adata.dimunits = {tunits}; - case 2 - eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']); - eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']); + case 2 + adata.data = adata.data'; + did_transpose = 1; + % transposed because of C relation and backward compatibility with sf2sig part + eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']); + if prod(size(x))==length(x); x = reshape(x,1,length(x)); end + eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']); + time = reshape(time,1,length(time)); + adata.dim = {x, time}; + eval(['xunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',1))'');']); + eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']); + adata.dimunits = {xunits, tunits}; - case 3 + case 3 eval(['x=mdsvalue(''dim_of(_rdaeff' user diagname ',0)'');']); + if prod(size(x))==length(x); x = reshape(x,1,length(x)); end eval(['time=mdsvalue(''dim_of(_rdaeff' user diagname ',1)'');']); + time = reshape(time,1,length(time)); disp('3rd dimension in hsig!!!!!!!!!!!!!!!!!!!!!!!!!') eval(['hsig=mdsvalue(''dim_of(_rdaeff' user diagname ',2)'');']); + if prod(size(hsig))==length(hsig); hsig = reshape(hsig,1,length(hsig)); end + adata.dim = {x, time, hsig}; + eval(['xunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',0))'');']); + eval(['tunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',1))'');']); + eval(['hsigunits=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',2))'');']); + adata.dimunits = {xunits, tunits, hsigunits}; + [zz,itime] = max(size(adata.data)); + for i=1:nbofdim + if strcmp(adata.dimunits{i},'s'); itime = i; end + end + ix = min(setdiff([1:2],itime)); + ihsig = setdiff([1:nbofdim],[ix itime]) + x = adata.dim{ix}; + time = adata.dim{itime}; + hsig = adata.dim{ihsig}; + adata.dim = {x, time, hsig}; + xunits = adata.dimunits{ix}; + tunits = adata.dimunits{itime}; + hsigunits = adata.dimunits{ihsig}; + adata.dimunits = {xunits, tunits, hsigunits}; - otherwise - disp([' more than 3 dimensions for ' num2str(shot) ' ; ' sigtype '/' diagname]) - error('in rdaAUG_eff') - + otherwise + itime = 1; % default + for i=1:nbofdim + eval(['dimarray=mdsvalue(''dim_of(_rdaeff' user diagname ',' num2str(i-1) ')'');']); + if prod(size(dimarray)) == length(dimarray) + eval(['adata.dim{' num2str(i) '}=reshape(dimarray,1,length(dimarray));']); + end + eval(['adata.dimunits{' num2str(i) '}=mdsvalue(''units_of(dim_of(_rdaeff' user diagname ',' num2str(i-1) '))'');']); + if strcmp(adata.dimunits{i},'s'); itime = i; end + end + x = adata.dim{min(setdiff([1:2],itime))}; + time = adata.dim{itime}; end + adata.value = adata.data; % for backward compatibility might need to keep .value, to be checked later, .data for sure adata.t=time; adata.x=x; adata.hsig=hsig; @@ -93,104 +250,140 @@ if usemdsplus % $$$ end else - % use sf2sig - if isempty(time_int) - try - if ~strcmp(extra_arg_sf2sig,'[]') - eval(['[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']); - else - [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,'-exp',shotfile_exp); + % use sf2sig or sf2par + adata_time.data = []; + adata_area = []; + if isempty(param_name) && isempty(param_set_name) && ~area_base + % use sf2sig + if isempty(time_int) + try + if ~strcmp(extra_arg_sf2sig,'[]') + eval(['[adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']); + else + [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,'-exp',shotfile_exp); + end + catch ME + throw(ME) + end + else + try + [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp); + catch ME + throw(ME) end - catch - adata.value = []; - adata.data = []; - adata.dim = []; - adata.t = []; - adata_time.data = []; - adata_area = []; - end - else - try - [adata,adata_time, adata_area]=sf2sig(diagname,shot,sigtype,[time_int(1);time_int(end)],'-exp',shotfile_exp); - catch - adata.value = []; - adata.data = []; - adata.dim = []; - adata.t = []; - adata_time.data = []; - adata_area = []; end - end - - adata.units = []; - - if isempty(adata.value) - return - end - % special checks - if strcmp(upper(diagname),'SXB') - % time missing one point - if length(adata.value) == length(adata_time.value)+1 - adata_time.value=linspace(adata_time.range(1),adata_time.range(2),length(adata.value)); - adata_time.index(2) = length(adata.value); - end - end - % - if strcmp(upper(sigtype),'PNIQ') - % transform 4x2 PINIs in 1:8 PINIs and total in index=9 - if (prod(size(adata.value))/length(adata_time.value) == 8) - tmp(:,1:4) = adata.value(:,:,1); - tmp(:,5:8) = adata.value(:,:,2); - tmp(:,9) = sum(tmp,2); - adata.value = tmp'; % transpose since will be transposed afterwards - adata.dimunits = {'s','8 sources;total'}; - else - disp('expects 8 sources in PNIQ'); + if isempty(adata.value) return end - end - adata.time_aug = adata_time; + %%%%%%%%%%%%%%%%%%%%%%%% NEED TO DO THESE AFTER EITHER MDSPLUS or SF2SIG, after data and dims obtained %%%%%%%%%%%%%%%%%%%%%%% + % special checks + if strcmp(upper(diagname),'SXB') + % time missing one point + if length(adata.value) == length(adata_time.value)+1 + adata_time.value=linspace(adata_time.range(1),adata_time.range(2),length(adata.value)); + adata_time.index(2) = length(adata.value); + end + end + % +% $$$ if strcmp(upper(sigtype),'PNIQ') +% $$$ % transform 4x2 PINIs in 1:8 PINIs and total in index=9 +% $$$ if (prod(size(adata.value))/length(adata_time.value) == 8) +% $$$ tmp(:,1:4) = adata.value(:,:,1); +% $$$ tmp(:,5:8) = adata.value(:,:,2); +% $$$ tmp(:,9) = sum(tmp,2); +% $$$ adata.value = tmp'; % transpose since will be transposed afterwards +% $$$ adata.dimunits = {'s','8 sources;total'}; +% $$$ else +% $$$ disp('expects 8 sources in PNIQ'); +% $$$ return +% $$$ end +% $$$ end - adata.area = adata_area; + adata.time_aug = adata_time; - adata.exp = shotfile_exp; - if (prod(size(adata.value))==length(adata.value)) - % only time signal - adata.x = []; - adata.value=reshape(adata.value,1,length(adata.value)); - if ~isempty(adata.time_aug) - adata.t=adata.time_aug.value; + adata.area = adata_area; + + adata.exp = shotfile_exp; + if (prod(size(adata.value))==length(adata.value)) + % only time signal + adata.x = []; + adata.value=reshape(adata.value,1,length(adata.value)); + if ~isempty(adata.time_aug) + adata.t=adata.time_aug.value; + else + adata.t=[1:size(adata.value,2)]; + end else - adata.t=[1:size(adata.value,2)]; + if length(size(adata.value))<=2; adata.value = adata.value'; end % cannot transpose Nd>2 matrix + if ~isempty(adata.time_aug) + if length(size(adata.value))<=2; + adata.x=[1:prod(size(adata.value))/length(adata_time.value)]; + else + adata.x = []; + end + adata.t=adata.time_aug.value; + else + adata.x=[1:size(adata.value,1)]; + adata.t=[1:size(adata.value,2)]; + end + end + adata.units = adata.unit; + % % transpose data as output in C format, reversed from Fortran and matlab standard + % ss=size(a); + % nbofdim=length(ss); + % if ss(end)==1; nbofdim=nbofdim-1; end + % nbofdim=max(nbofdim,1); + % if nbofdim==1 + % data=a; + % else + % data=a'; + % end + elseif isempty(param_set_name) && ~area_base + % use sf2par + try + eval(['[adata]=sf2par(diagname,shot,param_name,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']); + catch ME + trhow(ME) + end + elseif ~area_base + % use sf2ps + try + eval(['[adata]=sf2ps(diagname,shot,param_set_name,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']); + catch ME + trhow(ME) end else - if length(size(adata.value))<=2; adata.value = adata.value'; end % cannot transpose Nd>2 matrix - if ~isempty(adata.time_aug) - if length(size(adata.value))<=2; - adata.x=[1:prod(size(adata.value))/length(adata_time.value)]; + % area-base + try + if ~strcmp(extra_arg_sf2sig,'[]') + eval(['[adata]=sf2ab(diagname,shot,sigtype,''-exp'',shotfile_exp,' extra_arg_sf2sig ');']); else - adata.x = []; + [adata]=sf2ab(diagname,shot,sigtype,'-exp',shotfile_exp); end - adata.t=adata.time_aug.value; - else - adata.x=[1:size(adata.value,1)]; - adata.t=[1:size(adata.value,2)]; + adata.data = adata.value{1}; + catch ME + throw(ME) end end - adata.data=adata.value; - adata.units = adata.unit; - % % transpose data as output in C format, reversed from Fortran and matlab standard - % ss=size(a); - % nbofdim=length(ss); - % if ss(end)==1; nbofdim=nbofdim-1; end - % nbofdim=max(nbofdim,1); - % if nbofdim==1 - % data=a; - % else - % data=a'; - % end +end + +if strcmp(upper(sigtype),'PNIQ') + % transform 4x2 PINIs in 1:8 PINIs and total in index=9 + if (prod(size(adata.data))/length(adata.t) == 8) + tmp(:,1:4) = adata.data(:,:,1); + tmp(:,5:8) = adata.data(:,:,2); + tmp(:,9) = sum(tmp,2); + adata.data = tmp; + adata.value = adata.data; + adata.x = [1:9]; + adata.dim = {adata.t, adata.x}; + adata.dimunits = {'s','8 sources;total'}; + else + disp('expects 8 sources in PNIQ'); + return + end end error=0; diff --git a/crpptbx/TCV/gdat_tcv.m b/crpptbx/TCV/gdat_tcv.m index 09b2693a..fe0cb061 100644 --- a/crpptbx/TCV/gdat_tcv.m +++ b/crpptbx/TCV/gdat_tcv.m @@ -58,6 +58,15 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req % a7 = gdat(48836,'static("r_m")[$1]'',''001'); % note first and last quote of tdi argument added by gdat % a7 = gdat(48836,'tcv_eq(''''psi'''',''''liuqe.m'''')'); % do not use double quote char so 'liuqe',11 will work % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Remote data access for TCV +% You need to make a "tunnel" in one unix session from the remote node using for example: +% ssh -L 5555:tcvdata.epfl.ch:8000 sauter@lac911.epfl.ch % to create a tunnel to port 5555 +% +% Then in another unix session on the remote node, in matlab and with the appropriate mds path do: +% >> mdsconnect('localhost:5555') +% >> mdsvalue('1+2') % should return 3 if correctly connected +% % % Comments for local developer: @@ -1147,6 +1156,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase') if ~isfield(gdat_data.gdat_params,'trialindx') || gdat_data.gdat_params.trialindx < 0 gdat_data.gdat_params.trialindx = []; end + if ~isfield(gdat_data.gdat_params,'source') || isempty(gdat_data.gdat_params.source) gdat_data.gdat_params.source = sources_avail; elseif ~iscell(gdat_data.gdat_params.source) diff --git a/crpptbx/TCV_IMAS/tcv2ids.m b/crpptbx/TCV_IMAS/tcv2ids.m index be4ab90d..ee492985 100644 --- a/crpptbx/TCV_IMAS/tcv2ids.m +++ b/crpptbx/TCV_IMAS/tcv2ids.m @@ -2,7 +2,7 @@ function [ids_from_tcv,varargout] = tcv2ids(shot,varargin); % % [ids_from_tcv,varargout] = tcv2ids(shot,varargin); % -% Assumes you have done: +% Assumes you have done: % >> addpath ~g2osaute/public/matlab9_11_2016 (on the gateway) % >> mdsconnect('localhost:5555') % using the tunnel made in another session like: ssh -L 5555:tcvdata:8000 username@lac911.epfl.ch % @@ -80,7 +80,12 @@ end for i=1:length(params_tcv2ids.ids_names) ids_to_get = params_tcv2ids.ids_names{i}; - ids_empty=ids_gen(ids_to_get); + if exist('ids_gen')==2 + ids_empty=ids_gen(ids_to_get); + else + gdat_ids_empty=gdat([],'ids','source',ids_to_get); + end + ids_empty = gdat_ids_empty.(ids_to_get); tmp = gdat(shot,'ids','source',ids_to_get,'machine','tcv'); ids_from_tcv.(ids_to_get) = tmp.(ids_to_get); ids_from_tcv.([ids_to_get '_description']) = tmp.([ids_to_get '_description']); diff --git a/crpptbx/gdat.m b/crpptbx/gdat.m index e54cb69c..45798f79 100644 --- a/crpptbx/gdat.m +++ b/crpptbx/gdat.m @@ -2,7 +2,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request % % function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request,varargin) % -% Aim: get data from a given machine using full path or keywords. +% Aim: get data from a given machine using full path or keywords. % Keywords should be the same for different machines, otherwise add "_machinname" to the keyword if specific % Keywords are and should be case independent (transformed in lower case in the function and outputs) % @@ -40,23 +40,28 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat(shot,data_request % eg.: param1 in gdat_params.param1 and help in gdat_params.help.param1 % % Examples: -% +% % [gd,gp] = gdat; display(gd.gdat_request); % lists all available keywords % gp.data_request = 'Ip'; gd = gdat(48836,gp); % give input parameters as a structure % gd = gdat('opt1',123,'opt2',[1 2 3],'shot',48832,'data_request','Ip','opt3','aAdB'); % give all inputs in pairs % % gd = gdat(shot,'ip'); % standard call % gd = gdat(shot,'ip','Opt1',123,'Doplot',1,'opt2','Abc'); % standard call with a few options (all lowercase in output) -% +% % gd = gdat(48836,'ip','doplot',1,'machine','TCV'); % working call for TCV % gd = gdat(35345,'ip','doplot',1,'machine','AUG'); % working call for AUG % % gd = gdat; to get all available data_requests for the default machine % gd = gdat('machine',machine); to get all available data_requests for a given machine % -% more detailed examples for specific machine: +% more detailed examples for specific machine: % help gdat_tcv; help gdat_aug; help gdat_jet; etc % +% Remote data access: +% +% For most machines we have mdsplus data access, therefore remote data access relatively easily +% Look at help gdat_tcv; help gdat_aug; or help gdat_jet for remote data access for AUG, JET and TCV +% % % Comments for local developer: @@ -137,7 +142,7 @@ if isempty(which(subfunction)), addpath(fullfile(gdat_path,upper(machine_eff))); end % NOTE: we could also check if it matches the path to the main function. - + % copy gdat present call: gdat_call = []; if nargin_eff==0 @@ -177,7 +182,7 @@ try args = {}; elseif nargin_eff==1 args = {shot}; - elseif nargin_eff==2 + elseif nargin_eff==2 args = {shot,data_request}; else args = [{shot,data_request},varargin_eff]; @@ -194,7 +199,7 @@ catch ME_gdat end return end - + gdat_data.gdat_call = gdat_call; if gdat_data.gdat_params.doplot diff --git a/crpptbx/test_all_requestnames.m b/crpptbx/test_all_requestnames.m index 6d0f440b..0c53ba39 100644 --- a/crpptbx/test_all_requestnames.m +++ b/crpptbx/test_all_requestnames.m @@ -1,10 +1,10 @@ -function [pass,request_list,err,telaps,skipped] = test_all_requestnames(varargin) +function [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin) % -% [pass,request_list,err,telaps,skipped] = test_all_requestnames(varargin); +% [pass,request_list,err,telaps,skipped,gdat_results] = test_all_requestnames(varargin); % % test function to run all requestnames -% pass = test_gdat_AUG; % default test -% pass = test_gdat_AUG('param1',value1,'param2',value2,...); % +% pass = test_all_requestnames; % default test +% pass = test_all_requestnames('param1',value1,'param2',value2,...); % % INPUT PARAMETERS (optional) % machine: string of machine name (e.g. 'aug'). (default: gdat internal default) % testmode: depth of test: 'reduced' or 'full' (default: 'reduced') @@ -65,13 +65,13 @@ gdat_call = cell(Nreq,1); %% call gdat requests in a loop for ireq = 1:Nreq myrequest = request_list{ireq}; - + if ~ismember(myrequest,skip) % build request string gdat_call{ireq} = sprintf(['gdat_' machine '(%d,''%s'',''doplot'',%d)'],shot,myrequest,doplot); - + % eval call - [err(ireq),telaps(ireq)] = do_gdat_call(gdat_call{ireq},nverbose); + [err(ireq),telaps(ireq),gdat_results{ireq}] = do_gdat_call(gdat_call{ireq},nverbose); skipped(ireq) = false; pause(0.1) else @@ -116,17 +116,18 @@ switch upper(machine) skip = ''; end -function [err,telaps] = do_gdat_call(gdat_call,nverbose) +function [err,telaps,gdat_result] = do_gdat_call(gdat_call,nverbose) if nverbose fprintf('\n calling %s...\n',gdat_call); end tic try - [~,~,err] = eval(gdat_call); + [gdat_result,~,err] = eval(gdat_call); catch ME warning('Caught matlab error. Report:\n\n%s',getReport(ME,'extended')); err = -1; + gdat_result.data = []; end telaps = toc; % elapsed time @@ -144,7 +145,7 @@ if any(err==0) end end -if any(skipped) +if any(skipped) fprintf('\n\n SKIPPED:\n') print_header(); for ireq=1:Nreq -- GitLab