This file structure applied to both observed radiance file and simulated radiance file.
A radiance file has both a header, which has summary information about the data, and a body,
which holds data itself.
A binary file can contain data for a list of radiance files, and the file structure we are talking about here refers to this kind of binary files.
If a binary files contains data for a list of radiance files, then headers are stacked in the front while
bodies are group at the end of this binary file.
LoadRadFile,nfilesRad,filesRad,Rad,Idtop
- nfilesRad I Number of radiance files to read
- filesRad I List of files of read
- Rad O Structure containing
- Idtop X Dummy (not needed here)
ReadRadHdr,
- TopId I Not used
- fileRad I Name of radiance file
- iu O Unit number
h1 - nMeasurData O Number of measuremnts in file
h2 - nchan O Number of channels
h6 - cfreq O Central frequencies
h7 - polar O Poalrizations
h5 - nqc O Size of QC
h3 - nPosScan O Number of scan positions
h4 == nScanLines ;; missing in description
ReadRad
- IdTop I Not used.
- iu I Unit number
- nprof I Number of profiles
- nchan I Number of channels
- nqc I Size of QC array
b12 - tb O TB array
b13 - qc O QC array
b11 - Angle O Viewing angle
b3 - RelAziAngle O Relative Azimuth Angle
b4 - SolZenAngle O Solar Zenith Angle
b1 - lat O Latitude
b2 - lon O Longitude
b5 - direc O Orbit mode
b6 - iscanPos O Scan position
b7 == iscanLine ;; missing in description
b8 - Year O Year
b9 - Day O Day
b10 - Time O Time
- nprofsEff O Efective number of profiles
Data structure:
Rad={ $
;----Header
nfilesRad: nfilesRad, $ ;Number of files
constants:
h1 nProf: nprof, $ ;Number of profiles
h2 nchan: nchan, $ ;Number of channels
h3 nPosScan: nPosScan, $ ;Number of scan positions
h4 nScanLines: nScanLines, $ ;Number of scan lines
h5 nqc: fltarr(nfilesRad), $ ;Size of QC vector
1-d: per channel
h6 Cfreq: cfreq (fltarr(nchan)) $ ;Central frequencies
h7 Polarity: polar (lonarr(nchan)) $ ;Polarizations
;; ---------------------------------------------------------------------------------------------
3-d: per file, per fov , per chan
b12 tb: fltarr(nfilesRad,nProf,nchan), $ ;Array of TBs
b11 Angle: fltarr(nfilesRad,nProf,nchan), $ ;Array of viewing angles
2-d: per file, per fov
b3 RelAziAngle: fltarr(nfilesRad,nProf), $ ;Array of relative azimuth angles
b4 SolZenAngle: fltarr(nfilesRad,nProf), $ ;Array of solar zenith angles
b1 Lat: fltarr(nfilesRad,nProf), $ ;Array of latitude
b2 Lon: fltarr(nfilesRad,nProf), $ ;Array of longitude
b5 Direc: intarr(nfilesRad,nProf), $ ;Array of orbit mode flags
b6 ScanPos: intarr(nfilesRad,nProf), $ ;Scan positions
b7 ScanLine: intarr(nfilesRad,nProf), $ ;Scan lines
b8 Year: lonarr(nfilesRad,nProf), $ ;Year
b9 Day: lonarr(nfilesRad,nProf), $ ;Day
b10 Time: fltarr(nfilesRad,nProf), $ ;UTC Time
Hours: fltarr(nfilesRad,nProf), $ ;Hours
Mins: fltarr(nfilesRad,nProf), $ ;Minutes
Secs: fltarr(nfilesRad,nProf), $ ;Seconds
b13 qc: intarr(nfilesRad,nProf,14) $ ;QC information
}
what is read in Header: (7)
constant:
nMeasurData
nchan
nPosScan
nScanLines
nqc
1-d : fltarr(nchan)
cfreq ; 1d(nchan)
polar ; 1d(nchan)
what is read in Body: (13)
1-d: lonarr(nprof)
1 lat
2 lon
3 raa
4 sza
5 direc
6 iscanPos
7 iscanLine
8 Year
9 Day
10 time
11 angle
2-d: fltarr(nprof,nchan)
12 tb : 2-d
13 qc : 2-d
2. Scene files: (EDR format)
readu order when reading scene data file:
header: 18 elements
iType
algSN
nProf
nLayer
nLevel
nChan
nPosScan
nScanLines
nAbsorb
0 nParmCLW
nParmRain
nParmSnow
nParmIce
nParmGrpl
absorbID
cFreq
polar
8 nQC
body: 28 + [7] ==> up to 35 elements
profIndx
presLayer
presLevel
tempLayer
absorbents
xCLW
xRain
xGrpl
emiss
0 angle
windSpeed
tSkin
sfcPressure
sfcType
windU
windV
RAA
SZA
snowDepth
0 QC
lat
lon
node
scanUTC
scanYear
scanDay
iScanPos
8 iScanLine
IF (Scene.iType eq 1) THEN BEGIN
nAtt
nIter
chiSquare
yFwd
chanSelected
ym
7 ymCorr
ENDIF
scene data structure:
Scene={ ;----Header algSN:algSN, readu,iu,algSN iTyp:iTyp, readu,iu,iTyp nProf:nPrf, readu,iu,nPrf nProfsProcessed:0L, not from scene file, Num of profs read successfully nLay:nLay, readu,iu,nLay nLev:nLev, readu,iu,nLev nChan:nChan, readu,iu,nChan nScanPos:nPosScan, readu,iu,nPosScan nScanLines:nScanLines, readu,iu,nScanLines nAbsorb:nAbsorb, readu,iu,nAbsorb nParmCLW:nParmCLW, readu,iu,nParmCLW nParmRain:nParmRain, readu,iu,nParmRain nParmSnow:nParmSnow, readu,iu,nParmSnow nParmIce:nParmIce, readu,iu,nParmIce nParmGrpl:nParmGrpl, readu,iu,nParmGrpl absorbID:absorbID2use4Declaration, A AbsorbID=lonarr(nAbsorb), readu,iu,absorbID cFreq:cFreq, A cfreq=fltarr(nChan), readu,iu,cFreq polarity:polar, A polar=lonarr(nChan), readu,iu,polar nQC:nQC, readu,iu,nQC declarN_Prf:nPrf, duplicate value nPrf ;----Body of Scene file ( all FOVs ) profIndxVec: intarr(nPrf), A readu,iu, profIndx PresLayVec: fltarr(nPrf,nLay), AA fltarr(Nlay), readu,iu, pressLay presLevVec: fltarr(nPrf,nLev), AA fltarr(nLev), readu,iu, pressLev tempLayVec: fltarr(nPrf,nLay), AA fltarr(Nlay), readu,iu, tempLay absorbLayVec: fltarr(nPrf,nLay,2), AA fltarr(nAbsorb), readu,iu,absorbents tpwVec: fltarr(nPrf), A DERIVED. !!! rhVec: fltarr(nPrf,nLay), A DERIVED. !!! clwLayVec: fltarr(nPrf,nParmCLW)AA fltarr(nParmCLW), readu,iu, xCLW clwVec: fltarr(nPrf), A DERIVED. !!! rwpVec: fltarr(nPrf), A DERIVED !!! iwpVec: fltarr(nPrf), A NOT SET !!! gwpVec: fltarr(nPrf), A DERIVED !!! swpVec: fltarr(nPrf), A NOT SET !!! rainLayVec: fltarr(nPrf,nParmRain),AA fltarr(nParmRain), readu,iu, xRain snowLayVec: fltarr(nPrf,nParmSnow),AA 0.0 (hard-coded) IceLayVec: fltarr(nPrf,nParmIce), AA 0.0 (hard-coded) grplLayVec: fltarr(nPrf,nParmGrpl),AA fltarr(Scene.nParmGrpl), readu,iu, xGrpl anglVec: fltarr(nPrf), A readu,iu, angl relAziAnglVec:fltarr(nPrf), A readu,iu, relAziAngl solZenAnglVec:fltarr(nPrf), A readu,iu, solZenAngl emissVec: fltarr(nPrf,nChan), AA fltarr(Scene.nchan), readu,iu, emiss reflVec: fltarr(nPrf,nChan), AA NOT SET !!! windSpVec: fltarr(nPrf), A readu,iu, windSp windUVec: fltarr(nPrf), A readu,iu, windU windVVec: fltarr(nPrf), A readu,iu, windV tskinVec: fltarr(nPrf), A readu,iu, tSkin snowDepthVec: fltarr(nPrf), A readu,iu, snowDepth sfcPressVec: fltarr(nPrf), A readu,iu, sfcPress sfcTypVec: intarr(nPrf), A readu,iu, sfcTyp QC: intarr(nPrf,nqc), AA intarr(Scene.nqc), readu,iu, qc lat: fltarr(nPrf), A readu,iu, lat lon: fltarr(nPrf), A readu,iu, lon direc: intarr(nPrf), A readu,iu, node (asc, desc) time: fltarr(nPrf), A readu,iu, scanUTC year: intarr(nPrf), A readu,iu, scanYear day: intarr(nPrf), A readu,iu, scanDay hours: fltarr(nPrf), DERIVED A fix(scanUTC/3600.) !!! mins: fltarr(nPrf), DERIVED A fix( ( time - fix(Hours) * 3600. )/60.) !!! secs: fltarr(nPrf), DERIVED A (Time - Hours*3600. - Mins*60.) !!! nAttempt: intarr(nPrf), COD A readu,iu, nAtt nIter: intarr(nPrf), COD A readu,iu, nIter chiSq: fltarr(nPrf), COD A readu,iu, chiSq yFwd: fltarr(nPrf,nChan),COD AA fltarr(Scene.nchan), readu,iu,yFwd chanSel: lonarr(nPrf,nChan),COD AA lonarr(Scene.nchan), readu,iu,chanSel ym: fltarr(nPrf,nChan),COD AA fltarr(Scene.nchan), readu,iu,ym ymCorr: fltarr(nPrf,nChan),cOD AA fltarr(Scene.nchan), readu,iu,ymCorr scanPos: lonarr(nPrf), A readu,iu, iScanPos scanLine: lonarr(nPrf) A readu,iu, iScanLine } NOTE: 1. Condition : COD COD: if Scene.iTyp eq 1 2. Derived data ;---compute TPW (1) ind = WHERE(scene.absorbLayVec(iprof,0:Scene.nLay-1,0) ge 0.,ncount) IF (ncount gt 0) THEN BEGIN presLevFiltered = FLTARR(nCount+1) presLevFiltered(0:nCount-1) = scene.presLevVec(iProf,ind) presLevFiltered(nCount) = scene.presLevVec(iProf,ind(nCount-1)+1) columIntegr_LayW, nCount, $ presLevFiltered, $ sfcPress, $ scene.absorbLayVec(iProf,ind,0), $ water scene.tpwVec(iprof) = water ; (derived 1) ENDIF ELSE BEGIN scene.tpwVec(iprof) = 0 ENDELSE ;---compute ozon amt ( NOT used ! ) IF (WHERE(scene.absorbID(0:scene.nAbsorb-1) EQ 3) GE 0) THEN BEGIN columIntegr_LayW, scene.nLay, $ scene.presLevVec(iProf,0:scene.nLev-1), $ sfcPress,$ scene.absorbLayVec(iProf,0:scene.nLay-1,1), $ ozon ; ( NOT USED ! ) ENDIF ;---compute hydrometeors integrated amounts columIntegr, scene.nParmCLW, $ scene.presLevVec(iProf,0:scene.nLev-1), $ sfcPress, $ scene.clwLayVec(iProf,0:scene.nParmCLW-1),$ clw scene.clwVec(iprof) = clw ; (derived 2) columIntegr, scene.nParmRain, $ scene.PresLevVec(iprof,0:Scene.nLev-1), $ sfcPress, $ Scene.RainLayVec(iprof,0:Scene.nParmRain-1), $ rwp scene.rwpVec(iprof) = rwp ; (derived 3) columIntegr, scene.nParmGrpl, $ scene.PresLevVec(iProf,0:scene.nLev-1), $ sfcPress,$ scene.GrplLayVec(iprof,0:Scene.nParmGrpl-1), $ gwp scene.gwpVec(iprof) = gwp ; (derived 4) ;---compute RH FOR iLay=0L,scene.nLay-1 DO BEGIN IF (scene.absorbLayVec(iProf,iLay,0) GT 0) THEN BEGIN T=scene.tempLayVec(iProf,iLay) P=scene.presLayVec(iProf,iLay) Q=scene.absorbLayVec(iProf,iLay,0)/1000. scene.rhVec(iProf,iLay) = mixingratio_to_RelHum(Q,T,P)*100. ; (derived 5) ENDIF ELSE BEGIN scene.rhVec(iprof,iLay) = -999. ENDELSE ENDFOR
No comments:
Post a Comment