;+ ; Contains the make_file_list function ; ; :Author: ; Baptiste Cecconi ; ; :History: ; 2009/05/05: Created ; ; 2012/06/01: Last Edit ;- ; ;+ ; Creates the list of the existing files for the period ; between the day aaaajjjd at hd (hour) and the day ; aaaajjjf at hf (hour). ; Returns a pointer towards the table of files paths. ; ; :Uses: ; make_dir_tab ; ; :Returns: ; <return desc here> ; ; :Params: ; aaaajjjd: in, required, type=int ; day of the beginning of the interesting period ; hd: in, required, type=int ; hour of the beginning of the interesting period ; aaaajjjf: in, required, type=int ; day of the end of the interesting period ; hf: in, required, type=int ; hour of the end of the interesting period ; ; :Keywords: ; verbose: in, optional, type=sometype ; A keyword named verbose ; level: in, optional, type=string ; level of files ('k', 'n1', 'n2'...) ; source: in, optional, type=string ; name of the source('su', 'ea', 'ju', 'sc', 'ti'... ; (for level = n3, see src_list.txt) ; antset: in, optional, type=string ; antenna parameter set ('j', 'r','d') ; ephem_type: in, optional, type=string ; 'qsse', 'qjse', 'qgse', 'qsec', 'vsat', ; 'vtit', 'vjup', 'vear', 'vsun'... ; (for level = ephem, see src_list.txt) ; summary_type: in, optional, type=sometype ; A keyword named summary_type ; noemptyfiles: in, optional, type=boolean ; Do not include files with size 0 ; ; :Examples: ; Call of this function:: ; ; pfileList = make_file_list(aaaajjjd, hd, aaaajjjf, hf, level='n2') ; if (ptr_valid(pfileList) eq 0) then begin ; nFileList=0 ; endif else begin ; fileList=*pFileList ; nFileList = n_elements(fileList) ; ptr_free, pFileList ; endelse ; ;- function make_file_list, aaaajjjd, hd, aaaajjjf, hf, verbose=verbose, $ level=level, source=source, antset=antset, ephem_type=ephem_type, $ summary_type=summary_type, noemptyfiles=noemptyfiles ;-------------------------------------------------------------- if keyword_set(verbose) then verbose=1b else verbose=0b if keyword_set(noemptyfiles) then noemptyfiles=1b else noemptyfiles=0b datapath=getenv('NAS_RPWS') year1=fix(long(aaaajjjd)/1000L) year2=fix(long(aaaajjjf)/1000L) day1=aaaajjjd-year1*1000l day2=aaaajjjf-year2*1000l indbeg=0l indend=0l ;--------------------------------------------------------------- ; NAMES OF THE DIRECTORIES ;--------------------------------------------------------------- directories=make_dir_tab(year1, day1, year2, day2,verbose=verbose) if (ptr_valid(directories) eq 0) then begin res=ptr_new() return, res endif dirnb=n_elements(*directories) nb=0l list=ptrarr(dirnb) j=0l validlevels=['k', 'n1', 'n2', 'n3', 'n3a', 'n3b', 'n3c', 'n3d', 'n3e', 'n3f', 'n3g', 'ephem', 'pdf', 'lis', 'temp'] ind=where(level eq validlevels) if (ind eq -1) then begin print, "# Warning ! Invalid level" ptr_free, directories return, ptr_new() endif dir='/'+level+'/' if verbose then begin message,/info,'Looking for files into:' for i=0,dirnb-1 do message,/info,'- '+datapath+(*directories)(i)+dir endif ; loading src_list.txt data ; ------------------------- read_data_src_list,src_list case 1 of (level eq 'ephem'): begin ephem_types=[src_list.qeph,src_list.veph] if ((where(ephem_types eq ephem_type))(0) eq -1) then begin print, "# Warning ! Bad ephemeris file" ptr_free, directories return, ptr_new() endif for idir=0, dirnb-1 do begin (*directories)[idir]=datapath+(*directories)[idir]+dir+'???????.'+ephem_type if verbose then message,/info,'[file mask] '+(*directories)[idir] endfor end (level eq 'pdf'): begin if ~keyword_set(summary_type) then summary_type='raw' summary_types=['raw','SVe','SVb','LTb'] if ((where(summary_types eq summary_type))(0) eq -1) then begin print, "# Warning ! Bad summary file type" ptr_free, directories return, ptr_new() endif for idir=0, dirnb-1 do begin case summary_type of 'raw': (*directories)[idir]=datapath+(*directories)[idir]+dir+'???????.pdf' 'SVe': (*directories)[idir]=datapath+(*directories)[idir]+dir+'???????-SVe.pdf' 'SVb': (*directories)[idir]=datapath+(*directories)[idir]+dir+'???????-SVb.pdf' 'LTb': (*directories)[idir]=datapath+(*directories)[idir]+dir+'???????-LTb.pdf' endcase if verbose then message,/info,'[file mask] '+(*directories)[idir] endfor end ((ind[0] gt 3) and (ind[0] lt 11)): begin sources=src_list.df_name ind=where(source eq sources) if (keyword_set(source) eq 0) then begin sc='??' endif else begin sc=sources[ind] endelse if (keyword_set(antset) eq 0) then begin antset='?' endif for idir=0, dirnb-1 do begin (*directories)[idir]=datapath+(*directories)[idir]+dir+'N'+strmid(level, 1, 2)+'_'+antset+sc+'*' if verbose then message,/info,'[file mask] '+(*directories)[idir] endfor end else: begin for idir=0, dirnb-1 do begin (*directories)[idir]=datapath+(*directories)[idir]+dir+'*' endfor end endcase ;--------------------------------------- ; FILES SEARCH ;--------------------------------------- j=0l for idir=0l, dirnb-1l do begin list[j]=ptr_new(file_search((*directories)[idir], count=found)) nb=nb+found if (found ne 0) then begin j=j+1l endif endfor if (nb eq 0) then begin res=ptr_new() endif else begin files=strarr(nb) j=0l for idir=0l, dirnb-1l do begin if (ptr_valid(list[idir])) then begin filenb=n_elements(*(list[idir])) if not (filenb eq 1 and (*(list[idir]))[0] eq '') then begin for ifile=0l, filenb-1l do begin is_empty=0b if noemptyfiles then is_empty=file_test((*(list[idir]))[ifile], /ZERO_LENGTH) if is_empty then begin if (nb > 0) then nb-- message, /info, 'warning: K file ' + (*(list[idir]))[ifile] + ' has size 0, skipping' endif else begin files[j]=(*(list[idir]))[ifile] j=j+1l endelse endfor endif endif endfor ;-------------------------------------- ; INTERESTING FILES SELECTION ;--------------------------------------- ; all if level='ephem' if (level eq 'ephem') then begin indbeg=0l indend=j-1l j=0l found=0l indend=-1l indbeg=0l while ((j lt nb) and (found eq 0)) do begin if (long(strmid(files[j], 11, 7, /reverse_offset)) lt aaaajjjd) then begin j=j+1l endif else begin found=1l endelse endwhile if (j eq nb) then begin res=ptr_new() ptr_free, directories for i=0, dirnb-1 do begin ptr_free, list[i] endfor return, res endif indbeg = j found=0l while ((j lt nb) and (found eq 0)) do begin if (long(strmid(files[j], 11, 7, /reverse_offset)) lt aaaajjjf) then begin j=j+1l endif else begin found=1l endelse endwhile if (j eq nb) then begin indend=j-1l endif else begin if (long(strmid(files[j], 11, 7, /reverse_offset)) eq aaaajjjf) then begin indend=j endif else begin indend=j-1l endelse endelse if ((indend ne -1) and (indend ge indbeg)) then begin res=ptr_new(files[indbeg: indend]) endif else res=ptr_new() endif else begin ; else: only the good time interval j=0l found=0l indend=-1l indbeg=0l if (level eq 'pdf' or level eq 'lis') then begin str_rev_offset=10 if (level eq 'pdf') then begin if (summary_type eq 'SVe' or summary_type eq 'SVb' or summary_type eq 'LTb') then str_rev_offset += 4 endif if hf eq 0 then aaaajjjf1=aaaajjjf-1 else aaaajjjf1=aaaajjjf nbfiles=n_elements(files) if (long(strtrim(strmid(files[nbfiles-1], str_rev_offset, 7, /reverse_offset), 2)) lt aaaajjjd or $ long(strtrim(strmid(files[0], str_rev_offset, 7, /reverse_offset), 2)) gt aaaajjjf1) then begin res=ptr_new() endif else begin i0=0l while (long(strtrim(strmid(files[i0], str_rev_offset, 7, /reverse_offset), 2)) lt aaaajjjd) do begin i0=i0+1l endwhile i1=nb-1l while ((long(strtrim(strmid(files[i1], str_rev_offset, 7, /reverse_offset), 2))) gt aaaajjjf1) do begin i1=i1-1l endwhile if (i0 gt i1) then begin res=ptr_new() endif else begin if (i0 eq i1) then begin res=ptr_new(files[i0]) endif else begin files=files[i0:i1] res=ptr_new(files) endelse endelse endelse endif else begin while ((j lt nb) and (found eq 0)) do begin if (long(strmid(files[j], 9, 7, /reverse_offset)) lt aaaajjjd) then begin j=j+1l endif else begin found=1l endelse endwhile if (j eq nb) then begin res=ptr_new() ptr_free, directories for i=0l, dirnb-1l do begin ptr_free, list[i] endfor return, res endif if (long(strmid(files[j], 9, 7, /reverse_offset)) eq aaaajjjd) then begin found=0 while ((j lt nb) and (found eq 0)) do begin if ((long(strmid(files[j], 9, 7, /reverse_offset)) eq aaaajjjd) and $ long(strmid(files[j], 1, 2, /reverse_offset)) lt hd) then begin j=j+1l endif else begin found=1l endelse endwhile if (j eq nb) then begin res=ptr_new() ptr_free, directories for i=0, dirnb-1 do begin ptr_free, list[i] endfor return, res endif endif indbeg = j found=0l while ((j lt nb) and (found eq 0)) do begin if (long(strmid(files[j], 9, 7, /reverse_offset)) lt aaaajjjf) then begin j=j+1l endif else begin found=1l endelse endwhile found=0l while (j lt nb and found eq 0) do begin if (long(strmid(files[j], 9, 7, /reverse_offset)) eq aaaajjjf) and $ (long(strmid(files[j], 1, 2, /reverse_offset)) lt hf) then begin j=j+1l endif else begin found=1l endelse endwhile if (j eq nb) then begin indend=j-1l endif else begin if (((long(strmid(files[j], 9, 7, /reverse_offset)) eq aaaajjjf) and (long(strmid(files[j], 1, 2, /reverse_offset)) ge hf)) or (long(strmid(files[j], 9, 7, /reverse_offset)) gt aaaajjjf) ) then begin indend=j-1l endif else begin indend=j endelse endelse if ((indend ne -1) and (indend ge indbeg)) then begin res=ptr_new(files[indbeg: indend]) endif else res=ptr_new() endelse endelse endelse ptr_free, directories for i=0l, dirnb-1l do begin ptr_free, list[i] endfor if ptr_valid(res) and verbose then message,/info,string(n_elements(*res))+" file(s) found" return, res end