pro check_cdf, file_name, ps_or_x ; ; 10/10 ADDED A NEW VARIABLE Q_FILE_FLAGS_CORRUPTED..... ; 9/23/95 add switch to make a gif file of spectrogram only ; in x mode ; ; 8/29/95 add seven flags that expand mode_error_flag ; all cdf_uint1 type variables--see the skeleton table ; CDF_BYTE variables gave too many error messages ; in idl running on the sun!!!! ; ; 2/95 /willow/de/pool/check_cdf.pro ; read a cdf and make line plots of selected parameters ; to verify that the thing is ok for passing on to ; nssdc for archiving........ wkp ; ;for i=0, info.nvars-1 do begin ; vinfo= cdf_varinq(cdfid,i) ; print, vinfo.name, ' ', vinfo.datatype ;endfor ; Z Varaibles names and dimensions ; EPOCH ; Time_PB5(3) yyyy doy seconds.microseconds ; h_flux(15,14) energy, angle ; h_uncertainty(15,14) ; o_flux ; o_uncertainty ; he_flux ; he_uncertainty ; INTERPOLATED_BACKGROUND ; STANDARD_DEVEIATION_OF_INTERPOLATED_BACKGROUND ; Low_energy_cut_off ; Mode_error_flag ; He_data CDF_UINT1 ; N_flag CDF_UINT1 ; C_flag CDF_UINT1 ; A_flag CDF_UINT1 ; Noisy_flag CDF_UINT1 ; Short_flag CDF_UINT1 ; PA_coverage_flag CDF_UINT1 ; 10/10 Q_FILE_FLAGS_CORRUPTED CDF_UINT1 ; Geographic_position ; Geomagnetic_position ; others such as Center_energy, Center_pitch_angle .... EPOCH=dblarr(900) ; Pb5time=fltarr(3) ; Pb5 times of last record only Time=fltarr(900) ; interval, year, day, sec ; time(*,3)/86400. for time in decimal hrs. yyddd=lonarr(900) hr=fltarr(900) hydrogen=fltarr(900,15) ; h_flux integrated oxygen=fltarr(900,15) helium=fltarr(900,15) rpa=fltarr(900) ;Low_energy_cut_off mode_error_flag=intarr(900) ;var #21 He_data=intarr(900) ; CDF_UINT1 N_flag=intarr(900) ; CDF_UINT1 C_flag=intarr(900) ; CDF_UINT1 A_flag=intarr(900) ; CDF_UINT1 Noisy_flag=intarr(900) ; CDF_UINT1 Short_flag=intarr(900) ; CDF_UINT1 PA_coverage_flag=intarr(900) ; CDF_UINT1 ; interp_bkg=fltarr(900) ; dev_interp_bkg=fltarr(900) ; geo_pos=fltarr(3) ; geographic position altitude=fltarr(900) ; lat=fltarr(900) ; longitude=fltarr(900) ; mag_pos=fltarr(3) ; geomagnetic position mlt=fltarr(900) ; invl=fltarr(900) ; mag_lat=fltarr(900) ; year=0L Month=0L Day=0L Hour=0L Minute=0L Second=0L Milli=0L ;for cdf_epoch array=fltarr(15,14) array_3=fltarr(3) dum=0L idum=0 ibyte=intarr(1) ;reading in CDF_INT1 format ;mspec=intarr(900,8) ; pixel display of mode_error_flag ; added 6/30/95 declared below print,'file_name from input: ',file_name print,'ps_or_x from input: ', ps_or_x ; note you have to enter the file name and ps_or_x on the ; command line between single quotes ' ; example: IDL>check_cdf,'81310_de_eics','ps' cdfname=file_name set_plot,'x' ;print, a(-1) ; make code crash for test ;print, 'Using ',cdfname+'.cdf and outputing to device: ',ps_or_x if ps_or_x eq 'ps' then begin set_plot,'ps' DEVICE, FILENAME=cdfname+'.ps', /Landscape print, 'Opening ',cdfname,'.ps file for line plots...' endif ; ; gif option added 9/23/95 gif_or_no='n' if ps_or_x eq 'x' then begin gif_name='' gif_or_no='' print, 'DO you want to make a gif file? y/n' read,gif_or_no print, 'you entered ',gif_name,' if gif_or_no eq 'y' then begin device,retain=2 ;let idl do the backing store ; TVRD needs this to work ; on my sparc station 2/wkp gif_name=cdfname+'.gif' print, 'making the gif file: ',gif_name ; and make a gif at the end endif endif ; ;open cdf ; cdfid=cdf_open(cdfname) print,'CDFID ',cdfid info=cdf_inquire(cdfid) ; help,/structure, info print, 'Dimensions: ',info.dim print, '' print,'Z Variable names and Types' for i=0, info.nzvars-1 do begin vinfo= cdf_varinq(cdfid,i,/zvariable) print, vinfo.name, ' ', vinfo.datatype endfor ; cdf_control,cdfid,variable=0,/zvariable,get_var_info=einfo max_records=einfo.maxrec print, 'NOTE: The NO_PADVALUE_SPECIFIED: error is a feature of idl. no problem/wkp.' ;% CDF_CONTROL: Function completed but: NO_PADVALUE_SPECIFIED: A pad value has ; not been specified. print,'MAXRECORDS= ',max_records if max_records eq 0 then begin print, 'No valid Summary Data for this UT day' print,cdfname stop endif ;print,' use command cdf_attget,cdfid,VALIDMIN inquotes, varname in quotes, local variable' status='' ; 86400/96 seconds = 900 max intervals per day! print, cdfname for i=0, max_records do begin ; ; keep awake printout sleep = i mod 50 if sleep eq 0 then print, 'Reading CDF record # ',i ; get hydrogen (variable #0) array for record i cdf_varget,cdfid,'h_flux',array, rec_start=i,/zvariable Result=CDF_ERROR(status) if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for H+ array call/',Result,'/', status for jj=0,14 do begin hydrogen(i,jj)=0.0 for kk=0,13 do begin hydrogen(i,jj)=hydrogen(i,jj)+array(jj,kk)/14.0 ; This display is for diagnostic purposes only not analysis... wkp. ; the display IS technically misleading ; ... IT weights the field aligned ; component much too heavily.. endfor endfor ; oxygen cdf_varget,cdfid,'o_flux',array, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for O+ array call/',Result,'/', status for jj=0,14 do begin oxygen(i,jj)=0.0 for kk=0,13 do begin oxygen(i,jj)=oxygen(i,jj)+array(jj,kk)/14.0 ; This display is for diagnostic purposes only not analysis... wkp. ; the display IS technically misleading ; ... IT weights the field aligned ; component much too heavily.. endfor endfor ; helium cdf_varget,cdfid,'he_flux',array, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status for jj=0,14 do begin helium(i,jj)=0.0 for kk=0,13 do begin helium(i,jj)=helium(i,jj)+array(jj,kk)/14.0 ; This display is for diagnostic purposes only not analysis... wkp. ; the display IS technically misleading ; ... IT weights the field aligned ; component much too heavily.. endfor endfor ;;time ; Time_PB5(3) yyyy doy seconds.microseconds cdf_varget,cdfid,'Time_PB5',array_3, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ;yyddd=lonarr(900) ;var #7 ;time=lonarr(900) ;var #8 yrday=(array_3(0)MOD 100)*1000+array_3(1) yyddd(i)=yrday time(i)=array_3(2)/1000. hr(i)=time(i)/3600. ; Geographic_position cdf_varget,cdfid,'Geographic_position',geo_pos, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ;geo_pos=fltarr(3) ; geographic position ;altitude=fltarr(900) ; ;lat=fltarr(900) ; ;longitude=fltarr(900) ; altitude(i)=geo_pos(0) lat(i)=geo_pos(1) longitude(i)=geo_pos(2) ; Geomagnetic_position cdf_varget,cdfid,'Geomagnetic_position',mag_pos, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ;mag_pos=fltarr(3) ; geomagnetic position ;mlt=fltarr(900) ; ;invl=fltarr(900) ; ;mag_lat=fltarr(900) ; mlt(i)=mag_pos(0) invl(i)=mag_pos(1) mag_lat(i)=mag_pos(2) ; INTERPOLATED_BACKGROUND ; STANDARD_DEVEIATION_OF_INTERPOLATED_BACKGROUND ; Low_energy_cut_off ; Mode_error_flag ;rpa=fltarr(900) ;Low_energy_cut_off cdf_varget,cdfid,'Low_energy_cut_off',dum, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; rpa(i)=dum ;print, 'RPA CUT off',dum ;mode_error_flag=intarr(900) ;var #21 cdf_varget,cdfid,'Mode_error_flag',idum, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; mode_error_flag(i)=idum ;print,'MODE_ERROR_FLAG',mode_error_flag(i) ;He_data=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'He_data',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; He_data(i)=ibyte ;print,'He_data',He_data(i) ;N_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'N_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; N_flag(i)=ibyte ;print,'N_flag',N_flag(i) ;C_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'C_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; C_flag(i)=ibyte ;print,'C_flag',C_flag(i) ;A_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'A_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; A_flag(i)=ibyte ;print,'A_flag',A_flag(i) ;Noisy_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'Noisy_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; Noisy_flag(i)=ibyte ;print,'Noisy_flag',Noisy_flag(i) ;Short_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'Short_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; Short_flag(i)=ibyte ;print,'Short_flag',Short_flag(i) ;PA_coverage_flag=intarr(900) ; CDF_UINT1 cdf_varget,cdfid,'PA_coverage_flag',ibyte, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; PA_coverage_flag(i)=ibyte ;print,'PA_coverage_flag',PA_coverage_flag(i) ;interp_bkg=fltarr(900) ; cdf_varget,cdfid,'INTERPOLATED_BACKGROUND',dum, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; interp_bkg(i)=dum ;dev_interp_bkg=fltarr(900) ; cdf_varget,cdfid,'STANDARD_DEVIATION_OF_INTERPOLATED_BACKGROUND',dum, rec_start=i,/zvariable if result ne 'CDF_OK: Function completed successfully.' then $ print, 'Status after cdf_varget for He+ array call/',Result,'/', status ; dev_interp_bkg(i)=dum ;print,'SDT DEV OF BKG ',dev_interp_bkg(i) ; endfor endfor print,'TIME AND EPOCH of intervals 0 and last=',max_records print, yyddd(0),time(0),hr(0) cdf_epoch, epoch(0), year, Month, Day, Hour, Minute, Second, milli,/break print, year, Month, Day, Hour, Minute, Second, milli print, yyddd(max_records),time(max_records),hr(max_records) cdf_epoch, epoch(max_records), year, Month, Day, Hour, Minute, Second, milli,/break print, year, Month, Day, Hour, Minute, Second, milli !P.multi=[0,1,4,0,0] !P.PSYM=3 ; dot's galore 0=lines, 1= +'s etc. plot,time(0:max_records),title='seconds of day '+string(yyddd(1)) !P.PSYM=3 plot,hr(0:max_records),altitude(0:max_records), title='altitude',xrange=[0.,24.] plot,hr(0:max_records),invl(0:max_records), title='Invariant Latitude',xrange=[0.,24.] plot,hr(0:max_records),interp_bkg(0:max_records), title='.interpolated background',xrange=[0.,24.] dummy='' if ps_or_x eq 'x' then begin print , 'Hit Return to continue' read, dummy endif plot,hr(0:max_records),dev_interp_bkg(0:max_records),title='standard deviation of interpolated backgroung'+string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),mlt(0:max_records), title='Magnetic local time'+string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),mag_lat(0:max_records), title='Magnetic latitude'+string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),lat(0:max_records), title='Geographic Latitude',xrange=[0.,24.] if ps_or_x eq 'x' then begin print, 'Hit Return to continue' read, dummy endif plot,hr(0:max_records),longitude(0:max_records), title='Geographic Longitude',xrange=[0.,24.] plot,hr(0:max_records),rpa(0:max_records), title='Input RPA voltage'+string(yyddd(1)),xrange=[0.,24.] !P.PSYM=1 ; + to distinguish 0/1 he/nohe plot,hr(0:max_records),mode_error_flag(0:max_records+1), title='Mode/Error Flag USING ANGELAS VALUES'+string(yyddd(1)),xrange=[0.,24.] !P.PSYM=3 ; dot's galore 0=lines, 1= +'s etc. 3= .... plot,hr(0:max_records),yyddd(0:max_records),title='yyddd',xrange=[0.,24.] !P.PSYM=0 if ps_or_x eq 'x' then begin print, 'Hit Return to continue' read, dummy endif !P.PSYM=1 ; dot's galore 0=lines, 1= +'s etc. 3= .... plot,hr(0:max_records),He_data(0:max_records+1), title='He_data Flag' +string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),c_flag(0:max_records+1), title='C_Flag' +string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),A_flag(0:max_records+1), title='A_Flag' +string(yyddd(1)),xrange=[0.,24.] plot,hr(0:max_records),Noisy_flag(0:max_records+1), title='Noisy_Flag' +string(yyddd(1)),xrange=[0.,24.] !P.PSYM=0 if ps_or_x eq 'x' then begin print, 'Hit Return to continue' read, dummy endif ; Spectrogram stuff::::: !P.multi=[0,1,0,0,0] erase ; calls a new page ; put the bottom plot on !P.PSYM=3 plot,hr(0:max_records),position=[0.1,0.05, 0.9, 0.15], $ xrange=[0,max_records],xstyle=1,xtitle='Record Number',$ ytitle='Hour',/normal ; calculate spec=fltarr(max_records+1,15) ospec=fltarr(max_records+1,15) hespec=fltarr(max_records+1,15) for i=0,max_records do begin for j=0,14 do begin spec(i,j)=alog10(hydrogen(i,j)) ospec(i,j)=alog10(oxygen(i,j)) hespec(i,j)=alog10(helium(i,j)) endfor endfor ; now do the mode_error_flag 6/30/95 mspec=fltarr(max_records+1,8) for i=0,max_records do begin for j=0,7 do mspec(i,j)=10 ; set all flags to 10 ; following logic sets the 8 flags ; to 1 if they are on. mef=mode_error_flag(i) if mef gt 127 then mspec(i,7)=1 if mef MOD 2 eq 1 then mspec(i,0)=1 if ((mef MOD 4) - (mef MOD 2)) eq 2 then mspec(i,1)=1 if ((mef MOD 8) - (mef MOD 4) )eq 4 then mspec(i,2)=1 if ((mef MOD 16) - (mef MOD 8)) eq 8 then mspec(i,3)=1 if ((mef MOD 32) - (mef MOD 16)) eq 16 then mspec(i,4)=1 if ((mef MOD 64) - (mef MOD 32)) eq 32 then mspec(i,5)=1 if ((mef MOD 128) - (mef MOD 64)) eq 64 then mspec(i,6)=1 endfor max_mspec=max(mspec) print, 'MAXIUM MSPEC= ', max_mspec spec=bytscl(spec,min=4, max=9, top=!D.N_colors) ospec=bytscl(ospec,min=4, max=9, top=!D.N_colors) hespec=bytscl(hespec,min=4, max=9, top=!D.N_colors) mspec=bytscl(mspec,min=0,max=10, top=!D.N_colors) if ps_or_x eq 'ps' then begin wb_tbl ; white to black color table ~pete/idl_stuff tv, spec, 0.1,0.75,xsize=0.8,ysize=0.2,/normal tv, ospec, 0.1,0.52,xsize=0.8,ysize=0.2,/normal tv, hespec, 0.1,0.29,xsize=0.8,ysize=0.2,/normal tv, mspec, 0.1,0.17,xsize=0.8,ysize=0.1,/normal xyouts,0.05,0.96,'H+ from: '+cdfname+'.cdf ',/normal xyouts,0.05,0.73,'O+ plotted: '+systime(0),/normal xyouts,0.05,0.49,'He+ '+string(max_records+1)+' records',/normal xyouts,0.50,0.49,'VALIDATION not analysis type display' ; mspec labels for postscript output... not on x version! xyouts,0.05,0.17,'Fast',charsize=0.5,/normal xyouts,0.91,0.17,'Fast',charsize=0.5,/normal xyouts,0.91,0.1825,'N flag',charsize=0.5,/normal xyouts,0.05,0.1825,'N flag',charsize=0.5,/normal xyouts,0.05,0.195,'C flag',charsize=0.5,/normal xyouts,0.91,0.195,'C flag',charsize=0.5,/normal xyouts,0.91,0.2075,'A flag',charsize=0.5,/normal xyouts,0.05,0.2075,'A flag',charsize=0.5,/normal xyouts,0.05,0.22,'Measles',charsize=0.5,/normal xyouts,0.91,0.22,'Measles',charsize=0.5,/normal xyouts,0.91,0.2325,'Too Short',charsize=0.5,/normal xyouts,0.05,0.2325,'Too Short',charsize=0.5,/normal xyouts,0.05,0.245,'PA range',charsize=0.5,/normal xyouts,0.91,0.245,'PA range',charsize=0.5,/normal xyouts,0.91,0.2575,'OTHER',charsize=0.5,/normal xyouts,0.05,0.2575,'OTHER',charsize=0.5,/normal endif else begin wb_tbl ; THIS IS COLOR table the gif file gets tv, rebin(spec,(max_records+1),60),0.1,0.75,/normal tv, rebin(ospec,(max_records+1),60),0.1,0.52,/normal tv, rebin(hespec,(max_records+1),60),0.1,0.29,/normal tv, rebin(mspec,(max_records+1),32),0.1,0.17,/normal xyouts,0.05,0.96,'H+ from: '+cdfname+'.cdf ',/normal xyouts,0.05,0.73,'O+ plotted: '+systime(0),/normal xyouts,0.05,0.49,'He+ '+string(max_records+1)+' records',/normal xyouts,0.50,0.49,'VALIDATION not analysis type display',/normal ; for mspec only in ps... endelse ; now do a color bar num_colors=!D.N_colors color_bar = bytarr(1, num_colors, /nozero) color_bar(0, *) = fix(findgen(num_colors)) cdf_close,cdfid ; close the cdf print, max_records+1,' Records read and plotted' if gif_or_no eq 'y' then begin write_gif, gif_name, TVRD() ; magic no? ; The function tvrd reads the x output dev. ; write_gif puts it and the color bar out. print, 'making the gif file: ',gif_name endif if ps_or_x eq 'ps' then begin device,/close_file set_plot,'x' ; reset the retain device,retain=1 loadct,0 ; back to b/w sdt display print, 'ENTER ' print, ' $lp -d lps17_ps ',cdfname+'.ps ' print, 'TO PRINT' endif else begin print, 'loadct,13 for a colorful display' print, 'loadct,0 for normal display' print, 'wb_tbl, or bw_tbl are also possible' device,retain=1 ; reset the retain endelse !P.Multi=[0,0,0,1,0] !P.PSYM=0 end