diff --git a/crpptbx/TCV/loadTCVdata.m b/crpptbx/TCV/loadTCVdata.m index 915106a80c1abb1dfbefdbc569fb794ecec44d88..6c0a2f7f955bad010f4d2f0a85957fe8e06a8cfb 100644 --- a/crpptbx/TCV/loadTCVdata.m +++ b/crpptbx/TCV/loadTCVdata.m @@ -18,6 +18,7 @@ % 'delta', 'triang'[_2,_3] = edge averaged triangularity vs time % 'deltatop', 'triangtop'[_2,_3] = edge upper (top) triangularity vs time % 'deltabot', 'triangbot'[_2,_3] = edge lower (bottom) triangularity vs time +% 'j_tor'[_2,_3] = J_TOR vs (R,Z,time) % 'neint' = line-integrated electron density [m/m^3] % 'ne'= ne raw profile on (z,t). ADD error bars in .std % 'te'= Te raw profile on (z,t). ADD error bars in .std @@ -28,6 +29,7 @@ % 'profnerho' = ne smoothed or fitted , vs (rho,t) (from Thomson auto fit) % 'profterho' = te smoothed or fitted , vs (rho,t) (from Thomson auto fit) % 'neft' = ne fitted from data on rho mesh (from proffit.local_time:neft_abs) +% 'neft:4' = ne fitted from data on rho mesh (from proffit.local_time:neft_abs from trial:trial_indx=4) % 'teft' = te fitted from data on rho mesh (from proffit.local_time:teft) % 'neftav' = ne fitted from averaged over time data on rho mesh (from proffit.avg_time:neft_abs) % 'teftav' = te fitted from averaged over time data on rho mesh (from proffit.avg_time:teft) @@ -113,7 +115,20 @@ if shot==-1 || shot>=100000 end % use keyword without eventual _2 or _3 extension to check for multiple possibilities -data_type_eff_noext=data_type_eff(1:end-i_23); +% Also remove ":4" for trial_indx specification +jj=strfind(data_type_eff,':'); +trialindx=[]; +if ~isempty(jj) + ii=strmatch(data_type_eff(1:jj-1),[{'teft'},{'neft'},{'teftav'},{'neftav'}]) + if ~isempty(ii) + trialindx=str2num(data_type_eff(jj+1:end)); + data_type_eff_noext=[data_type_eff(1:jj-1) ':trial']; + else + data_type_eff_noext=data_type_eff(1:end-i_23); + end +else + data_type_eff_noext=data_type_eff(1:end-i_23); +end if ~isempty(strmatch(data_type_eff_noext,[{'ip'} {'i_p'} {'xip'}],'exact')) data_type_eff_noext='Ip'; end @@ -153,6 +168,10 @@ end if ~isempty(strmatch(data_type_eff_noext,[{'elongation'} {'elon'}],'exact')) data_type_eff_noext='kappa'; end +if ~isempty(strmatch(lower(data_type_eff_noext),[{'j_tor'} {'jtor'} {'\results::j_tor'}],'exact')) + data_type_eff_noext='jtor'; + data_type_eff = ['jtor' endstr]; +end if ~isempty(strmatch(data_type_eff_noext,[{'triangularity'} {'triang'}],'exact')) data_type_eff_noext='delta'; end @@ -182,9 +201,10 @@ end % nodes which have _2 and _3 equivalence, related to simpletdi case liuqe23=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\results::q_psi'} ... - {'\results::beta_tor'} {'\results::beta_pol'} {'\results::q_95'} {'\results::l_i'} {'\results::delta_95'} ... - {'\results::kappa_95'} {'\results::r_contour'} {'\results::z_contour'} {'\results::psi_axis'} ... - {'\results::thomson:psiscatvol'} {'\results::thomson:psi_max'} {'\results::rms_error'} {'\results::total_energy'}]; + {'\results::beta_tor'} {'\results::beta_pol'} {'\results::q_95'} {'\results::l_i'} {'\results::delta_95'} ... + {'\results::kappa_95'} {'\results::r_contour'} {'\results::z_contour'} {'\results::psi_axis'} ... + {'\results::thomson:psiscatvol'} {'\results::thomson:psi_max'} {'\results::rms_error'} {'\results::total_energy'} ... + {'\results::j_tor'} ]; % nodes which have FBTE equivalence, related to simpletdi case liuqeFBTE=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\results::q_psi'} ... @@ -193,14 +213,14 @@ liuqeFBTE=[{'\results::i_p'} {'\results::z_axis'} {'\results::r_axis'} {'\result % keywords which do not have FBTE equivalence and are returned empty noFBTE=[{'ne'} {'te'} {'nerho'} {'terho'} {'nerhozshift'} {'terhozshift'} {'profnerho'} {'profterho'} ... - {'neft'} {'teft'} {'neftav'} {'teftav'} {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'neint'}]; + {'neft'} {'neft:trial'} {'teft:trial'} {'neftav:trial'} {'teftav:trial'} {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'neint'}]; % all keywords and corresponding case to run below TCVkeywrdall=[{'Ip'} {'zmag'} {'rmag'} {'rcont'} {'zcont'} {'vol'} {'rhovol'} {'qrho'} {'q95'} {'kappa'} ... {'delta'} {'deltatop'} {'deltabot'} {'neint'} ... {'ne'} {'te'} {'nerho'} {'terho'} {'nerhozshift'} {'terhozshift'} {'profnerho'} {'profterho'} ... - {'neft'} {'teft'} {'neftav'} {'teftav'} ... - {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'pgyro'}]; + {'neft'} {'teft'} {'neftav'} {'teftav'} {'neft:trial'} {'teft:trial'} {'neftav:trial'} {'teftav:trial'} ... + {'sxr'} {'sxR'} {'ece'} {'MPX'} {'IOH'} {'vloop'} {'pgyro'} {'jtor'}]; TCVsig.iip=strmatch('Ip',TCVkeywrdall,'exact'); TCVsig.izmag=strmatch('zmag',TCVkeywrdall,'exact'); TCVsig.irmag=strmatch('rmag',TCVkeywrdall,'exact'); @@ -224,9 +244,13 @@ TCVsig.iterhozshift=strmatch('terhozshift',TCVkeywrdall,'exact'); TCVsig.iprofnerho=strmatch('profnerho',TCVkeywrdall,'exact'); TCVsig.iprofterho=strmatch('profterho',TCVkeywrdall,'exact'); TCVsig.ineft=strmatch('neft',TCVkeywrdall,'exact'); +TCVsig.ineft_trial=strmatch('neft:trial',TCVkeywrdall); TCVsig.iteft=strmatch('teft',TCVkeywrdall,'exact'); +TCVsig.iteft_trial=strmatch('teft:trial',TCVkeywrdall); TCVsig.ineftav=strmatch('neftav',TCVkeywrdall,'exact'); +TCVsig.ineftav_trial=strmatch('neftav:trial',TCVkeywrdall); TCVsig.iteftav=strmatch('teftav',TCVkeywrdall,'exact'); +TCVsig.iteftav_trial=strmatch('teftav:trial',TCVkeywrdall); TCVsig.isxr=strmatch('sxr',TCVkeywrdall,'exact'); TCVsig.isxR=strmatch('sxR',TCVkeywrdall,'exact'); TCVsig.iece=strmatch('ece',TCVkeywrdall,'exact'); @@ -234,6 +258,7 @@ TCVsig.iMPX=strmatch('MPX',TCVkeywrdall,'exact'); TCVsig.iIOH=strmatch('IOH',TCVkeywrdall,'exact'); TCVsig.ivloop=strmatch('vloop',TCVkeywrdall,'exact'); TCVsig.ipgyro=strmatch('pgyro',TCVkeywrdall,'exact'); +TCVsig.ijtor=strmatch('jtor',TCVkeywrdall,'exact'); % For each keyword, specify which case to use. As most common is 'simpletdi', fill in with this and change % only indices needed. Usually use name of case same as keyword name @@ -245,6 +270,10 @@ TCVkeywrdcase(TCVsig.irhovol)=TCVkeywrdall(TCVsig.irhovol); % idem vol TCVkeywrdcase(TCVsig.ine)=TCVkeywrdall(TCVsig.ine); % special as dimensions from other nodes TCVkeywrdcase(TCVsig.ite)=TCVkeywrdall(TCVsig.ite); % idem TCVkeywrdcase(TCVsig.inerho)=TCVkeywrdall(TCVsig.inerho); % idem +TCVkeywrdcase(TCVsig.iteft_trial)=TCVkeywrdall(TCVsig.iteft_trial); % special to extract trial_indx if needed +TCVkeywrdcase(TCVsig.ineft_trial)=TCVkeywrdall(TCVsig.ineft_trial); % special to extract trial_indx if needed +TCVkeywrdcase(TCVsig.iteftav_trial)=TCVkeywrdall(TCVsig.iteftav_trial); % special to extract trial_indx if needed +TCVkeywrdcase(TCVsig.ineftav_trial)=TCVkeywrdall(TCVsig.ineftav_trial); % special to extract trial_indx if needed TCVkeywrdcase(TCVsig.iterho)=TCVkeywrdall(TCVsig.iterho); % idem TCVkeywrdcase(TCVsig.inerhozshift)=TCVkeywrdall(TCVsig.inerhozshift); % idem TCVkeywrdcase(TCVsig.iterhozshift)=TCVkeywrdall(TCVsig.iterhozshift); % idem @@ -257,6 +286,7 @@ TCVkeywrdcase(TCVsig.iMPX)=TCVkeywrdall(TCVsig.iMPX); TCVkeywrdcase(TCVsig.iIOH)=TCVkeywrdall(TCVsig.iIOH); TCVkeywrdcase(TCVsig.ivloop)=TCVkeywrdall(TCVsig.ivloop); TCVkeywrdcase(TCVsig.ipgyro)=TCVkeywrdall(TCVsig.ipgyro); +TCVkeywrdcase(TCVsig.ijtor)=TCVkeywrdall(TCVsig.ijtor); % Information about which dimension has time, always return 2D data as (x,t) array % as most are 1D arrays with time as first index, fill in with ones and change only those needed @@ -283,6 +313,11 @@ TCVsiglocation(TCVsig.ineft)={'\results::proffit.local_time:neft_abs'}; TCVsigti TCVsiglocation(TCVsig.iteft)={'\results::proffit.local_time:teft'}; TCVsigtimeindx(TCVsig.iteft)=2; TCVsiglocation(TCVsig.ineftav)={'\results::proffit.avg_time:neft_abs'}; TCVsigtimeindx(TCVsig.ineftav)=2; TCVsiglocation(TCVsig.iteftav)={'\results::proffit.avg_time:teft'}; TCVsigtimeindx(TCVsig.iteftav)=2; +TCVsiglocation(TCVsig.ineft_trial)=TCVsiglocation(TCVsig.ineft); TCVsigtimeindx(TCVsig.ineft_trial)=2; +TCVsiglocation(TCVsig.iteft_trial)=TCVsiglocation(TCVsig.iteft); TCVsigtimeindx(TCVsig.iteft_trial)=2; +TCVsiglocation(TCVsig.ineftav_trial)=TCVsiglocation(TCVsig.ineftav); TCVsigtimeindx(TCVsig.ineftav_trial)=2; +TCVsiglocation(TCVsig.iteftav_trial)=TCVsiglocation(TCVsig.iteftav); TCVsigtimeindx(TCVsig.iteftav_trial)=2; + % initialize order of substructures and allows just a "return" if data empty trace.data=[]; @@ -291,7 +326,6 @@ trace.t=[]; trace.dim=[]; trace.dimunits=[]; trace.units=[]; - irpintwarn=0; % find index of signal called upon if strcmp(data_type_eff(1:1),'\') @@ -316,7 +350,7 @@ if strcmp(data_type_eff(1:1),'\') error('in loadTCVdata') end else - index=strmatch(data_type_eff_noext,TCVkeywrdall,'exact'); + index=strmatch(data_type_eff_noext,TCVkeywrdall,'exact') if isempty(index) disp(' ') disp('********************') @@ -938,6 +972,47 @@ switch TCVkeywrdcase{index} mdsclose; error=0; + %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + case 'jtor' + % \results::j_tor , 3-D so need to specify time dim index + mdsopen(shot); + nodenameeff=[{'\results::j_tor'} endstr]; + tracetdi=tdi(nodenameeff{:}); + trace.data=tracetdi.data; + trace.x=tracetdi.dim{1}; + trace.t=tracetdi.dim{3}; + trace.dim=tracetdi.dim; + trace.dimunits=tracetdi.dimunits; + % isfield does not work since tracetdi is not a 'struct' but a tdi object, thus isfield using isa does not work + if any(strcmp(fieldnames(tracetdi),'units')) + trace.units=tracetdi.units; + end + trace.name=[num2str(shot) ';' nodenameeff]; + mdsclose; + error=0; + + %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& + case {'neft:trial','teft:trial','neftav:trial','teftav:trial'} + % trial indx + mdsopen(shot); + eval(['nodenameeff={''' TCVsiglocation{index} ':trial''};']); + tracetdi=tdi(nodenameeff{:}); + if isempty(trialindx) + error('trialindx should not be empty, check call or ask O. Sauter'); + end + trace.data=tracetdi.data(:,:,trialindx+1); + trace.x=tracetdi.dim{1}; + trace.t=tracetdi.dim{2}; + trace.dim=tracetdi.dim(1:2); + trace.dimunits=tracetdi.dimunits(1:2); + % isfield does not work since tracetdi is not a 'struct' but a tdi object, thus isfield using isa does not work + if any(strcmp(fieldnames(tracetdi),'units')) + trace.units=tracetdi.units; + end + trace.name=[num2str(shot) ' ; ' nodenameeff{:} ' ; trialindx=' num2str(trialindx) ]; + mdsclose; + error=0; + otherwise % eval(['!mailto_Andrea ''from loadTCVdata, data_type_eff= ' data_type_eff '''']) disp(['this data_type_eff' ' ' data_type_eff ' ' 'not yet programmed in loadTCVdata, ask Andrea.Scarabosio@epfl.ch']); diff --git a/crpptbx/TCV/private/angular_fact_1.mat b/crpptbx/TCV/private/angular_fact_1.mat index 85fd9a52692c72745b87ad324e2601e6d90fa66d..9643be7b4b3edd0f3734bc7b666c5eaa6373c0b2 100755 Binary files a/crpptbx/TCV/private/angular_fact_1.mat and b/crpptbx/TCV/private/angular_fact_1.mat differ diff --git a/crpptbx/TCV/private/bad_channels.mat b/crpptbx/TCV/private/bad_channels.mat index e950698cfd82fae24b1fcd0aeaf8eea96ef638b1..9933a3a72f2d4265b5e3a3fcb23ed94bc7a3b57a 100755 Binary files a/crpptbx/TCV/private/bad_channels.mat and b/crpptbx/TCV/private/bad_channels.mat differ diff --git a/crpptbx/TCV/private/tcv_vesc1.mat b/crpptbx/TCV/private/tcv_vesc1.mat index becc16ea4e9dc15a3afedbacd112ef4f681b7bcb..85f9d33a1e61bdb183f766825358e927713cb698 100644 Binary files a/crpptbx/TCV/private/tcv_vesc1.mat and b/crpptbx/TCV/private/tcv_vesc1.mat differ diff --git a/crpptbx/gdat.m b/crpptbx/gdat.m index 8358d100eac18b1afb96daaa67b88ba39ee60f2f..242b82eaac33cc498960f221e84330fcf9cbd365 100644 --- a/crpptbx/gdat.m +++ b/crpptbx/gdat.m @@ -141,8 +141,16 @@ if doplot==1 & length(trace.data)>1 & ~ischar(trace.data) plot(trace.t,trace.data); ylabel(data_type) else - plot(trace.t,trace.data(:,:,1)); - ylabel([data_type '(:,:,1)']) + for idim=1:length(trace.dim) + if length(trace.t)==length(trace.dim{idim}); idim_t=idim; end + end + if idim_t<=2 + plot(trace.t,trace.data(:,:,floor(end/2))); + ylabel([data_type '(:,:,floor(end/2))']) + elseif idim_t==3; + plot(trace.t,reshape(trace.data(:,floor(end/2),:),length(trace.dim{1}),length(trace.t))); + ylabel([data_type '(:,floor(end/2),:)']) + end end xlabel('time [s]') title([machine ' ' num2str(shot)])