;+ ; Contains the load_data_ephem procedure ; ; :Author: ; Baptiste Cecconi ; ; :History: ; 2009/02/20: Created V1.0: 1st version ; ; V1.1: ; changes since V1.0 ; - bug line 68-69: not removing 1st element of veph and qeph. FIXED ; - better control of veph and qeph interpolation: ; 1. interpolation of norm first ; 2. interpolating on normalized vectors ; 3. renormalization after interpolation ; 4. denormalizing vectors using 1. ; ; 2012/03/15: Last Edit ;- ; ;+ ; load_data_ephem is a procedure that <behavior desc here> ; ; :Params: ; yyyydddb: in, required, type=sometype ; A parameter named yyyydddb ; hhb: in, required, type=sometype ; A parameter named hhb ; yyyyddde: in, required, type=sometype ; A parameter named yyyyddde ; hhe: in, required, type=sometype ; A parameter named hhe ; veph_out: in, required, type=sometype ; A parameter named veph_out ; qeph_out: in, required, type=sometype ; A parameter named qeph_out ; valid: in, required, type=sometype ; A parameter named valid ; ; :Keywords: ; veph_name: in, optional, type=sometype ; A keyword named veph_name ; qeph_name: in, optional, type=sometype ; A keyword named qeph_name ; t97_ramp: in, optional, type=sometype ; A keyword named t97_ramp ; verbose: in, optional, type=sometype ; A keyword named verbose ;- PRO load_data_ephem,yyyydddb,hhb,yyyyddde,hhe,veph_out,qeph_out,valid, $ veph_name = veph_name, qeph_name = qeph_name, $ t97_ramp =t97_ramp, $ verbose=verbose ptrDataFileList = make_file_list(yyyydddb, hhb, yyyyddde, hhe, level='ephem', ephem_type=veph_name) if (ptr_valid(ptrDataFileList) eq 0) then begin n_vephDataFile=0 if keyword_set(verbose) then print,"# Warning ! No VEPH data file selected..." endif else begin VephDataFileList=*ptrDataFileList n_vephDataFile = n_elements(vephDataFileList) ptr_free,ptrDataFileList endelse ptrDataFileList = make_file_list(yyyydddb, hhb, yyyyddde, hhe, level='ephem', ephem_type=qeph_name) if (ptr_valid(ptrDataFileList) eq 0) then begin n_qephDataFile=0 if keyword_set(verbose) then print,"# Warning ! No QEPH data file selected..." endif else begin QephDataFileList=*ptrDataFileList n_qephDataFile = n_elements(qephDataFileList) ptr_free,ptrDataFileList endelse veph = {data_veph} qeph = {data_qeph} neph = 0 ii0 = 0l for i=0l,n_vephDataFile-1l do begin print,'-------------------------------------------------------------------' print,'Reading VEPH file: '+VephDataFileList(i) read_data_binary,VephDataFileList(i),vepht,level='veph',validv print,'Reading QEPH file: '+QephDataFileList(i) read_data_binary,QephDataFileList(i),qepht,level='qeph',validq if validv eq 0 or validq eq 0 then begin message,/info,"No ephemeris data. Skipping interval..." nepht = 0 endif else begin print,'merging...' nvepht = n_elements(vepht) nqepht = n_elements(qepht) nepht = nvepht case 1b of nvepht gt nqepht : begin qepht1 = replicate({data_qeph},nvepht) qepht1.time = vepht.time qepht1.q(0) = interpol(qepht.q(0),qepht.time,vepht.time) qepht1.q(1) = interpol(qepht.q(1),qepht.time,vepht.time) qepht1.q(2) = interpol(qepht.q(2),qepht.time,vepht.time) qepht1.q(3) = interpol(qepht.q(3),qepht.time,vepht.time) qepht = temporary(qepht1) end nvepht lt nqepht : begin vepht1 = replicate({data_veph},nqepht) vepht1.time = qepht.time vepht1.r(0) = interpol(vepht.r(0),vepht.time,qepht.time) vepht1.r(1) = interpol(vepht.r(1),vepht.time,qepht.time) vepht1.r(2) = interpol(vepht.r(2),vepht.time,qepht.time) vepht = temporary(vepht1) nepht = nqepht end else : endcase veph = [temporary(veph),temporary(vepht)] qeph = [temporary(qeph),temporary(qepht)] endelse neph += nepht endfor if neph ne 0 then begin veph = veph(1:*) qeph = qeph(1:*) if keyword_set(t97_ramp) then begin nn = n_elements(t97_ramp) rr = sqrt(total(veph.r^2,1)) rr1 = interpol(rr,veph.time,t97_ramp) veph1 = replicate({data_veph},nn) veph1.time = t97_ramp veph1.r(0) = interpol(veph.r(0)/rr,veph.time,t97_ramp) veph1.r(1) = interpol(veph.r(1)/rr,veph.time,t97_ramp) veph1.r(2) = interpol(veph.r(2)/rr,veph.time,t97_ramp) rr1n = sqrt(total(veph1.r^2,1)) veph1.r(0) = veph1.r(0)/rr1n*rr1 veph1.r(1) = veph1.r(1)/rr1n*rr1 veph1.r(2) = veph1.r(2)/rr1n*rr1 veph_out = temporary(veph1) thc = acos(qeph.q(0))*2. thc1 = interpol(thc,qeph.time,t97_ramp) qeph1 = replicate({data_qeph},nn) qeph1.time = t97_ramp qeph1.q(0) = cos(thc1/2.) qeph1.q(1) = interpol(qeph.q(1)/sin(thc/2.),qeph.time,t97_ramp) qeph1.q(2) = interpol(qeph.q(2)/sin(thc/2.),qeph.time,t97_ramp) qeph1.q(3) = interpol(qeph.q(3)/sin(thc/2.),qeph.time,t97_ramp) qq1n = sqrt(total(qeph1.q(1:3)^2,1)) qeph1.q(1) = qeph1.q(1)/qq1n*sin(thc1/2.) qeph1.q(2) = qeph1.q(2)/qq1n*sin(thc1/2.) qeph1.q(3) = qeph1.q(3)/qq1n*sin(thc1/2.) qeph_out = temporary(qeph1) endif else begin veph_out = temporary(veph[1:*]) qeph_out = temporary(qeph[1:*]) endelse valid = 1 endif else begin valid = 0 endelse return end