PRO split_a,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')+'a.gz' basename = co2_basedir('incoming')+fname outdir = co2_basedir('afiles') header = ['Year','DOY','hhmm','Sec','Ux','Uy','Uz','Ts','Csat_Diag','CO2','H2O','LI_P','LI_T','Wspd','Wdir'] ;in incoming file 'ID' is header[0] else all is same and wind speed and direction are calculated later in avg_csat res = file_test(basename,/read) IF NOT res THEN BEGIN print, 'Cannot open '+fname GOTO, leave ENDIF print,'Opening A 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+1,18000) curarr[columns,*] = nan() curarr[columns-1,*] = nan() i = 0l WHILE NOT eof(fl) DO BEGIN IF (i mod 1000) EQ 0 THEN print,'on line ',i strval = '' tempvals = 0b readf,fl,strval tempvals = strsplit(strval,',',/extract) ncols = n_elements(tempvals) IF ncols EQ columns 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)') hh = string(fix(vals[3] / 100),format='(i2.2)') min = string((fix((vals[3] MOD 100) / 30)*30),format='(i2.2)') halfname = co2_const('file_head')+year+doy+'.'+hh+min halfdir = outdir+year+'/'+year+doy+'/' fullname = halfdir + 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=header ENDIF ;switch to new array curname = fullname ;create directory is we need to create_dir,halfdir ;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 keyword_set(newheader) THEN BEGIN IF 1b-array_equal(header,newheader) THEN BEGIN print,' ERROR: headers do not match' stop 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+1,18000,/float,value=!values.f_nan) curarr[0,*] = vals[1] curarr[1,*] = vals[2] slotno = lindgen(18000) thehr = long(vals[3] / 100) curarr[2,*] = fix(slotno / 600) + fix(thehr * 100) IF min EQ '30' THEN curarr[2,*] = curarr[2,*] + 30 curarr[3,*] = float(slotno MOD 600) / 10.0 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) thesec=float(vals[4]) IF themin GE 30 THEN themin = themin - 30 slot = long(themin*600l)+long(thesec*10.0) IF NOT keyword_set(noswap) THEN BEGIN IF (year EQ '04') AND (vals[2] GT 172) AND ((vals[2] LE 216) OR ((vals[2] EQ 217) AND (long(vals[3] / 100) LT 17))) THEN BEGIN temp = vals[10] vals[10] = vals[11] vals[11] = temp ENDIF ENDIF curarr[4:columns-2,slot] = vals[5:columns-1] 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_a',pd[i],py[i] ENDIF leave: print,'Split_a done' END FUNCTION read_split_a,h,m,doy,yr,header=header,talk=talk,errflag=errflag errflag = 0 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)') hh = string(h,format='(i2.2)') mm = string(fix(m/30)*30,format='(i2.2)') outdir = co2_basedir('afiles',yr=yr) halfname = co2_const('file_head')+year+jd+'.'+hh+mm halfdir = outdir+year+jd+'/' fullname = halfdir + halfname + '.xdf' IF keyword_set(talk) THEN print,'Reading afile ',fullname IF file_test(fullname,/read) THEN return,read_xdf(fullname,header=header) ELSE BEGIN IF keyword_set(talk) THEN print,' Could not open file' errflag = 1 return,nan() ENDELSE END