Skip to content
Snippets Groups Projects
get_xtomo_data.m 14.38 KiB
function [sig,t]=get_xtomo_data(shot,t1,t2,dt,fans,angfact,tag);

%                                                                  -
%[sig,t]=get_xtomo_data_m5(shot,t1,t2,dt,fans,angfact,tag);
%
%    INPUT:
%       shot:       TCV shot
%       t1:      start time
%       t2:      stop time
%       dt:         timestep
%       fans:    camera switch, e.g. [0 0 0 0 0 0 1 0 1 0];
%       angfact: relative etendue, size:    [20 x 10]
%                tag    'full' or 'brief', indicates if it is
%                a slow or a fast Pentland acquisition
%
% OUTPUTS:
%       sig:        xtomo signals, size:    [sum(fans) x length(t)]
%       t:       times
%
%    ATTENTION: length(time) may be shorter than foreseen !!
%
% This routine works on Matlab5.
% Original routine for Matlab4 by Anton Mathias.
%
% Last update: 25-08-1999
%
%-------------MAC:[FURNO.MATLAB5.XTOMO]----------------------------------


%---- get  data and offsets ---------------------------------------------------

% set a flag if flattenign of noise
% for channels with low signal


iflat=0;
minsiglevel=0.01;
satlevel=9.9;


st1=sprintf('%6.4f',t1);
st2=sprintf('%6.4f',t2);
sdt=num2str(dt);

%    sdt=sprintf('%6.4f',dt); % modified from old version


if shot >= 13836 & shot <= 13848
  tstart=-0.02;tstop=-0.01;        %  this  one is to be used only for
else                        %  shot=13836 to shot=13848
  tstart=-0.04;tstop=-0.01;
end

ststart=num2str(tstart);
ststop=num2str(tstop);

if nargin <=6

  shot=mdsopen(shot);
  t=mdsdata(['dim_of(\base::xtomo:array_001[',st1,':',st2,':',sdt,',*])']);
  S1=[];
  S2=[];
  S3=[];
  S4=[];
  S5=[];
  S6=[];
  S7=[];
  S8=[];
  S9=[];
  S10=[];

  if isempty(t)
    disp('get_xtomo_data: sorry, nothing to be found for this shot ...')
    return
  else
    disp('*-------------------------------------------*')
    disp('| get_xtomo_data: getting data from MDS     |')
    disp('*-------------------------------------------*')
  end

  if shot>6768

    if fans(1)
      S=mdsdata(['\base::xtomo:array_001[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_001[',ststart,':',ststop,',0:19]']);
      S1=S-repmat(mean(offset),length(t),1)';
    end

    if fans(2)
      S=mdsdata(['\base::xtomo:array_002[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_002[',ststart,':',ststop,',0:19]']);
      S2=S-repmat(mean(offset),length(t),1)';
    end

    if fans(3)
      S=mdsdata(['\base::xtomo:array_003[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_003[',ststart,':',ststop,',0:19]']);
      S3=S-repmat(mean(offset),length(t),1)';
    end

    if fans(4)
      S=mdsdata(['\base::xtomo:array_004[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_004[',ststart,':',ststop,',0:19]']);
      S4=S-repmat(mean(offset),length(t),1)';
    end

    if fans(5)
      S=mdsdata(['\base::xtomo:array_005[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_005[',ststart,':',ststop,',0:19]']);
      S5=S-repmat(mean(offset),length(t),1)';
    end

    if fans(6)
      S=mdsdata(['\base::xtomo:array_006[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_006[',ststart,':',ststop,',0:19]']);
      S6=S-repmat(mean(offset),length(t),1)';
    end

    if fans(7)
      S=mdsdata(['\base::xtomo:array_007[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_007[',ststart,':',ststop,',0:19]']);
      S7=S-repmat(mean(offset),length(t),1)';
    end

    if fans(8)
      S=mdsdata(['\base::xtomo:array_008[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_008[',ststart,':',ststop,',0:19]']);
      S8=S-repmat(mean(offset),length(t),1)';
    end

    if fans(9)
      S=mdsdata(['\base::xtomo:array_009[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_009[',ststart,':',ststop,',0:19]']);
      S9=S-repmat(mean(offset),length(t),1)';
    end

    if fans(10)
      S=mdsdata(['\base::xtomo:array_010[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_010[',ststart,':',ststop,',0:19]']);
      S10=S-repmat(mean(offset),length(t),1)';
    end


    sig=-[S1;S2;S3;S4;S5;S6;S7;S8;S9;S10];
    [satrow,satcol]=find(abs(sig)>satlevel);

    if ~isempty(satcol)
      i_tlimit=min(satcol(:));
      if i_tlimit>1
        sig=sig(:,1:i_tlimit-1);
        t=t(1:i_tlimit-1);
        disp(['get_xtomo_data WARNING: some channels saturated',......
              ', t2 changed to ',sprintf('%6.4f',max(t))]);
      else
        sig=[];
        t=[];
        disp('get_xtomo_data WARNING: saturations, no data returned');
        return
      end
    end


    angfact=angfact(:,find(fans));
    angfact=angfact(:);
    gains=get_xtomo_gains(shot);
    % earlier than shot xxx:
    perm=[1:180,[180+[2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19]]];
    gains=gains(perm);
    iact=find(fans);
    nact=length(iact);
    idetec=[];
    for k=1:nact
      idetec=[idetec,(iact(k)-1)*20+1:iact(k)*20];
    end
    gains=gains(idetec);
    gains=gains(:);
    fac=ones(size(gains))./gains;


    sig=-sig.*(repmat(fac,1,length(t)));

    if iflat
      for ii=1:length(t)
        imini=find( sig(:,ii) < minsiglevel*max(sig(:,ii)));
        sig(imini,ii)=zeros(size(imini));
      end
    end

    t=t';
    sig=sig.*(repmat(angfact,1,length(t)));


  else

    if fans(9)
      S=mdsdata(['\base::xtomo:array_001[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_001[',ststart,':',ststop,',0:19]']);
      V=S-repmat(mean(offset),length(t),1)';
    end
    if fans(7)
      S=mdsdata(['\base::xtomo:array_002[',st1,':',st2,':',sdt,',0:19]'])';
      offset=mdsdata(['\base::xtomo:array_002[',ststart,':',ststop,',0:19]']);
      H=S-repmat(mean(offset),length(t),1)';
    end

    %---- read gains of the current shot ---------------------------------------

    gains=get_xtomo_gains(shot);
    g1=gains(1:20)';
    g2=gains(21:40)';

    %------ solid angle factors -----------------------

    aom1=angfact(:,9);
    aom2=angfact(:,7);


    %-----  calculate correcting factors ---------------------------------------

    fac1=(aom1./g1);
    fac2=(aom2./g2);

    %--- result: offset-, calibration- and angular-factor corrected data -------

    V=-V.*(repmat(fac1,1,length(t))); % vertical camera:
    H=-H.*(repmat(fac2,1,length(t))); % horizontal camera:


    sig=[H;V];

    t=t';

  end

