From aa0ab7591897e8d37f03c1535bf06c06ca21e817 Mon Sep 17 00:00:00 2001
From: Olivier Sauter <olivier.sauter@epfl.ch>
Date: Wed, 4 Jun 2014 12:30:43 +0000
Subject: [PATCH] add R and rho in ece, eced, ece_rho and eced_rho gdat calls

git-svn-id: https://spcsvn.epfl.ch/repos/TCV/gdat/trunk@4449 d63d8f72-b253-0410-a779-e742ad2e26cf
---
 crpptbx/AUG/loadAUGdata.m | 66 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 63 insertions(+), 3 deletions(-)

diff --git a/crpptbx/AUG/loadAUGdata.m b/crpptbx/AUG/loadAUGdata.m
index 4c7ccb2c..90c08ce1 100644
--- a/crpptbx/AUG/loadAUGdata.m
+++ b/crpptbx/AUG/loadAUGdata.m
@@ -83,7 +83,9 @@ function [trace,error,varargout]=loadAUGdata(shot,data_type,varargin)
 % sxb : 'SXB/J' chords
 % sxf : 'SXF/I' chords
 % ece : 
+% ece_rho : 
 % eced : 
+% eced_rho : 
 % eced_rmd : 
 % Halpha : 
 % pgyro : for each gyrotrons, power, freq, etc (ask for more)
@@ -185,9 +187,15 @@ if size(data_type_eff,1)==1
   if ~isempty(strmatch(data_type_eff_noext,[{'ECE'}],'exact'))
     data_type_eff_noext='ece';
   end
+  if ~isempty(strmatch(lower(data_type_eff_noext),[{'ece_rho'}],'exact'))
+    data_type_eff_noext='ece_rho';
+  end
   if ~isempty(strmatch(upper(data_type_eff_noext),[{'ECED'}],'exact'))
     data_type_eff_noext='eced';
   end
+  if ~isempty(strmatch(upper(data_type_eff_noext),[{'ECED_RHO'}],'exact'))
+    data_type_eff_noext='eced_rho';
+  end
   if ~isempty(strmatch(upper(data_type_eff_noext),[{'ECED_RMD'}],'exact'))
     data_type_eff_noext='eced_rmd';
   end
@@ -261,7 +269,8 @@ end
 AUGkeywrdall=[{'Ip'} {'b0'} {'zmag'} {'rmag'}  {'rgeo'} {'zgeo'} {'rcont'} {'zcont'} {'vol'} {'qrho'} {'qrho_fpp'} {'q0'} {'q95'} {'kappa'} ...
 	      {'delta'} {'deltatop'} {'deltabot'} {'neint'} {'ne'} {'te'}  ...
 	      {'nerho'} {'neterho'} {'terho'} {'cxrs'} {'cxrs_rho'} {'equil'} {'equil_fpp'} {'equil_eqm'} ...
-	      {'equil_eqr'} {'sxr'} {'sxR'} {'sxb'} {'sxf'} {'ssx_g'} {'ssx_h'} {'ssx_i'} {'ssx_j'} {'ssx'} {'ece'} {'eced'} {'eced_rmd'} {'Halpha'} {'pgyro'} {'powers'}];
+	      {'equil_eqr'} {'sxr'} {'sxR'} {'sxb'} {'sxf'} {'ssx_g'} {'ssx_h'} {'ssx_i'} {'ssx_j'} {'ssx'} ...
+	      {'ece'} {'ece_rho'} {'eced'} {'eced_rho'} {'eced_rmd'} {'Halpha'} {'pgyro'} {'powers'}];
 AUGsig.iip=strmatch('Ip',AUGkeywrdall,'exact');
 AUGsig.ib0=strmatch('b0',AUGkeywrdall,'exact');
 AUGsig.izmag=strmatch('zmag',AUGkeywrdall,'exact');
