! GOME_TO_EPIC.f90 ! ! FUNCTIONS: ! GOME_TO_EPIC CONVERT GOME RADIANCES TO EPIC FILTER RADIANCES ! !**************************************************************************** ! ! PROGRAM: GOME_TO_EPIC ! ! PURPOSE: CONVERT GOME RADIANCES TO EPIC FILTER RADIANCES ! PURPOSE: CALCULATE THE MAXIMUM BRIGHTNESS FROM GOME SPECTRA FOR EPIC BANDS. ! IMAXDATA= # OF ROWS ! INPUT: D:\DATA\GOME\MAX_MIN\cloud_rad_pix1259.dat ! OUTPUT D:\DATA\Gome_to_EPIC\GOME_TO_EPIC.DAT ! CALCULATES AVERAGE RADIANCE OVER THE BAND BY 2 METHODS ! 1. ARITHMETIC AVG. 2. INTEGRATED AVERAGE ! SUM/N MEAN ! ! NOTE: 605 NM RADIANCES ARE NOT CORRECT IN GOME DATA ! NOTE: 870 NM RADIANCES ARE SCALED FROM AVIRIS NO LONGER USED !**************************************************************************** program GOME_TO_EPIC implicit Real*8(A-H,L-Z) REAL*8 LAM(2750),RAD(2750),DLAM(10),LAMBDAX(10),LRANGE(10),MEAN_RAD(10),SRAD(10) REAL*8 MEAN(10),TRLAM(20), LSET(10,100), RSET(10,100), WIDTH(10), SHUTTER(10) REAL*8 ETAK(10), suprasil(10), filter(10), trnsx(10), stk(10), RATIO_GM_AV(3) ! AVRIS data no longer used REAL*8 AVIRIS_905(3), AVIRIS_8665(3), AVIRIS_8761(3), AVIRIS_870(3), AVIRIS_790(3), GOME_790(3) INTEGER JMAX(10) CHARACTER*18 LABEL ! WAVELENGTHS NM DATA LAMBDAX /317.5,325.,340.,388.,443. ,551.,680.,687.75, 764.0, 779.5/ ! Wavelengths (nm) DATA WIDTH /1., 1., 3.0, 3.0, 3.0, 3.0, 2.0, 0.8, 1.0, 2.0 / ! Filter Widths (nm) DATA IMAXDATA /2716/ ! # of GOME Wvl ! ========================= START NOT USED ===================== ! CLOUD LAND OCEAN DATA AVIRIS_905 /118.4643, 39.2438, 7.6538/ DATA AVIRIS_8665 /196.566, 78.3416, 15.3074/ DATA AVIRIS_8761 /190.8101, 75.7581, 14.5744/ DATA AVIRIS_790 /219.7232, 98.1301, 35.8068/ DATA GOME_790 /319.311, 91.3330, 49.7028/ ! ========================== END NOT USED ======================== LABEL = 'CLOUD LAND OCEAN' ! OPEN FILES FOR READ AND OUTPUT OPEN (UNIT=10 , FILE="cloud_rad_pix1259.dat", STATUS="OLD") ! CLOUD Max Rad OPEN (UNIT=11 , FILE="LAND_rad_pix1368.dat", STATUS="OLD") ! LAND OPEN (UNIT=12 , FILE="ocean_rad_pix1033.dat", STATUS="OLD") ! OCEAN Min Min_Rad_Fac=1. ! set to 1 only OPEN (UNIT=1 , FILE="GOME_TO_EPIC_6-11.DAT", STATUS="REPLACE") DO 1000 ICASE =1,3 IF (ICASE .EQ. 1) THEN WRITE(6,*)' '; WRITE(1,*)' '; WRITE(6,*)LABEL(1:5); WRITE(1,*)LABEL(1:5); READ(10,999) LAM(1), RAD(1), SZA READ(10,997)(LAM(I),RAD(I),I=2,IMAXDATA) ! READ GOME DATA CLOUD ENDIF IF (ICASE .EQ. 2) THEN WRITE(6,*)' '; WRITE(1,*)' ' WRITE(6,*)LABEL(7:10); WRITE(1,*)LABEL(7:10); READ(11,999) LAM(1), RAD(1), SZA READ(11,997)(LAM(I),RAD(I),I=2,IMAXDATA) ! READ GOME DATA LAND ENDIF IF (ICASE .EQ. 3) THEN WRITE(6,*)' '; WRITE(1,*)' ' WRITE(6,*)LABEL(13:18); WRITE(1,*)LABEL(13:18); READ(12,999) LAM(1), RAD(1), SZA READ(12,997)(LAM(I),RAD(I),I=2,IMAXDATA) ! READ GOME DATA OCEAN ENDIF 999 FORMAT(3F13.4) 997 FORMAT(2F13.4) ! AVIRIS_870 = 0.5*(AVIRIS_8665 + AVIRIS_8761) ! RATIO_GM_AV = GOME_790/AVIRIS_790 ! SORT GOME RADIANCES INTO EPIC FILTER BANDS ! ***************** SHOULD PUT IN FILTER FUNCTIONS BELOW ************************** Do I=1,10 I1 = 2*(I-1)+1; I2 = 2*I TRLAM(I1)=Lambdax(i)-0.5*Width(i) TRLAM(I2)=Lambdax(i)+0.5*Width(i) enddo write(6,*) TRLAM(19),TRLAM(20) DO K=1,10 J=0 DO I=1,IMAXDATA IF(LAM(I).GE. TRLAM(2*K-1) .AND. LAM(I).LE.TRLAM(2*K)) THEN J=J+1 LSET(K,J)=LAM(I) ! Kth filter Jth wvl in band RSET(K,J)=RAD(I) ! Kth filter Jth radiance in band JMAX(K)=J ! Last J index in Kth band END IF END DO ! WRITE(1,996)K, JMAX(K), LAMBDAX(K) ! WRITE(1,998)((LSET(K,J), RSET(K,J)), J=1,JMAX(K)) 996 FORMAT(2I5,F10.1) 998 FORMAT(2F13.4) END DO ! COMPUTE AVERAGE AND INTEGRATED MEAN DO 10 K=1,10 ! 10 WAVELENGTH BANDS RAD=0. IN=JMAX(K) DO J=1,JMAX(K) ! 1st to last wavelength in band LAM(J)=LSET(K,J) RAD(J)=RSET(K,J) ! WRITE(6,997)LAM(J),RAD(J) END DO DLAM(K)=LAM(2)-LAM(1) ! INTEGRATION STEP SIZE LRANGE(K)=LAM(IN)-LAM(1) ! BANDWIDTH FROM DATA SRAD(K)=SUM(RAD) ! SUM OF RADIANCES OVER BANDWIDTH MEAN_RAD(K)=(SRAD(K)-0.5*(RAD(1)+RAD(IN)))*DLAM(K)/LRANGE(K) ! INTEGRATED MEAN MEAN(K)=SRAD(K)/IN ! ARRITH. MEAN 10 CONTINUE ! OUTPUT RESULTS TO FILE ! WRITE(1,1996) ! WRITE(1,1997) (LAMBDAX(J),DLAM(J),LRANGE(J),MEAN_RAD(J),MEAN(J),J=1,10) 1997 FORMAT(5F10.3) 1996 FORMAT(1X, 3X,'LAMBDA',6X,'DLAM',6X,'RANGE',3X,'MEAN',6X,'SUM/N') ! EPIC CCD CAMERA PERFORAMNCE FROM LAANNY STERRITT'S MATHEMATICA PROGRAM ! sOULD ADD IN FILTER FUNCTIONS ! Boltzmann's constant, electron charge, Planck's constant, speed of light data bk,q,h,c /1.38e-16, 1.6e-19, 6.626e-34, 2.9979e14/ ! Pixel size, well depth, pixels in a row data dd,wc,npix1 /15.0e-4, 95.0e3, 2048.0 / ! readout amps, frame readout time, readout noise(electrons), ! detector temp. dark current(25C) data namp, tread, nr, td, xjd /2., 4., 10., 10., 25.e-12/ ! conversion gain(volts/electron), number of bits, nonuniformity(rms) ! field of view(radians), aperture (cm) data cg, bits, nu, fov, d0 / 3.e-6, 12., 0.001, & 0.62, 30.48/ ! beamsplitter transmission, filter transmission data tb, tf / 1.0, 0.60 / ! LAMBDAX /317.5,325.,340.,388.,443. ,551.,680.,687.75, 764.0, 779.5/ ! Wavelengths (nm) ! FILTER TRANSMISSION data filter /0.30, 0.30, 0.50, 0.60, 0.45, 0.65, 0.60, 0.65, 0.60, 0.75/ ! NM ! EXPOSURE TIME (SECONDS) DATA SHUTTER /1.29, 0.84, 0.126, 0.087, 0.052, 0.030, 0.036, 0.090, 0.095, 0.030/ ! SECONDS ! CCD QUANTUM EFFICIENCY data etak / 0.68, 0.77, 0.70, 0.75, 0.76, 0.82, 0.92, 0.97, 0.94, 0.93/ ! OTHER WAVELENGTH DEPENDENT TRANSMISSION FACTORS data trnsx / 0.9, 0.92, 0.90, 0.88, 0.87, 0.87, 0.92, 0.93, 0.93, 0.92/ ! SUPRASIL TRANSMISSION FACTORS (PER SURFACE) data suprasil /1.48274, 1.475, 1.47865, 1.47248, 1.471, & 1.46669, 1.460, 1.457, 1.460, 1.450/ ! Calculate Suprasil Transmission for I/O purposes. DO K=1,10 n=suprasil(k) stk(k)=1-((n-1.)/(n+1.))**2 end do WRITE(6,989) WRITE(6,990)(LAMBDAX(K), FILTER(K), SHUTTER(K), ETAK(K), WIDTH(K), & TRNSX(K), SUPRASIL(K), stk(k), K=1,10) WRITE(1,989) WRITE(1,990)(LAMBDAX(K), FILTER(K), SHUTTER(K), ETAK(K), WIDTH(K), & TRNSX(K), SUPRASIL(K), stk(k), K=1,10) 989 FORMAT(1X,'INPUT DATA',/,2X,' WVL ', 3X, 'FILTER', & 2X,' TIME',4X,'CCD QE', & 4X,'FWHM', 5X, 'OTHER', 3X, 'SUPRASIL', 2X,'SUPRASIL',/, & 3X,'(NM)', 7X, 'TRANS', 3X, '(SEC)', 2X,' ', & 3X,' NM', 6X, 'TRANS', 4X, 'INDEX', 3X,' TRANS') 990 FORMAT(8F9.3) pi=2.*dasin(1.d0) write(6,993) write(1,993) do 20 k=1,10 lambda=lambdax(k)/1.e3 ! Wavelength (um) dlambda=width(k)/1.e3 ! Bandwidth (um) radiance=mean_rad(k)/1.e4 ! Radiance (mW/(cm2 sr um)) radiance=radiance/Min_Rad_Fac ! Reduce visible to 5% refl ! relative to Ocean scene (see OPEN stmt) ti=shutter(k) ! Exposure time eta=ETAK(K) ! Quantum efficiency n=suprasil(k) ! Suprasil refractive index tf=filter(k) ! Filter transmission tx=trnsx(k) ! Other transmission fraction ad=dd*dd npix = npix1*npix1 ! Number of Pixels rate = npix/(namp*tread) ! Pixel rate (Hz) nd=2.**(-(20.-td)/8.)*((xjd*ad*ti)/q) ! Pixel dark charge adc=log(wc/nr)/log(2.) ! Desired quantization bits nadc=wc/(2**(bits)*dsqrt(12.d0)) ! Quantization noise, electrons fov=0.62*pi/180. ! field of view fl=dd*dsqrt(npix)/fov ! focal length fn=fl/d0 ! f/number blurr=2.44*lambda*fn ! Blurr circle to first null st=1.-((n-1.)/(n+1.))**2 ! Suprasil transmission per surface t0=tb*tf*tx*tx*st**6 ! System transmission ! Number of electrons from exposure npe=radiance*pi*t0/(4.*fn*fn)*ad*eta*ti*lambda/(h*c)*dlambda ! Signal to Noise Ratio snr=npe/dsqrt(nr*nr+nd+nadc*nadc+npe+(nu*npe)**2) ! Number of electrons in well with dark current charge=radiance*pi*t0/(4.*fn*fn)*lambda/(h*c)*dlambda*ti*ad*eta+nd tmax80 = ti*(0.8*wc/charge) ! Max exposure time to fill well to 80% write(6,995) k, lambdax(k), width(k), t0, radiance, npe, snr, & charge, ti, tmax80 write(1,995) k, lambdax(k), width(k), t0, radiance, npe, snr, & charge, ti, tmax80 993 format(1X, 'OUTPUT DATA',/,' k ',2x, 'WVL', 4x, ' FWHM', & 2x, ' TRANS ', 1x, 'radiance', & 4x, 'npe', 6x, 'SNR', 5x, 'charge', 2x, 'time' 2x, 'tmax80') 995 format(i2, 0pf8.1, 2f8.3, 1pe10.2, 0pf9.1, f9.2, f9.0, f6.3, f8.3 ) 994 format(1p5e11.3) 20 CONTINUE ! enddo index=k 1000 CONTINUE ! ENDDO INDEX=ICASE STOP end program GOME_TO_EPIC