diff --git a/crpptbx/README b/crpptbx/README
index b7886074523a7d9220bb7e8bb41aa7406ab54596..e57b290540c3f45b8a35033724f832c966c74a69 100644
--- a/crpptbx/README
+++ b/crpptbx/README
@@ -19,3 +19,7 @@ The specificity of a given machine are in "help loadNEWMACHINEdata"
 
 Thus the head comments of these functions should be correctly updated and self-explanatory
 
+
+2015/09/17 tag the version before copying new gdat in crpptbx_new to the crpptbx case and removing loadTCVdata
+           note that AUG will not work for a while, but will be repaired next week....
+           svn cp https://crppsvn.epfl.ch/repos/TCV/gdat/trunk https://crppsvn.epfl.ch/repos/TCV/gdat/tags/gdat_v3_9 -m"last version before changing to new gdat with machine_mapping file, first TCV is modified"
diff --git a/crpptbx_new/TCV/gdat_tcv.m b/crpptbx_new/TCV/gdat_tcv.m
index 8e07dd683609b458c47c6c213631893d97b034b9..269a3fb267f4063d1e9cd217304970e5da76d21f 100644
--- a/crpptbx_new/TCV/gdat_tcv.m
+++ b/crpptbx_new/TCV/gdat_tcv.m
@@ -58,6 +58,7 @@ function [gdat_data,gdat_params,error_status,varargout] = gdat_tcv(shot,data_req
 
 varargout{1}=cell(1,1);
 error_status=1;
+nverbose = 1;
 
 % construct default parameters structure
 gdat_params.data_request = '';
@@ -298,7 +299,7 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi')
     aatmp=eval(eval_expr);
   end
   if isempty(aatmp.data) || isempty(aatmp.dim) % || ischar(aatmp.data) (to add?)
-    warning(['problems loading data for ' eval_expr ' for data_request= ' data_request_eff])
+    if (nverbose>=3); warning(['problems loading data for ' eval_expr ' for data_request= ' data_request_eff]); end
     return
   end
   gdat_data.data = aatmp.data;
@@ -349,23 +350,23 @@ if strcmp(mapping_for_tcv.method(1:3),'tdi')
   % end of method "tdi"
 
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-elseif strcmp(mapping_for_tcv.method,'function')
-  % 2nd: method="function"
-  % assume expression contains function to call and which returns a structure
+elseif strcmp(mapping_for_tcv.method,'expression')
+  % 2nd: method="expression"
+  % assume expression contains function to call and which returns a structure into variable gdat_tmp
   % we copy the structure, to make sure default nodes are defined and to avoid if return is an closed object like tdi
-  % eval_expr = ['aatmp=' mapping_for_tcv.expression ';'];
-  aatmp = eval(mapping_for_tcv.expression);
-  if isempty(aatmp) || (~isstruct(aatmp) & ~isobject(aatmp))
+  % eval_expr = [mapping_for_tcv.expression ';'];
+  eval([mapping_for_tcv.expression ';']);
+  if isempty(gdat_tmp) || (~isstruct(gdat_tmp) & ~isobject(gdat_tmp))
     warning(['function expression does not return a structure: ' mapping_for_tcv.expression])
     error_status=801;
     return
   end
-  tmp_fieldnames = fieldnames(aatmp);
-  if sum(strcmp(tmp_fieldnames,'data'))==0 % note: cannot do isfield since aatmp might be an object
+  tmp_fieldnames = fieldnames(gdat_tmp);
+  if sum(strcmp(tmp_fieldnames,'data'))==0 % note: cannot do isfield since gdat_tmp might be an object
     warning(['function does not return a child name ''data'' for ' data_request_eff])
   end
   for i=1:length(tmp_fieldnames)
-    gdat_data.(tmp_fieldnames{i}) = aatmp.(tmp_fieldnames{i});
+    gdat_data.(tmp_fieldnames{i}) = gdat_tmp.(tmp_fieldnames{i});
   end
   % add .t and .x in case only dim is provided
   % do not allow shifting of timedim since should be treated in the relevant function
@@ -623,10 +624,16 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     
    case {'ne','te'}
     % ne or Te from Thomson data on raw z mesh vs (z,t)
-    nodenameeff=['\results::thomson:' data_request_eff];
+    edge_str_ = '';
+    edge_str_dot = '';
+    if isfield(gdat_data.gdat_params,'edge') && ~isempty(gdat_data.gdat_params.edge) && ...
+          gdat_data.gdat_params.edge>0
+      edge_str_ = '_edge';
+      edge_str_dot = '.edge';
+    end
+    nodenameeff=['\results::thomson' edge_str_dot ':' data_request_eff];
     tracetdi=tdi(nodenameeff);
-    tracestd=tdi(['\results::thomson:' data_request_eff ':error_bar']);
-    trace_fir_rat=tdi('\results::thomson:fir_thom_rat');
+    tracestd=tdi(['\results::thomson' edge_str_dot ':' data_request_eff ':error_bar']);
     gdat_data.data=tracetdi.data'; % Thomson data as (t,z)
     gdat_data.error_bar=tracestd.data';
     gdat_data.data_fullpath=[nodenameeff];
@@ -645,7 +652,7 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       return
     end
     if strcmp(data_request_eff(1:2),'ne')
-      tracefirrat_data = get_fir_thom_rat_data(shot,'thomson',time);
+      tracefirrat_data = get_fir_thom_rat_data(shot,['thomson' edge_str_],time);
       gdat_data.data_abs = gdat_data.data * diag(tracefirrat_data);
       gdat_data.error_bar_abs = gdat_data.error_bar * diag(tracefirrat_data);
       gdat_data.firrat=tracefirrat_data;
@@ -675,25 +682,31 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
       disp(['!!!!!!!!!!!!!!!!!!!!!!!!! cannot continue with ' data_request_eff])
       return
     end
-    edge_str_col = '';
+    zshift = 0.;
+    if isfield(gdat_data.gdat_params,'zshift') && ~isempty(gdat_data.gdat_params.zshift)
+      zshift = gdat_data.gdat_params.zshift;
+    else
+      gdat_data.gdat_params.zshift = zshift;
+    end
+    edge_str_ = '';
     edge_str_dot = '';
     if isfield(gdat_data.gdat_params,'edge') && ~isempty(gdat_data.gdat_params.edge) && ...
           gdat_data.gdat_params.edge>0
-      edge_str_col = ':edge';
-      edge_str_dot = ':edge';
+      edge_str_ = '_edge';
+      edge_str_dot = '.edge';
     end
     % if nete_rho, do first ne, then Te later (so fir stuff already done)
     if strcmp(data_request_eff,'ne_rho')  || strcmp(data_request_eff,'nete_rho')
-      nodenameeff=['\results::thomson' edge_str_col ':ne'];
+      nodenameeff=['\results::thomson' edge_str_dot ':ne'];
       tracetdi=tdi(nodenameeff);
-      nodenameeff=['\results::thomson' edge_str_col ':ne; error_bar ; fir_thom_rat; (ne,std)*fir_thom_rat'];
-      tracestd=tdi(['\results::thomson'  edge_str_col ':ne:error_bar']);
-      tracefirrat_data = get_fir_thom_rat_data(shot,'thomson',time);
+      nodenameeff=['\results::thomson' edge_str_dot ':ne; error_bar ; fir_thom_rat; (ne,std)*fir_thom_rat'];
+      tracestd=tdi(['\results::thomson'  edge_str_dot ':ne:error_bar']);
+      tracefirrat_data = get_fir_thom_rat_data(shot,['thomson' edge_str_],time);
     else
-      nodenameeff=['\results::thomson' edge_str_col ':te'];
+      nodenameeff=['\results::thomson' edge_str_dot ':te'];
       tracetdi=tdi(nodenameeff);
-      nodenameeff=['\results::thomson' edge_str_col ':te; error_bar'];
-      tracestd=tdi(['\results::thomson' edge_str_col ':te:error_bar']);
+      nodenameeff=['\results::thomson' edge_str_dot ':te; error_bar'];
+      tracestd=tdi(['\results::thomson' edge_str_dot ':te:error_bar']);
     end
     gdat_data.data=tracetdi.data'; % Thomson data as (t,z)
     gdat_data.error_bar=tracestd.data';
@@ -708,6 +721,32 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     % construct rho mesh
     psi_max=tdi(['\results::thomson' edge_str_dot ':psi_max' substr_liuqe]);
     psiscatvol=tdi(['\results::thomson' edge_str_dot ':psiscatvol' substr_liuqe]);
+    if abs(zshift)>1e-5
+      % calculate new psiscatvol
+      psitdi=tdi(['\results::psi' substr_liuqe]);
+      rmesh=psitdi.dim{1};
+      zmesh=psitdi.dim{2};
+      zthom=mdsdata('dim_of(\thomson:te,1)');
+      zeffshift=zshift;
+      % set zeffshift time array same as psitdi
+      switch length(zeffshift)
+        case 1
+          zeffshift=zeffshift * ones(size(psitdi.dim{3}));
+        case length(psitdi.dim{3})
+          % ok
+        case length(psiscatvol.dim{1})
+          zeffshift=interp1(psiscatvol.dim{1},zeffshift,psitdi.dim{3});
+        otherwise
+          disp(' bad time dimension for zshift')
+          disp(['it should be 1 or ' num2str(length(psiscatvol.dim{1})) ' or ' num2str(length(psitdi.dim{3}))])
+      end
+      for it=1:length(psiscatvol.dim{1})
+        itpsitdi=iround(psitdi.dim{3},psiscatvol.dim{1}(it));
+        psirz=psitdi.data(:,:,itpsitdi);
+        psiscatvol0=griddata(rmesh,zmesh,psirz',0.9*ones(size(zthom)),zthom-zeffshift(itpsitdi));
+        psiscatvol.data(it,:)=psiscatvol0;
+      end
+    end
     if ~isempty(psiscatvol.data) && ~ischar(psiscatvol.data) && ~isempty(psi_max.data) && ~ischar(psi_max.data)
       for ir=1:length(psiscatvol.dim{2})
         rho(ir,:)= sqrt(1.-psiscatvol.data(:,ir)./psi_max.data(:))';
@@ -722,24 +761,106 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
     if any(strcmp(fieldnames(tracetdi),'units'))
       gdat_data.units=tracetdi.units;
     end
+    %%%%%%%%%%% add fitted profiles if 'fit'>=1
+    if isfield(gdat_data.gdat_params,'fit') && ~isempty(gdat_data.gdat_params.fit) && ...
+          gdat_data.gdat_params.fit>0
+      % default is from proffit:avg_time
+      def_proffit = '\results::proffit.avg_time';
+      if isfield(gdat_data.gdat_params,'fit_type') && ~isempty(gdat_data.gdat_params.fit_type)
+        if strcmp(gdat_data.gdat_params.fit_type,'local')
+          def_proffit = '\results::proffit.local_time';
+        else
+          gdat_data.gdat_params.fit_type = 'avg';
+        end
+      else
+        gdat_data.gdat_params.fit_type = 'avg';
+      end
+      if strcmp(data_request_eff(1:2),'ne')
+        nodenameeff = [def_proffit ':neft_abs']; % do first ne if nete asked for
+      elseif strcmp(data_request_eff(1:2),'te')
+        nodenameeff = [def_proffit ':teft'];
+      else
+        disp(['should not be here: data_request_eff, data_request_eff(1:2)= ',data_request_eff, data_request_eff(1:2)]);
+      end
+      if isfield(gdat_data.gdat_params,'trialindx') && ~isempty(gdat_data.gdat_params.trialindx) && ...
+          gdat_data.gdat_params.trialindx>=0
+        nodenameeff=[nodenameeff ':trial'];
+        trialindx = gdat_data.gdat_params.trialindx;
+      else
+        gdat_data.gdat_params.trialindx = [];
+        trialindx = [];
+      end
+      tracetdi=tdi(nodenameeff);
+      if isempty(trialindx)
+        gdat_data.fit.data = tracetdi.data;
+      else
+        if ~isempty(tracetdi.data) && size(tracetdi.data,3)>=trialindx+1
+          gdat_data.fit.data = tracetdi.data(:,:,trialindx+1);
+        else
+          gdat_data.fit.data = [];
+          gdat_data.fit.data_fullpath = [nodenameeff ' with trialindx=' num2str(trialindx) ' is empty'];
+          return
+        end
+      end
+      gdat_data.fit.x=tracetdi.dim{1};
+      gdat_data.fit.t=tracetdi.dim{2};
+      if mapping_for_tcv.timedim~=2 | mapping_for_tcv.gdat_timedim~=2
+        disp(['unexpected timedim in fit: data_request_eff= ' data_request_eff ...
+             ', mapping_for_tcv.timedim= ' mapping_for_tcv.timedim ...
+             ', mapping_for_tcv.gdat_timedim= ' mapping_for_tcv.gdat_timedim]);
+      end
+      gdat_data.dim=tracetdi.dim(1:2);
+      gdat_data.dimunits=tracetdi.dimunits(1:2);
+      if any(strcmp(fieldnames(tracetdi),'units'))
+        gdat_data.fit.units=tracetdi.units;
+      end
+      gdat_data.fit.data_fullpath = nodenameeff;
+      % do te as well if nete asked for
+      if strcmp(data_request_eff(1:4),'nete')
+        gdat_data.fit.ne.data = gdat_data.fit.data;
+        gdat_data.fit.ne.units = gdat_data.fit.units;
+        nodenameeff = [def_proffit ':teft'];
+        if ~isempty(trialindx); nodenameeff=[nodenameeff ':trial']; end
+        tracetdi=tdi(nodenameeff);
+        if isempty(trialindx)
+          gdat_data.fit.te.data = tracetdi.data;
+        else
+        if ~isempty(tracetdi.data) && size(tracetdi.data,3)>=trialindx+1
+          gdat_data.fit.te.data = tracetdi.data(:,:,trialindx+1);
+        else
+          return
+        end
+        end
+        if any(strcmp(fieldnames(tracetdi),'units'))
+          gdat_data.fit.te.units=tracetdi.units;
+        end
+        % construct pe=1.6022e-19*ne*te
+        gdat_data.fit.data = 1.6022e-19.*gdat_data.fit.ne.data .* gdat_data.fit.te.data;
+        gdat_data.fit.units = 'N/m^2; 1.6022e-19 ne Te';
+        gdat_data.fit.data_fullpath = [gdat_data.fit.data_fullpath ' ; ' nodenameeff ' and pe in data'];
+      end
+    else
+      gdat_data.gdat_params.fit = 0;
+    end
+    %%%%%%%%%%%
     % if nete_rho, copy data as .ne, get .te and put pe=e ne Te in data:
-    if strcmp(data_request_eff,'nete_rho')
+    if strcmp(data_request_eff(1:4),'nete')
       gdat_data.ne.data = gdat_data.data_abs;
       gdat_data.ne.error_bar = gdat_data.error_bar_abs;
       gdat_data.ne.firrat=gdat_data.firrat;
       gdat_data.ne.units = 'm^{-3}';
       gdat_data = rmfield(gdat_data,{'firrat','data_abs','error_bar_abs'});
       %
-      nodenameeff=['\results::thomson' edge_str_col ':te'];
+      nodenameeff=['\results::thomson' edge_str_dot ':te'];
       tracetdi=tdi(nodenameeff);
-      nodenameeff=['\results::thomson' edge_str_col ':te; error_bar'];
-      tracestd=tdi(['\results::thomson' edge_str_col ':te:error_bar']);
+      nodenameeff=['\results::thomson' edge_str_dot ':te; error_bar'];
+      tracestd=tdi(['\results::thomson' edge_str_dot ':te:error_bar']);
       gdat_data.te.data=tracetdi.data';
       gdat_data.te.error_bar=tracestd.data';
       gdat_data.te.units = tracetdi.units;
       gdat_data.data_fullpath=['pe=1.6e-19*ne*Te in data, .ne, .te from \results::thomson' ...
-                    edge_str_col ':ne and te and projected on rhopol\_norm'];
-      gdat_data.units='N/m^2';
+                    edge_str_dot ':ne and te and projected on rhopol\_norm'];
+      gdat_data.units='N/m^2; 1.6022e-19 ne Te';
       gdat_data.data = 1.6022e-19 .* gdat_data.ne.data .* gdat_data.te.data;
       gdat_data.error_bar = 1.6022e-19 .* (gdat_data.ne.data .* gdat_data.te.error_bar ...
           + gdat_data.te.data .* gdat_data.ne.error_bar);
@@ -907,12 +1028,66 @@ elseif strcmp(mapping_for_tcv.method,'switchcase')
         gdat_data.data_fullpath='sqrt(\results::psitbx:vol/vol_edge)';
         gdat_data.request_description = 'sqrt(volume(rho)/volume(edge))';
       else
-        disp(['should not be here in vol cases with data_request = ' data_request]);
+        disp(['should not be here in vol cases with data_request = ' data_request_eff]);
         return
       end
     end
       gdat_data.t = gdat_data.dim{mapping_for_tcv.gdat_timedim};
     
+   case {'sxr'}
+    % sxr from Xtomo by default or dmpx if 'camera','dmpx' is provided
+
+   case {'profnerho','profterho'}
+    % for backward compatibility but corresponds to ne_rho with param.fit_type='auto' (TCV 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 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
+      end
+    else
+      tracetdi=avers;
+      gdat_data.x=[];
+      gdat_data.t=[];
+    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;
+    end
+    gdat_data.request_description = 'quick autofits within thomson nodes, using version';
+    gdat_data.fullpath = ['Thomson autfits from ' nodenameeff];
+
    otherwise
     warning(['switchcase= ' data_request_eff ' not known in gdat_tcv'])
     error_status=901;
@@ -972,9 +1147,17 @@ if strcmp(maintracename_eff,'thomson')
     end
   end
 elseif strcmp(maintracename_eff,'thomson_edge')
-  tracefirrat=tdi('\results::thomson_edge:fir_thom_rat');
-  if isempty(tracefirrat.data) || ischar(tracefirrat.data)
-    disp('problem with \results::thomson_edge:fir_thom_rat: empty')
+  if shot>=23801
+    tracefirrat=tdi('\results::thomson.profiles.auto:fir_thom_rat'); %time base not same!!
+    if isempty(tracefirrat.data) || ischar(tracefirrat.data)
+      disp('problem with \results::thomson.profiles.auto:fir_thom_rat: empty, use thomson:fir_thom_rat')
+      tracefirrat=tdi('\results::thomson:fir_thom_rat');
+    end
+  else
+    tracefirrat=tdi('\results::thomson_edge:fir_thom_rat');
+    if isempty(tracefirrat.data) || ischar(tracefirrat.data)
+      disp('problem with \results::thomson_edge:fir_thom_rat: empty')
+    end
   end
 else
   disp('bad input in get_fir_thom_rat_data')
diff --git a/crpptbx_new/TCV/tcv_requests_mapping.m b/crpptbx_new/TCV/tcv_requests_mapping.m
index ddbae25b6861b81698edfd01f56a1b97e0af3996..94fe43f84ec911e3a1ac24f2eb73dcf8a9b20ad6 100644
--- a/crpptbx_new/TCV/tcv_requests_mapping.m
+++ b/crpptbx_new/TCV/tcv_requests_mapping.m
@@ -1,4 +1,7 @@
 function mapping = tcv_requests_mapping(data_request)
+%
+% Information pre-defined for gdat_tcv, you can add cases here to match official cases in gdat_tcv, allowing backward compatibility
+%
 
 % Defaults
 mapping = struct(...
@@ -23,7 +26,7 @@ mapping.label = data_request;
 % method = 'tdi' and then expression is the string within tdi (usual case when there is a direct link to an existing signal)
 %                with tdi, if expression cell array, call tdi(cell{1},cell{2},...)
 % method = 'tdiliuqe': same as tdi but adds "_2" or "_3" if 'liuqe',2 or 3 is asked for in options
-% method = 'function', then expression is the funtion to call which should return a structure, which fields are copied to gdat_data
+% method = 'expression', then expression is executed and it should provide the structure gdat_tmp, which fields are copied to gdat_data
 % method = 'switchcase', then there will be a specific case within gdat_tcv (usual case when not directly a signal)
 %
 % label is used for plotting
@@ -62,7 +65,7 @@ switch lower(data_request)
   mapping.timedim = 1;
   mapping.method = 'tdiliuqe';
   mapping.expression = '\results::delta_edge';
-  % mapping.method = 'function';
+  % mapping.method = 'expression';
   % mapping.expression = ['tdi(''\results::q_psi'');']; % for tests
  case 'delta_bottom'
   mapping.timedim = 1;
@@ -123,6 +126,12 @@ switch lower(data_request)
   mapping.timedim = 2;
   mapping.label = 'ne';
   mapping.method = 'switchcase';
+ case 'neft'
+  mapping.timedim = 2;
+  mapping.label = 'ne';
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''ne_rho''; ' ...
+                    'params_eff.fit=1;params_eff.fit_type=''avg'';gdat_tmp=gdat_tcv([],params_eff);'];
  case 'nete_rho'
   mapping.timedim = 2;
   mapping.label = 'ne and Te';
@@ -158,6 +167,10 @@ switch lower(data_request)
   mapping.timedim = 2;
   mapping.label = 'q';
   mapping.method = 'switchcase';
+ case 'r_contour'
+  mapping.timedim = 1;
+  mapping.method = 'tdiliuqe';
+  mapping.expression = '\results::r_contour';
  case 'rgeom'
   mapping.timedim = 1;
   mapping.label = 'Rgeom';
@@ -190,6 +203,12 @@ switch lower(data_request)
   mapping.timedim = 2;
   mapping.label = 'Te';
   mapping.method = 'switchcase';
+ case 'teft'
+  mapping.timedim = 2;
+  mapping.label = 'ne';
+  mapping.method = 'expression';
+  mapping.expression = ['params_eff = gdat_data.gdat_params;params_eff.data_request=''te_rho''; ' ...
+                    'params_eff.fit=1;params_eff.fit_type=''avg'';gdat_tmp=gdat_tcv([],params_eff);'];
  case 'ti'
   mapping.timedim = 2;
   mapping.label = 'Ti';
@@ -211,6 +230,10 @@ switch lower(data_request)
   mapping.label = 'Volume(\rho)';
   mapping.method = 'switchcase';
   % mapping.expression = '\results::psitbx:vol'; (if exists for liuqe2 and 3 as well)
+ case 'z_contour'
+  mapping.timedim = 1;
+  mapping.method = 'tdiliuqe';
+  mapping.expression = '\results::z_contour';
  case 'zeff'
   mapping.timedim = 1;
   mapping.label = 'zeff from Ip-Ibs';
@@ -225,8 +248,19 @@ switch lower(data_request)
   mapping.label = 'Zmagaxis';
   mapping.method = 'tdiliuqe';
   mapping.expression = '\results::z_axis';
+  % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  % extra TCV cases (not necessarily in official data_request name list)
+  % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+  %
+ case {'profnerho','profterho'}
+  mapping.timedim = 1;
+  mapping.label = data_request;
+  mapping.method = 'switchcase';
+  mapping.expression = '';
+  
 % $$$  case ''
-% $$$   mapping.label = '';
+% $$$   mapping.timedim = 1;
+% $$$   mapping.label = data_request;
 % $$$   mapping.method = 'tdi';
 % $$$   mapping.expression = '';
  otherwise
diff --git a/crpptbx_new/demos/html/gdat_tutorial.html b/crpptbx_new/demos/html/gdat_tutorial.html
index dfdd8d7f25a7f4532d1af6e240690e498173b817..8e200f0afc0693f822849b5c29ab99018875d5e5 100644
--- a/crpptbx_new/demos/html/gdat_tutorial.html
+++ b/crpptbx_new/demos/html/gdat_tutorial.html
@@ -6,7 +6,7 @@
    <!--
 This HTML was auto-generated from MATLAB code.
 To make changes, update the MATLAB code and republish this document.
-      --><title>gdat_tutorial</title><meta name="generator" content="MATLAB 8.3"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2015-08-27"><meta name="DC.source" content="gdat_tutorial.m"><style type="text/css">
+      --><title>gdat_tutorial</title><meta name="generator" content="MATLAB 8.3"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2015-09-15"><meta name="DC.source" content="gdat_tutorial.m"><style type="text/css">
 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
 
 html { min-height:100%; margin-bottom:1px; }
@@ -275,12 +275,6 @@ time_eff =
 
      1
 
- read_results_for_chease for shot with LIUQE values for shot = 48836
-wrote /tmp/sauter/EXPEQ_48836t1.0000
-wrote /tmp/sauter/EXPEQ_PP48836t1.0000
-wrote /tmp/sauter/eqdsk.48836t1.0000
-wrote /tmp/sauter/eqdsksigns.48836t1.0000
-wrote /tmp/sauter/EXPEQsigns_48836t1.0000
 do not calculate BR, BZ, Bphi, etc
 Wrote /tmp/sauter/EQDSK_48836t1.0000_COCOS02
 Wrote /tmp/sauter/EQDSK_48836t1.0000_COCOS02_IpB0positive
diff --git a/crpptbx_new/demos/html/gdat_tutorial_01.png b/crpptbx_new/demos/html/gdat_tutorial_01.png
index 985836879c50dee0278900357ef6b53d31116613..f69c2d1cabfb6258b925873a22b0988751534ad2 100644
Binary files a/crpptbx_new/demos/html/gdat_tutorial_01.png and b/crpptbx_new/demos/html/gdat_tutorial_01.png differ
diff --git a/crpptbx_new/demos/html/gdat_tutorial_02.png b/crpptbx_new/demos/html/gdat_tutorial_02.png
index b3ae183037a80a2ccb4d13c245148fd893c62348..43d6b88d41ba44d533b7685fc87cf3de78e0d3ad 100644
Binary files a/crpptbx_new/demos/html/gdat_tutorial_02.png and b/crpptbx_new/demos/html/gdat_tutorial_02.png differ