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