PRO split_b,fname,nocompress=nocompress,noread=noread,pr_d=pr_d,pr_y=pr_y ;goal is to split the a file into 30 minute chunks with filled missing ;data - output is sdtored in compressed XDF IF NOT keyword_set(fname) THEN fname = co2_const('testfile')+'b.gz' basename = co2_basedir('incoming')+fname outdir = co2_basedir('bfiles') ; header = ['year','doy','hhmm','rtd_t','atm_p','dew_pt','solar_in','solar_ref','ir_in','ir_emit','kz_t','bvolt','leaf_wet','sol_sdev','h2o','netrad'] header = ['year','doy','hhmm','t','atm_p','rh','dew_pt','netrad','par','leaf_wet','bvolt','h2o'] ;original incoming as 'id' as header[0], one new calc field at end res = file_test(basename,/read) IF NOT res THEN BEGIN print, 'Cannot open '+fname GOTO, leave ENDIF print,'Opening B file '+fname IF keyword_set(nocompress) THEN openr,fl,basename,/get_lun ELSE openr,fl,basename,/get_lun,/compress pr_d = [0] pr_y = [0] list = '' readf,fl,list IF NOT eof(fl) THEN BEGIN list = '' readf,fl,list ENDIF IF strmid(list,0,1) EQ ',' THEN BEGIN list = '' readf,fl,list ENDIF res = strsplit(list,',',/extract) columns = long(n_elements(res)) point_lun,fl,0 print,'The file has ',columns,' columns' curname = '' curarr = fltarr(columns,1440) curarr[columns-1,*] = nan() i = 0l create_dir,outdir WHILE NOT eof(fl) DO BEGIN strval = '' tempvals = 0b readf,fl,strval tempvals = strsplit(strval,',',/extract) ncols = n_elements(tempvals) IF ncols GE 12 THEN vals = float(tempvals) ELSE BEGIN print,'Skipping line ',i,' ncols: ',ncols,' cols: ',columns GOTO,skipline ENDELSE year = strmid(string(vals[1],format='(i4.4)'),2,2) doy = string(vals[2],format='(i3.3)') oldheader = header IF (vals[1] GT 2003) OR ((vals[1] EQ 2003) AND (vals[2] GE 178)) THEN BEGIN header = ['year','doy','hhmm','t','atm_p','rh','dew_pt','netrad','par','leaf_wet','bvolt','h2o','tot_par','diff_par'] columns = n_elements(header) ENDIF halfname = co2_const('file_head')+year+doy+'.b' fullname = outdir + year + '/' + halfname + '.xdf' ;check to see if using current array or new array IF fullname ne curname THEN BEGIN ;save curarr IF curname NE '' THEN begin print,'Closing and writing file ',curname write_xdf,curname,curarr,header=oldheader ENDIF ;switch to new array curname = fullname create_dir,outdir+year+'/' ;if file exists, read it, else create it IF file_test(curname) AND NOT keyword_set(noread) THEN BEGIN print,'Opening and reading file ',curname curarr = read_xdf(curname,header=newheader) IF (year NE '03') AND ((doy NE '178') OR (doy NE '179')) THEN BEGIN IF keyword_set(newheader) THEN BEGIN IF 1b-array_equal(header,newheader) THEN BEGIN print,' ERROR: headers do not match' stop ENDIF ENDIF ENDIF pr_d = [pr_d,vals[2]] pr_y = [pr_y,vals[1] MOD 100] ENDIF ELSE BEGIN print,'Creating file ',curname curarr = make_array(columns,1440,/float,value=!values.f_nan) curarr[0,*] = vals[1] curarr[1,*] = vals[2] slotno = indgen(1440) / 1440.0 curarr[2,*] = fjday_to_hhmm(slotno) write_xdf,curname,curarr,header=header pr_d = [pr_d,vals[2]] pr_y = [pr_y,vals[1] MOD 100] ENDELSE ENDIF ;store value from file into current array themin= long(vals[3] MOD 100) thehr = long(vals[3] / 100) slot = long(thehr*60l)+long(themin) IF (vals[1] GE 2004) OR ((vals[1] EQ 2003) AND (doy GE 178)) THEN BEGIN curarr[3:columns-4,slot] = vals[4:columns-3] IF n_elements(vals) GT 12 THEN curarr[columns-2:columns-1,slot] = vals[columns-2:columns-1] ELSE curarr[columns-2:columns-1,slot] = -999.0 ENDIF ELSE BEGIN curarr[3:columns-2,slot] = vals[4:columns-1] ENDELSE skipline: ;increment counter i = i + 1 ENDWHILE ;write the last file IF curname NE '' THEN BEGIN print,'Closing and writing file ',curname write_xdf,curname,curarr,header=header ENDIF free_lun,fl IF n_elements(pr_d) GT 1 THEN pr_d = fix(cdr(pr_d)) ELSE pr_d = nan() IF n_elements(pr_y) GT 1 THEN pr_y = fix(cdr(pr_y)) ELSE pr_y = nan() IF NOT isnan(pr_d[0]) THEN BEGIN pu = uniq(pr_y*1000l+pr_d) pd = pr_d[pu] py = pr_y[pu] FOR i = 0,n_elements(pu)-1 DO update_version,'split_b',pd[i],py[i] ENDIF leave: print,'Split_b done.' END FUNCTION read_split_b,doy,yr,header=header,clean=clean IF NOT keyword_set(yr) THEN yr = co2_const('cur_year') year = string(yr MOD 100,format='(i2.2)') jd = string(doy,format='(i3.3)') outdir = co2_basedir('bfiles',yr=yr) halfname = co2_const('file_head')+year+jd+'.b' fullname = outdir + halfname + '.xdf' IF file_test(fullname,/read) THEN return,read_xdf(fullname,header=header) ELSE return,nan() END