13 _RCFFileName = Filename;
19 string temp = _RCFFileName;
20 size_t last_slash = temp.find_last_of(
"/");
21 size_t last_dot = temp.find_last_of(
".");
22 _RCFId = temp.substr(last_slash+1, last_dot-last_slash-1);
26 ifstream file (_RCFFileName.c_str(), ios::in|ios::binary);
31 file.seekg (0, ios::beg);
32 file.read (RcfHdr.
Array, size);
36 cout <<
"In: RetrievalCoefficientFile Constructor:\n";
37 cout <<
"ERROR!: Reading Header only " <<file.gcount()
38 <<
" bytes were read.\n";
39 cout <<
"From RCF file:"<<_RCFFileName.c_str()<<
"\n\n";
42 file.seekg ((-2*
sizeof(
float)),ios::cur);
48 cout <<
"In: RetrievalCoefficientFile Constructor:\n";
49 cout <<
" ERROR!: only " <<file.gcount()<<
" bytes were read.\n";
50 cout <<
" From Flight Level #:" << i <<
"\n";
51 cout <<
" From RCF file:"<<_RCFFileName.c_str()<<
"\n\n";
53 FlUn2FlRcSet(RcFlUn, &FlRcSet);
54 flightLevelRCInfoVec.push_back(RcFlUn);
55 _FlRcSetVec.push_back(FlRcSet);
56 if (i+1 == RcfHdr.
Rcf_Hdr.
NFL) _FlRcSetVec.push_back(FlRcSet);
59 _FlRcSetVec.pop_back();
90 strncpy(_RCFHdr.SURC, EH.EH.SURC, 4);
91 _RCFHdr.RAOBbias=EH.EH.RAOBbias;
92 _RCFHdr.CH1LSBloss=EH.EH.CH1LSBloss;
95 for (
int i=0; i<450;i++) {
96 _RCFHdr.SmatrixN1[x][y][z] = EH.EH.Gmatrix[i];
124 for (
int i=450; i<900;i++) {
125 _RCFHdr.SmatrixN2[x][y][z] = EH.EH.Gmatrix[i];
146 else cout <<
"Unable to open file";
155 _RCFFileName = std::string();
156 _RCFId = std::string();
161 if (_RCFFileName.size() == 0)
return false;
174 std::vector<int>::size_type sz = _FlRcSetVec.size();
175 if (PAltKm >= _RCFHdr.Zr[0])
179 RcSetAvWt.
MBTAvg[i] = _FlRcSetVec.begin()->MBTAvg[i];
180 RcSetAvWt.
MBTRms[i] = _FlRcSetVec.begin()->MBTRms[i];
183 RcSetAvWt.
RC[j][i] = _FlRcSetVec.begin()->RC[j][i];
188 if (PAltKm <= _RCFHdr.Zr[_RCFHdr.NFL-1])
192 RcSetAvWt.
MBTAvg[i] = _FlRcSetVec.end()->MBTAvg[i];
193 RcSetAvWt.
MBTRms[i] = _FlRcSetVec.end()->MBTRms[i];
196 RcSetAvWt.
RC[j][i] = _FlRcSetVec.end()->RC[j][i];
204 vector<RC_Set_1FL>::const_iterator it, Botit, Topit;
207 for(it=_FlRcSetVec.begin(); it!=_FlRcSetVec.end(); it+=1)
209 if (PAltKm <= _RCFHdr.Zr[i] and PAltKm >= _RCFHdr.Zr[i+1])
211 BotWt = 1-((PAltKm-_RCFHdr.Zr[i+1])/(_RCFHdr.Zr[i]-_RCFHdr.Zr[i+1]));
221 RcSetAvWt.
Palt = Botit->Palt*BotWt + Topit->Palt*TopWt;
224 RcSetAvWt.
MBTRms[i] = Botit->MBTRms[i]*BotWt + Topit->MBTRms[i]*TopWt;
225 RcSetAvWt.
MBTAvg[i] = Botit->MBTAvg[i]*BotWt + Topit->MBTAvg[i]*TopWt;
228 RcSetAvWt.
PAltRl[j] = Botit->PAltRl[j]*BotWt + Topit->PAltRl[j]*TopWt;
229 RcSetAvWt.
TAvgRl[j] = Botit->TAvgRl[j]*BotWt + Topit->TAvgRl[j]*TopWt;
230 RcSetAvWt.
TVarRl[j] = Botit->TVarRl[j]*BotWt + Topit->TVarRl[j]*TopWt;
231 RcSetAvWt.
TRmsRl[j] = Botit->TRmsRl[j]*BotWt + Topit->TRmsRl[j]*TopWt;
233 RcSetAvWt.
RC[j][i] = Botit->RC[j][i]*BotWt + Topit->RC[j][i]*(1-BotWt);
244 if (Len != _RCFHdr.NFL)
246 cout<<
"In "<< __func__ <<
" for RCFID: " << getId() <<
"\n";
247 cout<<
"ERROR:Number of flight levels input:";
249 cout<<
" is not equal to number in RCF:";
254 for (
int i = 0; i<Len; i++)
256 if ((i+1<Len) && (FlightLevels[i] <= FlightLevels[i+1]))
258 cout<<
"In "<< __func__ <<
" for RCFID: " << getId() <<
"\n";
259 cout<<
"ERROR: Flight Levels are not in decreasing altitude\n";
262 _RCFHdr.Zr[i] = FlightLevels[i];
285 for (
int i=0; i<990; i++) {
288 if (x>=NUM_RETR_LVLS) { x=0; y++; }
char Array[sizeof(END_HDR)]
float MBTAvg[NUM_BRT_TEMPS]
Model Brightness Temperature Averages.
This class provides for reading in an RCF, storing and providing access to its data.
float TAvgRl[NUM_RETR_LVLS]
Average T at retrieval levels.
bool setFlightLevelsKm(float[], int)
float TRmsRl[NUM_RETR_LVLS]
Formal error in T at retrieval levels.
short Nret
Number of retrieval levels.
float RAOBmin
Minimum acceptable RAOB altitude.
float sRMSa[NUM_RETR_LVLS]
Variance in T at retrieval levels.
float Src[990]
33 retrieval levels, 30 observables
float RC[NUM_RETR_LVLS][NUM_BRT_TEMPS]
Retrieval Coefficients.
float MBTRms[NUM_BRT_TEMPS]
1-sigma apriori Model Brightness Temp err
float sRTav[NUM_RETR_LVLS]
Average T at retrieval levels.
float sBP
Flight level pressure altitude (hPa)
float sBPrl[NUM_RETR_LVLS]
Pressure at retrieval levels.
float ExcessTamplitude
Random Excess Noise Level on Ground.
RetrievalCoefficientFile()
float LR1
LR above top of RAOB.
short Nobs
Number of observables.
char Array[sizeof(RC_FL_Read)]
#define NUM_RETR_LVLS
number of retrieval levels per flight level in RCFs
float TVarRl[NUM_RETR_LVLS]
Variance in T at retrieval levels.
float LR2
LR above break altitude.
RC_Set_1FL getRCAvgWt(float)
float Palt
Flight level pressure altitude (hPa)
float sOBrms[NUM_BRT_TEMPS]
1-sigma apriori observable errors
float sRMSe[NUM_RETR_LVLS]
Formal error in T at retrieval levels.
float zLRb
LR break altitude.
float sOBav[NUM_BRT_TEMPS]
Archive Average observables.
short NFL
Number of flight levels.
char Array[sizeof(RCF_HDR)]
float dZ[NUM_RETR_LVLS]
Retrieval offset levels wrt flight level.
float RecordStep
Record Step through available RAOBs.
float PAltRl[NUM_RETR_LVLS]
Pressure at retrieval levels.