else

  if (~strcmp(tag,'brief') & ~strcmp(tag,'full'))
    disp('Only full or brief accepted as tag')
    return
  end


  trace_tree=['\atlas::t_rex3_' tag ':'];
  trace=[trace_tree 'signal_inp:p'];
  %shot=mdsopen('eltca1::tcv_shot',shot);
  shot=mdsopen(shot);
  tref=mdsdata(['_tref=dim_of(' trace,'001)']);  %trace :p001
  dtref=mdsdata('_dtref = _tref[1]-_tref[0]');


  S1=[];
  S2=[];
  S3=[];
  S4=[];
  S5=[];
  S6=[];
  S7=[];
  S8=[];
  S9=[];
  S10=[];

  t_1=mdsdata('_t = dim_of(\atlas::t_rex3_full:signal_inp:p001)');
  dt1=mdsdata('_dt = _t[1]-_t[0]');
  npts=floor(mdsdata(['_npts=(',ststop,'-(',ststart,'))/_dt']));



  if isempty(t_1)
    disp('get_xtomo_data: sorry, nothing to be found for this shot ...')
    return
  else
    disp('*--------------------------------------------*')
    disp('| getting Pentland acquisition: getting      *')
    if strcmp(tag,'brief')
      disp('|         BRIEF data from MDS                *');
    else
      disp('|         FULL   data from MDS               *');
    end
    disp('*--------------------------------------------*');
  end



  if ((dt - dtref) < 1e-7 | floor(dt/dtref) ==0)
    step='1';
  else
    step =num2str(dt/dtref);
  end


  ind1=find( abs(tref-t1) == min(abs(tref-t1)));
  npts1=floor(mdsdata(['_npts1=(',st2,'-(',st1,'))/_dtref']));
  sind1=num2str(ind1);
  sind2=num2str(npts1+ind1);

  t=mdsdata(['data(_tref)[',sind1,':',sind2,':', step, ']']);




  if fans(1)
    channel=['001';'002';'003';'004';'005';'006';'007';'008';'009';'010';...
             '011';'012';'013';'014';'015';'016';'017';'018';'019';'020'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':' , step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S1(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end



  if fans(2)
    channel=['021';'022';'023';'024';'025';'026';'027';'028';'029';'030';...
             '031';'032';'033';'034';'035';'036';'037';'038';'039';'040'];
    for i=1:20

      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step, ']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S2(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(3)

    channel=['041';'042';'043';'044';'045';'046';'047';'048';'049';'050';...
             '051';'052';'053';'054';'055';'056';'057';'058';'059';'060'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step, ']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S3(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end

  if fans(4)
    channel=['061';'062';'063';'064';'065';'066';'067';'068';'069';'070';...
             '071';'072';'073';'074';'075';'076';'077';'078';'079';'080'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step, ']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S4(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(5)
    channel=['081';'082';'083';'084';'085';'086';'087';'088';'089';'090';...
             '091';'092';'093';'094';'095';'096';'097';'098';'099';'100'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':',step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S5(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end

  if fans(6)
    channel=['101';'102';'103';'104';'105';'106';'107';'108';'109';'110';...
             '111';'112';'113';'114';'115';'116';'117';'118';'119';'120'];
    for i=1:20
      %            S(i,:)=mdsdata([trace,channel(i,:),'[',st1,':',st2,':',sdt,':',step,']'])'
      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step, ']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S6(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(7)
    channel=['121';'122';'123';'124';'125';'126';'127';'128';'129';'130';...
             '131';'132';'133';'134';'135';'136';'137';'138';'139';'140'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':',step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S7(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(8)
    channel=['141';'142';'143';'144';'145';'146';'147';'148';'149';'150';...
             '151';'152';'153';'154';'155';'156';'157';'158';'159';'160'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S8(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(9)
    channel=['161';'162';'163';'164';'165';'166';'167';'168';'169';'170';...
             '171';'172';'173';'174';'175';'176';'177';'178';'179';'180'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S9(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end
  if fans(10)
    %        channel=['181';'182';'183';'184';'185';'186';'187';'188';'189';'190';...
    %              '191';'192';'193';'194';'195';'196';'197';'198';'199';'200'];

    % this permutation takes into account some not well defined (not yet)
    % hardware corrections. Are the gains to be permutated ?

    channel=['182';'181';'184';'183';'186';'185';'188';'187';'190';'189';...
             '192';'191';'194';'193';'196';'195';'198';'197';'200';'199'];
    for i=1:20
      %            S(i,:)=mdsdata([trace, channel(i,:),'[',st1,':',st2,':',sdt,']'])';


      S(i,:)=mdsdata(['data(',trace,channel(i,:),')[',sind1,':',sind2,':', step,']'])';
      offset=mdsdata(['data(\atlas::t_rex3_full:signal_inp:p',channel(i,:),')[0:',num2str(npts),']' ]);
      S10(i,:)=S(i,:)-repmat(mean(offset),length(t),1)';
    end
  end

  sig=[S1;S2;S3;S4;S5;S6;S7;S8;S9;S10];


  [satrow,satcol]=find(abs(sig)>satlevel);

  if ~isempty(satcol)
    i_tlimit=min(satcol(:));
    if i_tlimit>1
      sig=sig(:,1:i_tlimit-1);
      t=t(1:i_tlimit-1);
      disp(['get_xtomo_data WARNING: some channels saturated',......
            ', t2 changed to ',sprintf('%6.4f',max(t))]);
    else
      sig=[];
      t=[];
      disp('get_xtomo_data WARNING: saturations, no data returned');
      return
    end
  end


  angfact=angfact(:,find(fans));
  angfact=angfact(:);
  gains=get_xtomo_gains(shot);
  % earlier than shot xxx:
  perm=[1:180,[180+[2,1,4,3,6,5,8,7,10,9,12,11,14,13,16,15,18,17,20,19]]];
  gains=gains(perm);
  iact=find(fans);
  nact=length(iact);
  idetec=[];
  for k=1:nact
    idetec=[idetec,(iact(k)-1)*20+1:iact(k)*20];
  end
  gains=gains(idetec);
  gains=gains(:);
  fac=ones(size(gains))./gains;


  sig=sig.*(repmat(fac,1,length(t)));

  if iflat
    for ii=1:length(t)
      imini=find( sig(:,ii) < minsiglevel*max(sig(:,ii)));
      sig(imini,ii)=zeros(size(imini));
    end
  end

  t=t';
  sig=sig.*(repmat(angfact,1,length(t)));


end

mdsclose


return