@@ -302,6 +311,8 @@ AUGsig.issx_j=strmatch('ssx_j',AUGkeywrdall,'exact');
 AUGsig.issx=strmatch('ssx',AUGkeywrdall,'exact');
 AUGsig.iece=strmatch('ece',AUGkeywrdall,'exact');
 AUGsig.ieced=strmatch('eced',AUGkeywrdall,'exact');
+AUGsig.iece_rho=strmatch('ece_rho',AUGkeywrdall,'exact');
+AUGsig.ieced_rho=strmatch('eced_rho',AUGkeywrdall,'exact');
 AUGsig.ieced_rmd=strmatch('eced_rmd',AUGkeywrdall,'exact');
 AUGsig.iHalpha=strmatch('Halpha',AUGkeywrdall,'exact');
 AUGsig.ipgyro=strmatch('pgyro',AUGkeywrdall,'exact');
@@ -334,6 +345,8 @@ AUGkeywrdcase(AUGsig.issx_j)=AUGkeywrdall(AUGsig.issx_j);
 AUGkeywrdcase(AUGsig.issx)=AUGkeywrdall(AUGsig.issx);
 AUGkeywrdcase(AUGsig.iece)=AUGkeywrdall(AUGsig.iece);
 AUGkeywrdcase(AUGsig.ieced)=AUGkeywrdall(AUGsig.ieced);
+AUGkeywrdcase(AUGsig.iece_rho)=AUGkeywrdall(AUGsig.iece_rho);
+AUGkeywrdcase(AUGsig.ieced_rho)=AUGkeywrdall(AUGsig.ieced_rho);
 AUGkeywrdcase(AUGsig.icxrs)=AUGkeywrdall(AUGsig.icxrs);
 AUGkeywrdcase(AUGsig.icxrs_rho)=AUGkeywrdall(AUGsig.icxrs_rho);
 AUGkeywrdcase(AUGsig.ipgyro)=AUGkeywrdall(AUGsig.ipgyro); % idem
@@ -364,6 +377,8 @@ AUGsiglocation(:,AUGsig.ideltabot)={''; ''};
 AUGsiglocation(:,AUGsig.ineint)={'DCN'; 'H-1'};
 AUGsiglocation(:,AUGsig.iece)={'CEC'; 'Trad-A'};
 AUGsiglocation(:,AUGsig.ieced)={'CEC'; 'Trad-A'}; % ECED
+AUGsiglocation(:,AUGsig.iece_rho)={'CEC'; 'Trad-A'};
+AUGsiglocation(:,AUGsig.ieced_rho)={'CEC'; 'Trad-A'}; % ECED
 AUGsiglocation(:,AUGsig.ieced_rmd)={'RMD'; 'Trad-A'}; % ECED_RMD
 AUGsiglocation(:,AUGsig.iHalpha)={'POT'; 'ELMa-Han'};
 
@@ -373,6 +388,7 @@ AUGexplocation=cell(size(AUGkeywrdall,2),1);
 AUGexplocation(:)={'AUGD'};
 % cases with a "private" shotfile:
 AUGexplocation(AUGsig.ieced)={'ECED'};
+AUGexplocation(AUGsig.ieced_rho)={'ECED'};
 AUGexplocation(AUGsig.ieced_rmd)={'ECED'};
 
 % initialize order of substructures and allows just a "return" if data empty
@@ -658,7 +674,7 @@ switch AUGkeywrdcase{index}
     end
     
   %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
-  case {'ece','eced'}
+  case {'ece','eced','ece_rho','eced_rho'}
     %  LOAD MULTI CHANNEL DATA    
     %  load AUG ece data
 
@@ -705,21 +721,65 @@ switch AUGkeywrdcase{index}
     trace.dim{2}=trace.t;
     % get R
     [aR,e]=rdaAUG_eff(shot,ppftype,'R-A',shotfile_exp_eff,timerange);
