PRO make_ephem_file, AAAAJJJ=AAAAJJJ, PERIOD=PERIOD, SOURCE=SOURCE, $
NODELETE=NODELETE, RELOAD=RELOAD, $
DT=DT, QUIET=QUIET, NODB=NODB
path_root_rpws = getenv('ROOT_RPWS')
path_data_rpws = getenv('NAS_RPWS')
quaternion
files_to_delete = ['']
if not keyword_set(quiet) then quiet=0b else quiet=1b
if not keyword_set(aaaajjj) then begin
print,'Please provide day of year [YYYYDDD] :'
str_aaaajjj= ''
read,str_aaaajjj
aaaajjj = long(str_aaaajjj)
endif
str_aaaajjj = string(format='(I7)',long(aaaajjj))
yy = long(aaaajjj)/1000l
dd = long(aaaajjj) mod 1000l
print,format='(A,I4,A,I3.3)','Year: ',yy,' - Day: ',dd
ptr_dir = make_dir_tab(yy,dd,yy,dd)
if ptr_valid(ptr_dir) then begin
path_data_ephem = path_data_rpws + (*ptr_dir)(0) + '/'
ptr_free,ptr_dir
print,'Writing output files in ' + path_data_ephem
endif else begin
print,'The selected time does not correspond to Cassini/RPWS data...'
print,'Aborting...'
return
endelse
read_data_src_list,src_list
n_src = n_elements(src_list)
if not keyword_set(SOURCE) then begin
print,"Please enter the selected source : "
stype=0b
print," Avaliable Sources :"
for i=0,n_src-1 do print,format='(" -",I2,": ",a)', $
i+1,src_list(i).full_name
read,stype
stype= stype -1
endif else begin
stype = where(src_list.df_name eq strlowcase(source)) & stype=stype(0)
if stype eq -1 then begin
print,format='(A,10(A,:,"/"))',"The source code must be one of "+ $
"the following : ",src_list.df_name
print,'Read src_list.txt file or documentation for additionnal help'
print,"ABORTING..."
return
endif
endelse
if not keyword_set(DT) then dt = 60 else dt = fix(dt)
print
print,'+-------------------------------------------------------------------+'
print,'| Qeph Computations |'
print,'+-------------------------------------------------------------------+'
p_flist = make_file_list(aaaajjj,0,aaaajjj,24,level='ephem', ephem_type=src_list(stype).qeph)
if (ptr_valid(p_flist) ne 0) and not keyword_set(reload) then begin
print,*p_flist+" : file already exists."
rep='' & if not quiet then read,"Do you want to recompute it ? (y)/[n] ",rep
if rep ne 'y' then begin
print,format='(a,I7,a)',"Skipping ",aaaajjj,"."+src_list(stype).qeph+ $
" computation..."
load_qeph = 0b
endif else load_qeph = 1b
endif else load_qeph = 1b
ptr_free,p_flist
if load_qeph then begin
print,format='(a,I7,a)','Buiding ',aaaajjj,'.'+src_list(stype).qeph+ $
' file.'
uxse = src_list(stype).uxse
print,"Downloading attitude data from RPWS servers..."
yybtmp = yy
ddbtmp = dd
yyetmp = yy
ddetmp = ddbtmp+1
if ddetmp eq 366 + ((yy mod 4) eq 0) then begin
ddetmp = 1
yyetmp = yyetmp+1
endif
file_att = strcompress(path_root_rpws+'ephatt/'+ $
string(format='(i7)',aaaajjj)+'-'+uxse+'.att',/remove_all)
test = file_search(file_att, count=fcnt)
if fcnt eq 1 and not keyword_set(reload) then print,file_att+ $
": file exists, skipping..." else begin
dl_tmp = string(format='("curl -d ''entry1=",I4,"//",I3.3,'+ $
'" 00:00:00&entry2=",I4,"//",I3.3," 00:00:00&entry3=",I4.4,'+ $
'"&entry4=",A,"'' -o ''",A,"'''+ $
' http://www-pw.physics.uiowa.edu/cgi-tfa/nph-getatt")',yybtmp, $
ddbtmp,yyetmp,ddetmp,dt,uxse,file_att)
print, dl_tmp
spawn, dl_tmp
files_to_delete = [files_to_delete, file_att]
endelse
openu,lun,file_att,/get_lun
s = fstat(lun)
if s.size eq 37b then qeph_data_exist = 0b else qeph_data_exist = 1b
close,lun
free_lun,lun
qeph_file = path_data_rpws+period+'/ephem/'+str_aaaajjj+'.'+ $
src_list(stype).qeph
if qeph_data_exist then begin
make_qeph_data,file_att,qeph
print,'Writing '+qeph_file
write_data_binary,qeph_file,qeph
endif else begin
print,'No attitude data for this day.'
print,'Writing '+qeph_file+' with /null'
write_data_binary,qeph_file,/null
endelse
endif
print
print,'+-------------------------------------------------------------------+'
print,'| Veph Computations |'
print,'+-------------------------------------------------------------------+'
p_flist = make_file_list(aaaajjj,0,aaaajjj,24,level='ephem', $
ephem_type=src_list(stype).qeph)
print,'Reading '+*p_flist+' data'
read_data_binary,*p_flist,qeph,qeph_data_exist,level='qeph'
if qeph_data_exist then begin
p_flist = make_file_list(aaaajjj,0,aaaajjj,24,level='ephem', $
ephem_type=src_list(stype).veph)
if (ptr_valid(p_flist) ne 0) and not keyword_set(reload) then begin
print,*p_flist+" : file already exists."
rep='' & if not quiet then read,"Do you want to recompute it ? (y)/[n] ",rep
if rep ne 'y' then begin
print,format='(a,I7,a)',"Skipping ",aaaajjj,"."+src_list(stype).veph+ $
" computation..."
load_veph = 0b
endif else load_veph = 1b
endif else load_veph = 1b
ptr_free, p_flist
if src_list(stype).need ne '--' then begin
p_flist = make_file_list(aaaajjj,0,aaaajjj,24,level='ephem', $
ephem_type=src_list(where(src_list.df_name eq src_list(stype).need)).veph)
if (ptr_valid(p_flist) ne 0) and not keyword_set(reload) then begin
print,*p_flist+" : file already exists."
rep='' & if not quiet then read,"Do you want to recompute it ? (y)/[n] ",rep
if rep ne 'y' then begin
print,format='(a,I7,a)',"Skipping ",aaaajjj,"."+ $
src_list(stype).need+" computation..."
load_need = 0b
endif else load_need = 1b
endif else load_need = 1b
endif else load_need = 0b
ptr_free, p_flist
if load_need then begin
src_need = src_list(stype).need
stype_need = where(src_list.df_name eq src_need)
orig = src_list(stype_need).orig
coor = src_list(stype_need).coor
origName = src_list(stype_need).body_rad_name
origRad = src_list(stype_need).body_rad_value
message,string(format='(a,I7,a)','Info : ',aaaajjj,'.'+src_list(stype_need).veph+' file needed !'),/info
message,string(format='(a,I7,a)','Buiding ',aaaajjj,'.'+src_list(stype_need).veph+' file.'),/info
print,"Downloading attitude data from RPWS servers..."
yybtmp = yy
ddbtmp = dd
yyetmp = yy
ddetmp = ddbtmp+1
if ddetmp eq 366 + ((yy mod 4) eq 0) then begin
ddetmp = 1
yyetmp = yyetmp+1
endif
file_eph = strcompress(path_root_rpws+'ephatt/'+string(format='(i7)',aaaajjj)+'-'+orig+'-'+coor+'.eph',/remove_all)
test = file_search(file_eph, count=fcnt)
if fcnt eq 1 and not keyword_set(reload) then print,file_eph+ $
": file exists, skipping..." else begin
dl_tmp = string(format='("curl -d ''StTime=",I4,"//",I3.3,'+ $
'" 00:00:00&SpTime=",I4,"//",I3.3," 00:00:00&TimeInterval=",I4.4,'+ $
'"&origin=",A,"&observer=cass&coordinates=",A,"&OriginName=",A,'+ $
'"&OriginRadius=",A,"'' -o ''",A,"'' '+ $
'http://www-pw.physics.uiowa.edu/das/casephem")',yybtmp,ddbtmp, $
yyetmp,ddetmp,dt,orig,coor,origName,origRad,file_eph)
print, dl_tmp
spawn, dl_tmp
files_to_delete = [files_to_delete, file_eph]
endelse
make_veph_data,file_eph,veph,/km
vephtmp = veph
nn = n_elements(qeph)
veph = replicate({data_veph},nn)
veph.time = qeph.time
veph.r(0) = interpol(vephtmp.r(0),vephtmp.time,qeph.time)
veph.r(1) = interpol(vephtmp.r(1),vephtmp.time,qeph.time)
veph.r(2) = interpol(vephtmp.r(2),vephtmp.time,qeph.time)
veph.r = veph.r + $
rebin(reform(src_list(stype).src_position*src_list(stype).body_rad_value,3,1),3,nn)
qv = q_vmake(veph.r)
qv1 = q_rot(q_conj(qeph.q),qv)
veph.r = qv1(1:3,*)
veph_file = path_data_rpws+period+'/ephem/'+str_aaaajjj+'.'+ $
src_list(stype_need).veph
print,'Writing '+veph_file
write_data_binary,veph_file,veph
endif
if load_veph then begin
src_veph = src_list(stype).veph
print,format='(a,I7,a)','Buiding ',aaaajjj,'.'+src_veph+' file.'
orig = src_list(stype).orig
coor = src_list(stype).coor
origName = src_list(stype).body_rad_name
origRad = src_list(stype).body_rad_value
print,"Downloading attitude data from RPWS servers..."
yybtmp = yy
ddbtmp = dd
yyetmp = yy
ddetmp = ddbtmp+1
if ddetmp eq 366 + ((yy mod 4) eq 0) then begin
ddetmp = 1
yyetmp = yyetmp+1
endif
file_eph = strcompress(path_root_rpws+'ephatt/'+string(format='(i7)',aaaajjj)+'-'+orig+'-'+coor+'.eph',/remove_all)
test = file_search(file_eph, count=fcnt)
if fcnt eq 1 and not keyword_set(reload) then print,file_eph+ $
": file exists, skipping..." else begin
if src_list(stype).need eq '--' then begin
obse = 'cass'
endif else begin
obse = orig
stype2 = where(src_list.df_name eq src_list(stype).need)
orig = src_list(stype2).orig
origRad = src_list(stype2).body_rad_value
origName = src_list(stype2).body_rad_name
endelse
dl_tmp = string(format='("curl -d ''StTime=",I4,"//",I3.3,'+ $
'" 00:00:00&SpTime=",I4,"//",I3.3," 00:00:00&TimeInterval=",I4.4,'+ $
'"&origin=",A,"&observer=",A,"&coordinates=",A,"&OriginName=",A,'+ $
'"&OriginRadius=",A,"'' -o ''",A,"'' '+ $
'http://www-pw.physics.uiowa.edu/das/casephem")',yybtmp,ddbtmp, $
yyetmp,ddetmp,dt,orig,obse,coor,origName,origRad,file_eph)
print, dl_tmp
spawn, dl_tmp
files_to_delete = [files_to_delete, file_eph]
endelse
print,'Reading '+file_eph+' data'
make_veph_data,file_eph,veph,/km
if src_list(stype).need ne '--' then begin
p_flist = make_file_list(aaaajjj,0,aaaajjj,24,level='ephem', $
ephem_type=src_list(where(src_list.df_name eq src_list(stype).need)).veph)
print,'Reading '+*p_flist+' data'
read_data_binary,*p_flist,veph_need,level='veph'
endif
vephtmp = veph
nn = n_elements(qeph)
veph = replicate({data_veph},nn)
veph.time = qeph.time
veph.r(0) = interpol(vephtmp.r(0),vephtmp.time,qeph.time)
veph.r(1) = interpol(vephtmp.r(1),vephtmp.time,qeph.time)
veph.r(2) = interpol(vephtmp.r(2),vephtmp.time,qeph.time)
veph.r = veph.r + $
rebin(reform(src_list(stype).src_position*src_list(stype).body_rad_value,3,1),3,nn)
qv = q_vmake(veph.r)
qv1 = q_rot(q_conj(qeph.q),qv)
veph.r = qv1(1:3,*)
if src_list(stype).need ne '--'then veph.r = veph_need.r - veph.r
veph_file = path_data_rpws+period+'/ephem/'+str_aaaajjj+'.'+ $
src_list(stype).veph
print,'Writing '+veph_file
write_data_binary,veph_file,veph
endif
endif else begin
veph_file = path_data_rpws+period+'/ephem/'+str_aaaajjj+'.'+ $
src_list(stype).veph
print,'No qeph data, skipping all veph computations...'
print,'Writing '+veph_file+' with /null'
write_data_binary,veph_file,/null
endelse
if ~ keyword_set(nodelete) then begin
nftmp = n_elements(files_to_delete)-1
if nftmp gt 0 then begin
for i=1,nftmp do begin
print,'deleting '+files_to_delete(i)
spawn,'/bin/rm -f '''+files_to_delete(i)+''''
endfor
endif
endif else print,'/nodelete keyword set : no ephatt files erased. '
spawn, [getenv('ROOT_RPWS') + '/pro/kronosdb/upsert.sh', '-l', 'ephem', string(format='(I7)', aaaajjj), string(format='(I7)', aaaajjj)], /NOSHELL
if ~keyword_set(nodb) 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', output_file]
spawn, /NOSHELL, upsert_args
end
end