;+ ; Contains the make_n3e_files procedure ; ; :Author: ; Baptiste Cecconi ; ; :History: ; 2006/03/10: using new BG files + N1.FI info ; ; 2008/01/18: added full_solution keyword ; ; 2009/06/05: Last Edit ;- ; ;+ ; make_n3e_files is a procedure that <behavior desc here> ; ; :Uses: ; dfe_main_full, dfe_main ; ; :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 ; ; :Keywords: ; verbose: in, optional, type=sometype ; A keyword named verbose ; bg_file: in, optional, type=sometype ; A keyword named bg_file ; ephem_file: in, optional, type=sometype ; A keyword named ephem_file ; src_df_name: in, optional, type=sometype ; A keyword named src_df_name ; antenna_file: in, optional, type=sometype ; A keyword named antenna_file ; output_path: in, optional, type=sometype ; A keyword named output_path ; full_solution: in, optional, type=sometype ; A keyword named full_solution ;- pro MAKE_N3E_FILES, aaaajjjd,hd,aaaajjjf,hf, verbose=verbose, $ bg_file=bg_file, $ ephem_file=ephem_file, src_df_name=src_df_name, $ antenna_file=antenna_file, $ output_path=output_path,full_solution=full_solution, $ nodb=nodb ; -------------------------------------------------------------------- ; loading quaternion routines set ; -------------------------------------------------------------------- quaternion ; -------------------------------------------------------------------- ; testing for keywords ; -------------------------------------------------------------------- if not keyword_set(bg_file) then $ stop,'% Warning : no bg file specified' if not keyword_set(ephem_file) then $ stop,'% Warning : no ephem file(s) specified' if not keyword_set(src_df_name) then $ stop,'% Warning : no source df_name specified' if not keyword_set(antenna_file) then $ stop,'% Warning : no ephem file(s) specified' ; -------------------------------------------------------------------- ; loading bg file if needed ; -------------------------------------------------------------------- ; test variable to check if bg has to reloaded (if bg_loaded eq 0) ; -------------------------------------------------------------------- bg_loaded = 0b if bg_file ne 'auto' then begin bg_datafile = bg_file message,' Loading bg file : '+bg_datafile,/info read_data_binary,bg_datafile,data_bg,level='bg' bg_loaded = 1b endif ; -------------------------------------------------------------------- ; reading ephemeris files ; -------------------------------------------------------------------- read_data_src_list,src_list strtmp = strmid(ephem_file(0),3,/rev) str_src = src_df_name nfile = n_elements(ephem_file) vephem = {data_veph} for ifile=0,nfile-1 do begin read_data_binary,ephem_file(ifile),vephem_tmp,level='veph' vephem=[vephem,vephem_tmp] endfor vephem=vephem[1:*] ; ephemeris validity check (no ephem data drop larger than dtmax min.) ; -------------------------------------------------------------------- dtmax = 5. ; minutes neph = n_elements(vephem) dteph = (vephem(1:neph-1).time - vephem(0:neph-2).time)*24.*60. wephc = where(ceil(dteph) ge 5,count) if count eq 0 then begin ;IF no data drops teph1 = [0l] ; In index of contiguous periods teph2 = [neph-1l] ; Out index of contig periods endif else begin ;IF data drops teph1 = [0l,wephc+1l] ; In index of contiguous periods teph2 = [wephc,neph-1] ; Out index of contig periods endelse nephc = n_elements(teph1) ; # of contiguous periods ; -------------------------------------------------------------------- ; reading antenna set parameters ; -------------------------------------------------------------------- case antenna_file of 'calJGR2004' : str_ant = 'j' 'calDec04' : str_ant = 'd' 'rheometry' : str_ant = 'r' else : str_ant = 'x' endcase ; -------------------------------------------------------------------- ; loading list of files ; -------------------------------------------------------------------- message,'Loading N1 data file List',/info ptrDataFileList = make_file_list(aaaajjjd, hd, aaaajjjf, hf, level='n1') if (ptr_valid(ptrDataFileList) eq 0) then begin nFileList_N1=0 if keyword_set(verbose) then message,"Warning ! No N1 data file selected...",/info endif else begin fileList_N1=*ptrDataFileList nFileList_N1 = n_elements(FileList_N1) n3efiles = strarr(nFileList_N1) ptr_free, ptrDataFileList endelse message,strcompress("found "+string(nFileList_N1)+" N1 data files."),/info message,'Loading N2 data file List',/info ptrDataFileList = make_file_list(aaaajjjd, hd, aaaajjjf, hf, level='n2') if (ptr_valid(ptrDataFileList) eq 0) then begin nFileList_N2=0 if keyword_set(verbose) then message,"Warning ! No N2 data file selected...",/info endif else begin fileList_N2=*ptrDataFileList nFileList_N2 = n_elements(FileList_N2) ptr_free, ptrDataFileList endelse message,strcompress("found "+string(nFileList_N2)+" N2 data files."),/info if nFileList_N1 ne nFileList_N2 then begin if nFileList_N1 gt nFileList_N2 then message,"MISSING N2 DATA FILES ! ABORTING !" $ else message,"MISSING N1 DATA FILES ! ABORTING !" return endif period_path_old = '' for iDataFile = 0,nFileList_N1-1 do begin message,'-----------------------------------------------------------------------------',/info message,'Reading N1 file : '+FileList_N1(iDataFile),/info read_data_binary,FileList_N1(iDataFile),data_n1,level='n1' message,'Reading N2 file : '+FileList_N2(iDataFile),/info read_data_binary,FileList_N2(iDataFile),data_n2,level='n2' period_path = strmid(FileList_N1(iDataFile),0,strpos(FileList_N1(iDataFile),'/n1/')+1) period_name = strsplit(period_path,'/',/extract) period_name = period_name(n_elements(period_name)-1) ; -------------------------------------------------------------------- ; restoring Background levels if needed ; -------------------------------------------------------------------- if bg_file eq 'auto' and period_path ne period_path_old then bg_loaded = 0b period_path_old = period_path if bg_loaded eq 0b and bg_file eq 'auto' then begin bg_datafile = period_path+'bg/bg_'+period_name message,'% Loading bg file : '+bg_datafile,/info read_data_binary, bg_datafile,data_bg,level='bg' bg_loaded = 1b endif ; -------------------------------------------------------------------- ; data preparation ; -------------------------------------------------------------------- ; checking if autoZ is not zero wAzz = where(data_n2.autoZ gt 0., cntAzz) if cntAzz ne 0 then begin data_n1 = data_n1(wAzz) data_n2 = data_n2(wAzz) endif nn = n_elements(data_n2) sn=fltarr(2,nn)-1. ; Output data filename ; -------------------- if keyword_set(full_solution) then begin dataFileOut = 'n3e/N3e-full_'+str_ant+str_src+$ strmid(FileList_N1(iDataFile),strlen(period_path)+4,10) endif else begin dataFileOut = 'n3e/N3e_'+str_ant+str_src+$ strmid(FileList_N1(iDataFile),strlen(period_path)+4,10) endelse if keyword_set(output_path) then begin if strmid(output_path,0,/reverse) ne '/' then output_path=output_path+'/' dataFileOut = output_path+strmid(dataFileOut,4) endif else begin dataFileOut = period_path+dataFileOut endelse ; frequency list: ; --------------- fi = uniq_list(data_n1.fi,rev=rfi) nfi = n_elements(fi) ; background interpolation on xf ; ------------------------------ for ifi=0L,nfi-1L do begin data_bg_i = data_bg(where(data_bg.fi eq fi(ifi))) wfi = rfi(rfi(ifi):rfi(ifi+1)-1) data_n2_i = data_n2(wfi) wwi = where( (data_n2_i.autoX ne 0.) and (data_n2_i.autoZ ne 0.) and $ (data_n2_i.crossR ne -999.) and (data_n2_i.crossI ne -999.) and $ (data_n2_i.ant le 12), cnt_i) if cnt_i ne 0 then begin k = data_n2_i.ant mod 10 ; -------------------------------------------------------------------- ; background substraction and SNR computation for Auto ; -------------------------------------------------------------------- if data_bg_i.fon5(1) eq 0 and (where(k eq 1))(0) ne -1 then stop if data_bg_i.fon5(2) eq 0 and (where(k eq 2))(0) ne -1 then stop if data_bg_i.fon5(3) eq 0 and (where(k eq 3))(0) ne -1 then stop data_n2_i(wwi).autoX = (data_n2_i(wwi).autoX - data_bg_i.fon5(k)) > 0. sn(0,wfi(wwi)) = data_n2_i(wwi).autoX/( data_bg_i.fon5(k)/ $ sqrt(data_n2_i(wwi).df*data_n2_i(wwi).dt) ) if data_bg_i.fon5(0) eq 0 then stop data_n2_i(wwi).autoZ = (data_n2_i(wwi).autoZ - data_bg_i.fon5(0)) > 0. sn(1,wfi(wwi)) = data_n2_i(wwi).autoZ/( data_bg_i.fon5(0)/ $ sqrt(data_n2_i(wwi).df*data_n2_i(wwi).dt) ) normauto = float(sqrt(double(data_n2_i(wwi).autoX)*double(data_n2_i(wwi).autoZ))) ; -------------------------------------------------------------------- ; denormalizing cross ; -------------------------------------------------------------------- data_n2_i(wwi).crossR = data_n2_i(wwi).crossR * normauto data_n2_i(wwi).crossI = data_n2_i(wwi).crossI * normauto data_n2(wfi(wwi)) = data_n2_i(wwi) endif endfor if keyword_set(verbose) then print,'% ',nn,' initial data points.' ; -------------------------------------------------------------------- ; ephemeris test and initialization ; -------------------------------------------------------------------- ephemValid = bytarr(nn) ; restricting ephemeris test to data period ; ----------------------------------------- ww = where(vephem[teph1].time lt data_n2(0).t97) if ww(0) ne -1 then iteph_in = max(ww) else iteph_in = 0 ww = where(vephem[teph2].time gt data_n2(nn-1).t97) if ww(0) ne -1 then iteph_out = min(ww) else iteph_out = nephc-1 teph1Select = teph1[iteph_in:iteph_out] teph2Select = teph2[iteph_in:iteph_out] for i=0,n_elements(teph1Select)-1 do begin ww = where(data_n2.t97 gt vephem(teph1Select(i)).time and $ data_n2.t97 lt vephem(teph2Select(i)).time) if ww(0) ne -1 then ephemValid(ww) = 1 endfor if keyword_set(verbose) then $ message,'ephemeris test : '+string(long(nn-total(ephemValid)))+ $ ' data points excluded.',/info if keyword_set(test) then if nn-total(ephemValid) ne 0 then stop if total(ephemValid) ne 0 then begin if keyword_set(verbose) then if nn-total(ephemValid) ne 0 then $ message,string(long(total(ephemValid)))+' remaining data points.',/info ; data selection with valid ephemeris periods ; -------------------------------------------------------------------- data_n2 = data_n2(where(ephemValid)) sn = sn(*,where(ephemValid)) nn = n_elements(data_n2) if keyword_set(full_solution) then begin df_result = replicate({data_n3e_full},nn) endif else begin df_result = replicate({data_n3e},nn) endelse ; ephemeris interpolation : ; -------------------------------------------------------------------- ephemSelect = replicate({data_ephem},nn) ephemSelect.time = interpol(vephem.time,vephem.time,data_n2.t97) ephemSelect.x = interpol(vephem.r(0),vephem.time,data_n2.t97) ephemSelect.y = interpol(vephem.r(1),vephem.time,data_n2.t97) ephemSelect.z = interpol(vephem.r(2),vephem.time,data_n2.t97) rr = sqrt(ephemSelect.x^2.+ephemSelect.y^2.+ephemSelect.z^2.) ephemSelect.th = acos(ephemSelect.z/rr) ephemSelect.ph = atan(ephemSelect.y,ephemSelect.x) ; -------------------------------------------------------------------- ; calling DFe subroutine ; -------------------------------------------------------------------- if keyword_set(full_solution) then begin dfe_main_full,df_result,data_n2,ephemSelect,antenna_file,sn,/verbose endif else begin dfe_main,df_result,data_n2,ephemSelect,antenna_file,sn,/verbose endelse ; -------------------------------------------------------------------- ; writing data_n3e ; -------------------------------------------------------------------- message,"Writing output data_n3e into : "+dataFileOut,/info write_data_binary,dataFileOut, df_result endif else begin message,'WARNING : Skipping files : No ephemeris data available for this period !',/info message,"Writing null output data_n3e into : "+dataFileOut,/info write_data_binary,dataFileOut,/null endelse n3efiles[iDataFile] = dataFileOut endfor ; Update the Kronos Database with the new files if ~keyword_set(nodb) and nFileList_N1 ne 0 then begin upsert_args = getenv('ROOT_RPWS') + '/pro/kronosdb/upsert.sh' if keyword_set(verbose) then upsert_args = [upsert_args, '-v'] upsert_args = [upsert_args, '-f', n3efiles] spawn, /NOSHELL, upsert_args end end