; ; N07_TIME_PUBLIC_RAW.PRO Matthew DeLand 04/07/08 ; ; Plot time series of Nimbus-7 SBUV irradiance data at any wavelength, using ; 1 nm averaged data as input ; ;## 02/13/07 Created NOAA-9 version ; ;## 04/04/08 *_RAW.PRO works with uncorrected NOAA-9 data on instrument ;## wavelength scale ; ;## 04/07/08 Created Nimbus-7 version ; PROG_NAME = 'n07_time_public_raw.pro' ; PRINT, 'This program plots a time series of Nimbus-7 SBUV continuous scan ' PRINT, ' solar irradiance data centered on any wavelength between 170-400 nm,' PRINT, ' and normalized to the start of the data set. 5 instrument sampling ' PRINT, ' bins are averaged.' ; ; Load all DATA; Irradiances available for 2116 days from 1978/312 - 1986/301 ; (8 Nov 1978 - 28 Oct 1986), with some data gaps; Wavelength coverage is ; 170-400 nm, with approximate 0.20 nm intervals ; ;## 04/07/08 Use uncorrected data with full instrument resolution ; OPENR, UNIT1, '~/solar/data/n07_dates_daily_raw.unf', /get_lun INFO1 = fstat(UNIT1) & N_DY = INFO1.size / (3*4) YR = FLTARR(N_DY) & DY = YR & DNUM = YR READU, UNIT1, YR READU, UNIT1, DY READU, UNIT1, DNUM ; OPENR, UNIT2, '~/solar/data/n07_wvscl.unf', /get_lun INFO2 = fstat(UNIT2) & N_WV = INFO2.size / 4 WV_REF = FLTARR(N_WV) READU, UNIT2, WV_REF ; OPENR, UNIT3, '~/solar/data/n07_spec_daily_raw.unf', /get_lun IRRAD_INP = FLTARR(N_WV,N_DY) READU, UNIT3, IRRAD_INP IRRAD_ALL = transpose(IRRAD_INP) ; ; Select wavelength range & extract valid data; Use loop to allow repeats ; ;## 04/04/08 With full resolution data, get nominal central wavelength, get ;## closest match, then identify subscripts for 5-bin average ; STR_NEXT = ' ' WHILE (STR_NEXT NE 'N') DO BEGIN PRINT, ' ' READ, '@@@ Specify central WAVELENGTH to use (e.g. 205.0) ? ', WV_INP PRINT, ' ' READ, '%% Enter number of days for SMOOTHING function '+$ '(no smoothing = 1) ? ', N_SMTH STR_SMTH = STRTRIM(STRING(format='(I2)', fix(N_SMTH)), 2) ; WV_DIFF = abs(WV_REF - WV_INP) SUB_WV = where(min(WV_DIFF) EQ WV_DIFF) SUB_WV_TIME = INDGEN(5) + (SUB_WV(0)-2) WV_CENT = WV_REF(SUB_WV(0)) STR_WV_CENT = STRING(format='(F6.2)', WV_CENT) ; IRRAD_AVG = FLTARR(N_DY) FOR I = 0, N_DY-1 DO BEGIN DUM_IRRAD = IRRAD_ALL(I, SUB_WV_TIME) SUB_DAY = where((DUM_IRRAD GT 0.0), n_day) IF (N_DAY GT 0) THEN BEGIN IRRAD_AVG(I) = total(DUM_IRRAD(SUB_DAY)) / N_DAY ENDIF ELSE BEGIN IRRAD_AVG(I) = -999.0 ENDELSE ENDFOR ; ; Screen out dates with no good irradiance values, then apply smoothing if ; desired ; SUB_GOOD = where((IRRAD_AVG GT 0.0), n_good) IRRAD_GOOD = IRRAD_AVG(SUB_GOOD) DNUM_GOOD = DNUM(SUB_GOOD) ; IF (N_SMTH GT 1) THEN BEGIN IRRAD_SMTH = smooth(IRRAD_GOOD, N_SMTH) ENDIF ELSE BEGIN IRRAD_SMTH = IRRAD_GOOD ENDELSE ; ; Remove any unsmoothed data points, then normalize to first remaining date; ; Create approximate fractional time for plotting ; IF (N_SMTH GT 1) THEN BEGIN S1 = fix(N_SMTH+1)/2 & S2 = N_GOOD-(S1+1) ENDIF ELSE BEGIN S1 = 0 & S2 = N_GOOD-1 ENDELSE ; IRRAD_SMTH_PLOT = IRRAD_SMTH(S1:S2) IRRAD_NORM = IRRAD_SMTH_PLOT/IRRAD_SMTH_PLOT(0) PLOT_TIME = 1978.0 + (DNUM_GOOD(S1:S2)/365.25) ; ; PLOTTING SECTION ; **************** ; !P.CHARSIZE = 1.2 !X.TITLE = '!6DATE' !Y.TITLE = '!6NORMALIZED Irradiance' !P.TITLE = '!6Nimbus-7 SBUV !18RAW!6 Time Series: !8'+STR_WV_CENT+' nm!6' ; PRINT, ' ' PRINT, '%% Specify NORMALIZED Y-axis minimum, maximum, # of major & '+$ 'minor ticks' READ, '%% [e.g. 0.96,1.12,8,4] ? ', Y_MIN, Y_MAX, Y_MAJOR, Y_MINOR ; ; Create plot, then ask for new plot if desired ; PLOT, PLOT_TIME, IRRAD_NORM, /nodata, /xstyle, xrange=[1978,1987], $ xticks=09, xminor=4, /ystyle, yrange=[Y_MIN,Y_MAX], yticks=Y_MAJOR, $ yminor=Y_MINOR PLOTS, [1978.0,1987.0], [1.0,1.0], lines=2 OPLOT, PLOT_TIME, IRRAD_NORM ; IF (N_SMTH GT 1) THEN BEGIN XYOUTS, 0.85, 0.85, /norm, '!5'+STR_SMTH+' day running average!6', $ chars=1.1, align=1.0 ENDIF ; PRINT, ' ' READ, '%%% Another plot [Y/N] ? ', STR_NEXT STR_NEXT = STRUPCASE(STR_NEXT) ENDWHILE ; CLOSE, /all END