;+ ; Contains the make_n3g_sed_files procedure ; ; :Author: ; Baptiste Cecconi ; ; :History: ; 2006/07/16: Created ; ; 2012/06/20: Last Edit ;- ; ;+ ; fabrication et sauvegarde des fichiers N3g (étalonnées en flux absolus) ; a partir des fichiers N2 (et eventuellement N3g) et d'un fichier de background ; du (jour,heure) (aaaajjjd,hd) a (aaaajjjf,hf) ; donnees "analyse" seulement ; ; :Uses: ; hfr_data_timing, read_data_n3g ; ; :Params: ; aaaajjjd: in, required, type=string ; date de debut ; hd: in, required, type=int ; heure de debut ; aaaajjjf: in, required, type=string ; date de fin ; hf: in, required, type=int ; heure de fin ; bg_file: in, required, type=string ; background file ; fmin: in, required, type=float ; recherche SED (kHz) ; dBmin: in, required, type=float ; recherche SED (db) ; ; :Keywords: ; fichier: in, optional, type=sometype ; A keyword named fichier ; load_n3g: in, optional, type=sometype ; A keyword named load_n3g ; accurate: in, optional, type=sometype ; SED timing ;- pro MAKE_N3G_SED_FILES, aaaajjjd, hd, aaaajjjf, hf, bg_file, fmin, dBmin, $ fichier=fichier,load_n3g=load_n3g,accurate=accurate ; 0=Z, 1=+X, 2=-X, 3=D fact = 10.^(dBmin/10.) ; -------------------------------------------------------------------- ; loading bg file ; -------------------------------------------------------------------- READ_DATA_BINARY,bg_file,bg,level='bg1600' xf=bg.xf & nf=n_elements(xf) fon5=bg.fon5 ; (4,nf) ; -------------------------------------------------------------------- ; loading receiver bg files ; -------------------------------------------------------------------- restore,getenv('ROOT_RPWS')+'/pro/receiver_backgroundj.idl' ; fr,xrd,xrm rec_bg=fon5 for i=0,2 do rec_bg(i,*)=10.^(interpol(xrm,fr,xf)/10.) rec_bg(3,*)=10.^(interpol(xrd,fr,xf)/10.) fon=(fon5-rec_bg)>1.e-18 ; -------------------------------------------------------------------- ; loading gal background ; -------------------------------------------------------------------- restore,getenv('ROOT_RPWS')+'/pro/gal_mod.idl' ; fgalmod,sgalmod sgmod=interpol(sgalmod,fgalmod,xf)>0. ; -------------------------------------------------------------------- ; Zo L^2 (Ca/Ca+Cb)^2 ; -------------------------------------------------------------------- K=[1070.,1070.,1070.,3520.] ; -------------------------------------------------------------------- print,'% Loading List of Files for the selected period ...' ; -------------------------------------------------------------------- if not(keyword_set(fichier)) then begin ptrDataFileList = make_file_list(aaaajjjd, hd, aaaajjjf, hf, level='n2') if (ptr_valid(ptrDataFileList) eq 0) then begin nDataFile=0 print,"# Warning ! No N2 data file selected..." endif else begin dataFileList=*ptrDataFileList nDataFile = n_elements(dataFileList) ptr_free, ptrDataFileList endelse endif else begin dataFileList=[fichier] nDataFile=1 endelse for iDataFile = 0,nDataFile-1 do begin fichier = dataFileList(iDataFile) str_tmp = strsplit(fichier,'n2/P',/extract,/regex) print & print,'% fichier : ',fichier READ_DATA_BINARY,fichier,data_n2,level='n2' nn = n_elements(data_n2) fileOut= str_tmp(0)+'n3g/F'+str_tmp(1) ; -------------------------------------------------------------------- ; n3g ; -------------------------------------------------------------------- if not(keyword_set(load_n3g)) then begin fi=intarr(nn) for i=0L,nn-1 do fi(i)=where(xf eq data_n2(i).f) >0 data_n3g = replicate({data_n3g},nn) w=where(data_n2.f le 1000) if w(0) ne -1 then data_n3g(w).fluxZ=((data_n2(w).autoZ-rec_bg(0,fi(w)))>0)/K(0) for j=1,3 do begin w=where(data_n2.f le 1000 and (data_n2.ant mod 10) eq j) if w(0) ne -1 then data_n3g(w).fluxX=((data_n2(w).autox-rec_bg(j,fi(w)))>0)/K(j) endfor w=where(data_n2.f gt 1000 and data_n2.f lt 2000) if w(0) ne -1 then data_n3g(w).fluxZ=( ((data_n2(w).autoZ-rec_bg(0,fi(w)))>0)/K(0) + sgmod(fi(w))*((data_n2(w).autoZ-rec_bg(0,fi(w)))>0)/fon(0,fi(w)) )/2. for j=1,3 do begin w=where(data_n2.f gt 1000 and data_n2.f lt 2000 and (data_n2.ant mod 10) eq j) if w(0) ne -1 then data_n3g(w).fluxX=( ((data_n2(w).autox-rec_bg(j,fi(w)))>0)/K(j) + sgmod(fi(w))*((data_n2(w).autoX-rec_bg(j,fi(w)))>0)/fon(j,fi(w)) )/2. endfor w=where(data_n2.f ge 2000) if w(0) ne -1 then data_n3g(w).fluxZ=sgmod(fi(w))*((data_n2(w).autoZ-rec_bg(0,fi(w)))>0)/fon(0,fi(w)) for j=1,3 do begin w=where(data_n2.f ge 2000 and (data_n2.ant mod 10) eq j) if w(0) ne -1 then data_n3g(w).fluxX=sgmod(fi(w))*((data_n2(w).autoX-rec_bg(j,fi(w)))>0)/fon(j,fi(w)) endfor data_n3g.ydh=data_n2.ydh data_n3g.num=data_n2.num print,'writing ',fileOut,' ...' WRITE_DATA_BINARY, fileOut, data_n3g endif else READ_DATA_N3G,fileOut,data_n3g ; -------------------------------------------------------------------- ; SED ; -------------------------------------------------------------------- if keyword_set(accurate) then begin accur_t97=hfr_data_timing(strmid(str_tmp(1),0,7),strmid(str_tmp(1),8,2)) data_n2.t97=accur_t97 endif w=where(data_n2.f ge fmin) data_n2=data_n2(w) data_n3g=data_n3g(w) w=where(xf ge fmin) nw=n_elements(w) for m=0,nw-1 do begin for j=1,3 do begin ww=where(data_n2.f eq xf(w(m)) and (data_n2.ant mod 10) eq j and data_n2.autoX gt 0) if n_elements(ww) ge 3 then begin nww=n_elements(ww) data1=data_n2(ww) test=[data1(0).autoX,(data1(0:nww-3).autoX+data1(2:nww-1).autoX)/2.,data1(nww-1).autoX] ; wtest=where(data1.autoX ge fact*test) wtest=where(data1(1:nww-2).autoX ge fact*data1(0:nww-3).autoX and data1(1:nww-2).autoX ge fact*data1(2:nww-1).autoX)+1 if wtest(0) ne -1 then begin data_n3g(ww(wtest)).num=-1 data_n3g(ww(wtest)).fluxZ=10.*alog10(data1(wtest).autoX/test(wtest)) endif endif endfor endfor w=where(data_n3g.num eq -1) if w(0) ne -1 then begin nw=n_elements(w) data_sed = replicate({data_sed},nw) data_sed.ydh = data_n2(w).ydh data_sed.num = data_n2(w).num data_sed.t97 = data_n2(w).t97 data_sed.f = data_n2(w).f data_sed.dt = data_n2(w).dt data_sed.fluxX = data_n3g(w).fluxX data_sed.dB = data_n3g(w).fluxZ data_sed.ant = data_n2(w).ant fileOut= str_tmp(0)+'temp/SED'+str_tmp(1) WRITE_DATA_BINARY, fileOut, data_sed endif endfor return end