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
quaternion
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'
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
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:*]
dtmax = 5.
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
teph1 = [0l]
teph2 = [neph-1l]
endif else begin
teph1 = [0l,wephc+1l]
teph2 = [wephc,neph-1]
endelse
nephc = n_elements(teph1)
case antenna_file of
'calJGR2004' : str_ant = 'j'
'calDec04' : str_ant = 'd'
'rheometry' : str_ant = 'r'
else : str_ant = 'x'
endcase
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)
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
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.
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
fi = uniq_list(data_n1.fi,rev=rfi)
nfi = n_elements(fi)
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
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)))
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.'
ephemValid = bytarr(nn)
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_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
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)
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
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
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