; mpa_beta_readfile.pro (c) Brian Jackel 2003/07/14 ; ; This IDL procedure reads data from CANOPUS MPA "beta" ; files. These each contain one day of scanning photometer ; data from up to four sites. ; ; 2003/07/14 Bjj -can now read "gzipped" files directly ; -cleaned up code ; -renamed from "mpa_readfile.pro" ; FUNCTION MPA_BETA_READFILE,filename,DEBUG=debug,N_RECORDS=n_records ON_ERROR,2 fname= FINDFILE(filename[0],COUNT=nfiles) IF (nfiles NE 1) THEN MESSAGE,'Error- file '+filename[0]+' not found' compress_flag= STREGEX(fname[0],'.*\.gz$',/BOOLEAN) ;ends with ".gz" OPENR,lun,fname[0],/GET_LUN,/VAX_FLOAT,COMPRESS=compress_flag,ERROR=error_flag IF (error_flag) THEN MESSAGE,!err_string fs= FSTAT(lun) IF (fs.size EQ 0) THEN BEGIN MESSAGE,'Warning- file '+fname[0]+' is empty',/INFORMATIONAL FREE_LUN,lun RETURN,{mpa_beta_record} ENDIF data= REPLICATE({mpa_beta_record},1441) ;1 record/minute + 1 just in case beta_header= {mpa_beta_header} platform_header= {mpa_platform_header} platform_status= {mpa_platform_status} n_records= 0 ON_IOERROR,ioerror_recovery REPEAT BEGIN READU,lun,beta_header data[n_records].header= beta_header FOR indx=0,3 DO BEGIN READU,lun,platform_header,platform_status data[n_records].platform[indx].header= platform_header data[n_records].platform[indx].status= platform_status ENDFOR reclen= beta_header.length ;& BYTEORDER,reclen ;not necessary CASE (reclen) OF 372: ndata=0 588: ndata=1 804: ndata=2 1020: ndata=3 1236: ndata=4 ELSE: BEGIN FREE_LUN,lun MESSAGE,'Error- unexpected record length ('+STRCOMPRESS(reclen) $ +') in file: '+fname[0]+', aborting',/INFORMATIONAL RETURN,{mpa_beta_record} END ENDCASE IF (ndata GT 0) THEN BEGIN temp= REPLICATE({mpa_beta_data},ndata) READU,lun,temp FOR indx=0,ndata-1 DO BEGIN station_name= STRING(temp[indx].station_id) CASE station_name OF 'RANKIN':data[n_records].data[0]= temp[indx] 'GILLAM':data[n_records].data[1]= temp[indx] 'PINAWA':data[n_records].data[2]= temp[indx] 'FSMITH':data[n_records].data[3]= temp[indx] ELSE:MESSAGE,'Error- unexpected station_name: '+station_name+' in file: '+fname[0],/INFORMATIONAL ENDCASE ENDFOR IF KEYWORD_SET(debug) THEN BEGIN PRINT,STRING(temp.station_id) PRINT,indx[w] PRINT,STRING(temp[indx[w]].station_id) PRINT,FIX(sndx) PRINT,STRING(data[n_records].data.station_id) PRINT,'-------------' ENDIF ENDIF n_records= n_records+1 ENDREP UNTIL EOF(lun) IF (n_records GT 1440) THEN MESSAGE,'Note- more than 1440 records in file: '+fname[0],/INFORMATIONAL FREE_LUN,lun RETURN,data[0:(n_records-1)>0] ioerror_recovery: FREE_LUN,lun MESSAGE,'Warning- some kind of I/O error'+!err_string,/INFORMATIONAL RETURN,data END