;docformat = 'rst' ;+ ;Merge EVE Level 2 Lines files into one long EVE record, optionally averaging ;consecutive measurements ; ;Notes - requires $EVE_DATA/version.dat, which contains the latest version number among other things. This is ;available at the EVE website at http://lasp.colorado.edu/eve/data_access/evewebdata/quicklook/L0CS/version.dat ;and is automatically downloaded if you use eve_get_data. This way, this routine uses whatever ;is the latest version of the data that you have already obtained, which may not necessarily ;be the latest version on the EVE website. ; ;:Params: ; start_yyyydoy: in, required ; Start day to use in building the merge. Date is specified as a 7-digit ; year/day of year value, for instance 2012/254 Sep 10 is 2012254 ; stop_yyyydoy: in, required ; End day to use in building the merge. Files up to and including 23:59:59 ; on the day in question are used. If start and stop dates are the same, ; all files on that day will be included. ;:Keywords: ; n_average: in, optional ; If set, each consecutive bundle of n_average measurments are averaged ; together. For instance, if n_average is passed in as 6, each consecutive ; group of 6 10-second measurements is averaged together, resulting ; in output which is a minute average. ; meta: out, optional ; Metadata from last file that was successfully read ; verbose: in, optional ; Set this switch to make this print more results to stdout. This is ; just passed as-is to functions used internally, as this function produces ; no log output itself ; files: out, optional ; Array of strings, each one being the name of one file which this routine read and merged ;:Categories: ; user ;- function eve_merge_evl,start_yyyydoy,stop_yyyydoy,n_average=n_average,meta=meta,verbose=verbose,files=files if ~keyword_set(n_average) then n_average=1 n_average=long(n_average) n_days=eve_yd_to_jd(stop_yyyydoy)-eve_yd_to_jd(start_yyyydoy)+1 version_dat=eve_read_dat(getenv('EVE_DATA')+'/version.dat',/quiet) version=version_dat.version for jd=eve_yd_to_jd(start_yyyydoy),eve_yd_to_jd(stop_yyyydoy) do begin this_yd=eve_jd_to_yd(jd) this_yyyy=this_yd/1000 this_doy=this_yd mod 1000 for hour=0,23 do begin infn=file_search(string(format='(%"%s/level2/%04d/%03d/EVL_L2_%07d_%02d_%03d*.fit.gz")',getenv("EVE_DATA"),this_yyyy,this_doy,this_yd,hour,version),count=count) if count gt 0 then begin l2l=eve_read_whole_fits(infn,verbose=verbose) meta={linesmeta: l2l.linesmeta, $ linesmeta_header:l2l.linesmeta_header, $ bandsmeta: l2l.bandsmeta, $ bandsmeta_header:l2l.bandsmeta_header, $ diodemeta: l2l.diodemeta, $ diodemeta_header:l2l.diodemeta_header, $ quadmeta: l2l.quadmeta, $ quadmeta_header: l2l.linesmeta_header, $ linesdata_header:l2l.linesdata_header } if n_elements(result) eq 0 then begin result=l2l.linesdata files=infn endif else begin result=[temporary(result),l2l.linesdata] files=[temporary(files),infn] endelse end ;else stop end end if n_average gt 1 then begin n_new_result=n_elements(result)/n_average new_result=result[0:*:n_average] ;This way we get all the timestamps and stuff for i=0L,n_new_result-1 do begin new_result[i].line_irradiance =eve_average_no_fill(result[i*n_average:(i+1)*n_average-1].line_irradiance, 2) new_result[i].band_irradiance =eve_average_no_fill(result[i*n_average:(i+1)*n_average-1].band_irradiance, 2) new_result[i].diode_irradiance=eve_average_no_fill(result[i*n_average:(i+1)*n_average-1].diode_irradiance,2) new_result[i].quad_fraction =eve_average_no_fill(result[i*n_average:(i+1)*n_average-1].quad_fraction, 2) end ;Not properly combining stdevs, so just fill them new_result.diode_stdev=-1 new_result.quad_stdev=-1 result=new_result end return,result end