-    domatchRtime=1;
+    [aZ,e]=rdaAUG_eff(shot,ppftype,'z-A',shotfile_exp_eff,timerange);
+    domatchRtime=0;
     if domatchRtime
       % interpolate R structure on ece data time array, to ease plot vs R
       for i=starti:endi
 	radius.data(i,:) = interp1(aR.t,aR.data(i,:),trace.t);
+	zheight.data(i,:) = interp1(aZ.t,aZ.data(i,:),trace.t);
       end
       radius.t=trace.t;
+      zheight.t=trace.t;
     else
       radius.data = aR.data;
       radius.t=aR.t;
+      zheight.data = aZ.data;
+      zheight.t=aR.t;
     end
     ij=find(trace.data==0);
     trace.data(ij)=NaN;
     varargout{1}={radius};
     trace.R=radius;
+    trace.Z=zheight;
+
+    if strcmp(AUGkeywrdcase{index},'ece_rho') || strcmp(AUGkeywrdcase{index},'eced_rho')
+      equil=gdat(shot,'equil',0);
+      inb_chord_ece=size(trace.R.data,1);
+      inb_time_ece=size(trace.R.data,2);
+      psi_out = NaN*ones(inb_chord_ece,inb_time_ece);
+      rhopsinorm_out = NaN*ones(inb_chord_ece,inb_time_ece);
+      rhotornorm_out = NaN*ones(inb_chord_ece,inb_time_ece);
+      rhovolnorm_out = NaN*ones(inb_chord_ece,inb_time_ece);
+      % constructs intervals within which a given equil is used: [time_equil(i),time_equil(i+1)]
+      time_equil=[1.5*equil.t(1)-0.5*equil.t(2) 0.5.*(equil.t(1:end-1)+equil.t(2:end)) 1.5*equil.t(end)-0.5*equil.t(end-1)];
+      iok=find(aR.data(:,1)>0);
+      for itequil=1:length(time_equil)-1
+	rr=equil.Rmesh(:,itequil);
+	zz=equil.Zmesh(:,itequil);
+	psirz_in = equil.psi2D(:,:,itequil);
+	it_ece_inequil = find(trace.R.t>=time_equil(itequil) & trace.R.t<=time_equil(itequil+1));
+	if ~isempty(it_ece_inequil)
+	  rout=trace.R.data(iok,it_ece_inequil);
+	  ijok=find(~isnan(rout));
+	  if ~isempty(ijok)
+	    zout=trace.Z.data(iok,it_ece_inequil);
+	    psi_at_routzout = interpos2Dcartesian(rr,zz,psirz_in,rout,zout);
+	    psi_out(iok,it_ece_inequil) = reshape(psi_at_routzout,length(iok),length(it_ece_inequil));
+	    rhopsinorm_out(iok,it_ece_inequil) = sqrt((psi_out(iok,it_ece_inequil)-equil.psi_axis(itequil))./(equil.psi_lcfs(itequil)-equil.psi_axis(itequil)));
+	    for it_cx=1:length(it_ece_inequil)
+	      rhotornorm_out(iok,it_ece_inequil(it_cx)) = interpos(equil.rhopolnorm(:,itequil),equil.rhotornorm(:,itequil),rhopsinorm_out(iok,it_ece_inequil(it_cx)),-3,[2 2],[0 1]);
+	      rhovolnorm_out(iok,it_ece_inequil(it_cx)) = interpos(equil.rhopolnorm(:,itequil),equil.rhovolnorm(:,itequil),rhopsinorm_out(iok,it_ece_inequil(it_cx)),-3,[2 2],[0 1]);
+	    end
+	  end
+	end
+      end
+      trace.rhos.psi_on_rztime = psi_out;
+      trace.rhos.rhopsinorm_on_rztime = rhopsinorm_out;
+      trace.rhos.rhotornorm_on_rztime = rhotornorm_out;
+      trace.rhos.rhovolnorm_on_rztime = rhovolnorm_out;
+      trace.rhos.t = trace.R.t;
+    end
 
   %&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   case {'cxrs', 'cxrs_rho'}
-- 
GitLab