; N07_TIME_PUBLIC.PRO Matthew DeLand 03/12/01 ; ; Plot time series of Nimbus-7 SBUV irradiance data at any wavelength, using ; 1 nm averaged data as input ; PROG_NAME = 'n07_time_public.pro' PRINT, 'This program plots a time series of Nimbus-7 SBUV continuous scan ' PRINT, ' solar irradiance data averaged over any wavelength region between ' PRINT, ' 170-400 nm, and normalized to the start of the data set.' ; ; Load all DATA; Irradiances available for 2116 days from 1978/312 - 1986/301 ; ( 8 Nov 1978 - 28 Oct 1986); Wavelength coverage is 170.5-399.5 nm, with ; 1 nm intervals ; OPENR, UNIT1, 'n07_dates_daily.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, 'n07_spec_daily.unf', /get_lun IRRAD_INP = FLTARR(230,N_DY) READU, UNIT2, IRRAD_INP IRRAD_ALL = transpose(IRRAD_INP) ; ; Select wavelength range & extract valid data; Use loop to allow repeats ; STR_NEXT = ' ' WHILE (STR_NEXT NE 'N') DO BEGIN PRINT, ' ' READ, '&&& Enter STARTING, ENDING wavelength to use [e.g. 200,208] ? ', $ WV_STRT, WV_END PRINT, ' ' READ, '%% Enter number of days for SMOOTHING function '+$ '(no smoothing = 1) ? ', N_SMTH STR_SMTH = STRTRIM(STRING(format='(I2)', fix(N_SMTH)), 2) ; ; Extract appropriate data & create average; Remember that averaged data are ; stored on 0.5 nm centers ; NUM_WV = fix(WV_END - WV_STRT) SUB_WV1 = fix(WV_STRT-170) SUB_WV2 = SUB_WV1 + (NUM_WV-1) ; IRRAD_AVG = FLTARR(N_DY) FOR I = 0, N_DY-1 DO BEGIN DUM_IRRAD = IRRAD_ALL(I, SUB_WV1:SUB_WV2) 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 ; 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 STR_WV1 = STRING(format='(I3)', fix(WV_STRT)) STR_WV2 = STRING(format='(I3)', fix(WV_END)) !X.TITLE = '!6DATE' !Y.TITLE = '!6NORMALIZED Irradiance' !P.TITLE = '!6Nimbus-7 SBUV Time Series: !8'+STR_WV1+'-'+STR_WV2+' nm!6' ; PRINT, ' ' READ, '%% Specify Y-axis minimum, maximum, # of major & minor ticks ? ',$ 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=9, 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.20, 0.20, /norm, '!5'+STR_SMTH+' day running avg.!6', chars=1.1 ENDIF ; PRINT, ' ' READ, '%%% Another plot (Y or N) ? ', STR_NEXT STR_NEXT = STRUPCASE(STR_NEXT) ENDWHILE ; CLOSE, /all END