29 #include <QtCore/QDateTime>
30 #include <QtCore/QDir>
31 #include <QtCore/QFile>
32 #include <QtCore/QFileInfo>
33 #include <QtCore/QRegExp>
34 #include <QtCore/QTextStream>
57 return "SgVdbVariable";
70 currentInstitution_(
""),
73 stdSubDir_(stdSubDir),
88 institution_(v.getInstitution()),
90 currentInstitution_(v.getCurrentInstitution()),
91 subDir_(v.getSubDir()),
92 fileName_(v.getFileName()),
93 stdSubDir_(v.stdSubDir_),
94 fileName4Output_(v.fileName4Output_)
115 str +=
"_V" + QString(
"").sprintf(
"%03d",
version_);
124 QStringList fields=str.split(
"_");
128 "::parseString(): the list of fields is empty, the string: [" + str +
"]");
131 stub_ = fields.at(0);
132 for (
int i=1; i<fields.size(); i++)
134 if (fields.at(i).left(1).contains(
"t", Qt::CaseInsensitive))
135 type_ = fields.at(i).mid(1);
136 else if (fields.at(i).left(1).contains(
"b", Qt::CaseInsensitive))
137 band_ = fields.at(i).mid(1);
138 else if (fields.at(i).left(1).contains(
"k", Qt::CaseInsensitive))
139 kind_ = fields.at(i).mid(1);
140 else if (fields.at(i).left(1).contains(
"i", Qt::CaseInsensitive))
142 else if (fields.at(i).left(1).contains(
"v", Qt::CaseInsensitive))
145 version_ = fields.at(i).mid(1).toInt(&isOk);
148 "::parseString(): cannot convert version to int: [" + fields.at(i).mid(1) +
"]");
152 "::parseString(): unparsed part of the name: [" + fields.at(i) +
"]");
161 return stub_.isEmpty();
168 const QString& aBand)
184 else if (aBand.size())
190 QString path2file(rootDir), baseStr(str), actualSubDir(
subDir_);
191 if (!actualSubDir.size())
196 if (actualSubDir.size())
199 path2file +=
"/" + actualSubDir;
210 if (!dir.mkpath(path2file))
212 "::name4export(): cannot create a path to the directory \"" + path2file +
"\"");
216 "::name4export(): a directory \"" + path2file +
"\" has been created");
219 QFile::Permissions perm=QFile::permissions(path2file);
220 if (!QFile::setPermissions(path2file, perm | QFile::WriteGroup | QFile::ExeGroup))
222 "::name4export(): cannot change permissions of the directory \"" + path2file +
"\"");
229 while (QFile(path2file + str +
".nc").exists() && n<1000000)
230 str.sprintf(
"%s_V%03d", qPrintable(baseStr), ++n);
262 vTimeUTC_(
"TimeUTC",
""),
265 vFeedRotation_(
"FeedRotation",
""),
266 vCal_AxisOffset_(
"Cal-AxisOffset",
""),
267 vCal_Cable_(
"Cal-Cable",
""),
268 vCal_CableCorrections_(
"Cal-CableCorrections",
""),
269 vCal_CblCorrections_(
"Cal-CblCorrections",
""),
270 vCal_SlantPathTropDry_(
"Cal-SlantPathTropDry",
""),
271 vCal_SlantPathTropWet_(
"Cal-SlantPathTropWet",
""),
272 vCal_OceanLoad_(
"Cal-StationOceanLoad",
""),
273 vPart_AxisOffset_(
"Part-AxisOffset",
""),
274 vPart_ZenithPathTropDry_(
"Part-ZenithPathTropDry",
""),
275 vPart_ZenithPathTropWet_(
"Part-ZenithPathTropWet",
""),
276 vPart_HorizonGrad_(
"Part-HorizonGrad",
""),
277 vDis_OceanLoad_(
"Dis-OceanLoad",
""),
278 vRefClockOffset_(
"RefClockOffset",
""),
289 vTimeUTC_.setSubDir(stationKey_);
290 vMet_.setSubDir(stationKey_);
291 vAzEl_.setSubDir(stationKey_);
292 vFeedRotation_.setSubDir(stationKey_);
293 vCal_AxisOffset_.setSubDir(stationKey_);
294 vCal_Cable_.setSubDir(stationKey_);
295 vCal_CableCorrections_.setSubDir(stationKey_);
296 vCal_CblCorrections_.setSubDir(stationKey_);
297 vCal_SlantPathTropDry_.setSubDir(stationKey_);
298 vCal_SlantPathTropWet_.setSubDir(stationKey_);
300 vPart_AxisOffset_.setSubDir(stationKey_);
301 vPart_ZenithPathTropDry_.setSubDir(stationKey_);
302 vPart_ZenithPathTropWet_.setSubDir(stationKey_);
303 vPart_HorizonGrad_.setSubDir(stationKey_);
304 vDis_OceanLoad_.setSubDir(stationKey_);
305 vRefClockOffset_.setSubDir(stationKey_);
306 vTsys_.setSubDir(stationKey_);
314 epochOfCreation_(
tZero),
316 defaultDir_(
"History"),
317 historyFileName_(
""),
318 inputWrapperFileName_(
""),
337 programName_(
"Solve"),
339 vCalcInfo_(
"CalcInfo",
"Solve"),
340 vCalibrationSetup_(
"CalibrationSetup",
"Solve"),
341 vAtmSetup_(
"AtmSetup",
"Solve"),
342 vClockSetup_(
"ClockSetup",
"Solve"),
343 vErpSetup_(
"ERPSetup",
"Solve"),
344 vIonoSetup_(
"IonoSetup",
"Solve"),
345 vCalcErp_(
"CalcERP",
"Solve"),
346 vBaselineClockSetup_(
"BaselineClockSetup",
"Solve"),
347 vSelectionStatus_(
"SelectionStatus",
"Solve"),
349 vScanTimeMJD_(
"ScanTimeMJD",
"Solve"),
351 vIonoBits_(
"IonoBits",
"Solve"),
352 vFractC_(
"FractC",
"Solve"),
353 vUnPhaseCalFlag_(
"UnPhaseCalFlag",
"Solve"),
354 vUserSup_(
"UserSup",
"Solve"),
368 for (
int i=0; i<vdbVars_.size(); i++)
369 if (!vdbVars_.at(i)->isEmpty())
380 vChannelInfo_ (
"ChannelInfo",
"Observables"),
381 vPhaseCalInfo_ (
"PhaseCalInfo",
"Observables"),
382 vCorrInfo_ (
"CorrInfo",
"Observables"),
383 vQualityCode_ (
"QualityCode",
"Observables"),
384 vRefFreq_ (
"RefFreq",
"Observables"),
385 vAmbigSize_ (
"AmbigSize",
"Observables"),
386 vSNR_ (
"SNR",
"Observables"),
387 vCorrelation_ (
"Correlation",
"Observables"),
388 vPhase_ (
"Phase",
"Observables"),
389 vSBDelay_ (
"SBDelay",
"Observables"),
390 vGroupDelay_ (
"GroupDelay",
"Observables"),
391 vGroupRate_ (
"GroupRate",
"Observables"),
392 vDelayDataFlag_ (
"DelayDataFlag",
"Observables"),
393 vDataFlag_ (
"DataFlag",
"Observables"),
396 vPhaseDelayFull_ (
"PhaseDelayFull",
"ObsEdit"),
397 vUVFperAsec_ (
"UVFperAsec",
"ObsDerived"),
398 vEffFreq_EqWt_ (
"EffFreq_kEqWt",
"ObsDerived"),
399 vEffFreq_ (
"EffFreq",
"ObsDerived"),
400 vCal_SlantPathIonoGroup_(
"Cal-SlantPathIonoGroup",
"ObsDerived"),
403 vCal_Unphase_ (
"Cal-Unphase",
"ObsCalTheo"),
405 vNumGroupAmbig_ (
"NumGroupAmbig",
"ObsEdit"),
406 vNumPhaseAmbig_ (
"NumPhaseAmbig",
"ObsEdit"),
407 vGroupDelayFull_ (
"GroupDelayFull",
"ObsEdit"),
548 "::init(): the wrapper file [" + f.fileName() +
"] does not exist");
552 int numOfParsedStrings;
553 bool isHistoryBlockParsed, isSessionBlockParsed,
554 isScanBlockParsed, isObservationBlockParsed;
555 isHistoryBlockParsed = isSessionBlockParsed = isScanBlockParsed = isObservationBlockParsed =
false;
556 numOfParsedStrings = 0;
560 if (f.open(QFile::ReadOnly))
566 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
568 if (numOfParsedStrings==0 && str.contains(
"VERSION", Qt::CaseInsensitive))
575 "::init(): the input wrapper file contains a version (" +
593 else if (!isHistoryBlockParsed && str.contains(
"Begin History", Qt::CaseInsensitive))
596 isHistoryBlockParsed =
true;
598 else if (!isSessionBlockParsed && str.contains(
"Begin Session", Qt::CaseInsensitive))
601 isSessionBlockParsed =
true;
603 else if (str.contains(
"Begin Station", Qt::CaseInsensitive))
607 else if (!isScanBlockParsed && str.contains(
"Begin Scan", Qt::CaseInsensitive))
610 isScanBlockParsed =
true;
612 else if (!isObservationBlockParsed && str.contains(
"Begin Observation", Qt::CaseInsensitive))
615 isObservationBlockParsed =
true;
617 else if (str.contains(
"Begin Program", Qt::CaseInsensitive))
624 "::init(): got an unexpected string in the wrapper file: [" + str +
626 numOfParsedStrings++;
634 QDateTime dateTime(fi.created());
636 dateTime.time().hour(), dateTime.time().minute(),
637 dateTime.time().second()+dateTime.time().msec()*0.001);
642 "::init(): cannot open the wrapper file [" + f.fileName() +
"] for read access");
647 "::init(): parsed " + QString(
"").setNum(numOfParsedStrings) +
648 " strings from the wrapper file [" + f.fileName() +
"]");
666 "::init(): no data provided for the Quality Code on the secondary band of " +
670 "::init(): no data provided for the Ambiguity Size on the secondary band of " +
674 "::init(): no data provided for the Group Delay Rate on the secondary band of " +
684 "::init(): no data provided for the Single Band Delay on the secondary band of " +
705 QMap<QString, SgVlbiObservation*>
718 if (!obsByScan.contains(obs->
getScanId()))
743 QString key=stn->
getKey();
744 key = key.simplified();
745 key.replace(
' ',
'_');
771 for (QMap<QString, SgVlbiBand*>::iterator it=session->
bandByKey().begin();
796 QRegExp reFmtVer(
"^VERSION\\s+([+-\\.\\d]+)\\s+(\\d{4}\\w{3}\\d{2})\\s*",
797 Qt::CaseInsensitive);
799 if (reFmtVer.indexIn(str) != -1)
801 double d=reFmtVer.cap(1).toDouble(&isOk);
815 "::parseVersionBlock(): cannot get an epoch from VERSION string: [" + str +
"]");
819 "::parseVersionBlock(): cannot convert value to double from VERSION string: [" + str +
"]");
823 "::parseVersionBlock(): got an unexpected VERSION string: [" + str +
"]");
835 const QString eob(
"End History");
836 QString bosb(
"Begin Program");
840 bosb =
"Begin Process";
842 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
845 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
847 if (str.contains(bosb, Qt::CaseInsensitive))
851 else if (str.contains(eob, Qt::CaseInsensitive))
856 "::parseHistoryBlock(): got an unknown string in the history block of wrapper file: [" +
872 QString eosb(
"End Program");
873 QString str, subDir(
""), key(progName);
876 eosb =
"End Process";
881 while (!str.contains(eosb, Qt::CaseInsensitive) && !s.atEnd())
884 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
886 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
889 subDir = str.mid(12);
893 else if (str.contains(
"RunTimeTag", Qt::CaseInsensitive))
898 str = str.mid(11).simplified();
899 if (str.endsWith(
"UTC"))
906 "::parseHistoryProcessSubBlock(): cannot get proper creation epoch: [" +
912 else if (str.contains(
"Createdby ", Qt::CaseInsensitive))
918 else if (str.contains(
"History ", Qt::CaseInsensitive))
925 else if (str.contains(
"InputWrapper ", Qt::CaseInsensitive))
931 else if (str.contains(
"Version", Qt::CaseInsensitive))
935 hd.
version_ = str.mid(8).simplified();
937 if (hd.
version_.contains(
"Mixed", Qt::CaseInsensitive))
940 else if (str.contains(eosb, Qt::CaseInsensitive))
945 "::parseHistoryProcessSubBlock(): got an unknown string in "
946 "the history block of wrapper file: [" + str +
"]; skipped");
948 std::cout <<
" Fix me: HISTORY need to add a parser for the string [" << qPrintable(str) <<
"]\n";
963 const QString eob(
"End Session");
964 QString str, subDir(
"");
965 QString bandKey(
""), bKey(
"");
967 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
971 bKey = bandKey==
""?
"X":bandKey;
973 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
975 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
978 subDir = str.mid(12);
981 else if (str.contains(
"Session ", Qt::CaseInsensitive))
987 else if (str.contains(
"AltSessionId ", Qt::CaseInsensitive))
993 else if ( str.contains(
"Head", Qt::CaseInsensitive) &&
994 str.contains(
".nc", Qt::CaseInsensitive))
996 else if ( str.contains(
"GroupBLWeights", Qt::CaseInsensitive) &&
997 str.contains(
".nc", Qt::CaseInsensitive))
999 else if ( str.contains(
"ClockBreak", Qt::CaseInsensitive) &&
1000 str.contains(
".nc", Qt::CaseInsensitive))
1002 else if ( str.contains(
"LeapSecond", Qt::CaseInsensitive) &&
1003 str.contains(
".nc", Qt::CaseInsensitive))
1005 else if ( str.contains(
"MiscFourFit", Qt::CaseInsensitive) &&
1006 str.contains(
"_b", Qt::CaseInsensitive) &&
1007 str.contains(
".nc", Qt::CaseInsensitive))
1009 else if ( str.contains(
"MiscFourFit", Qt::CaseInsensitive) &&
1010 str.contains(
".nc", Qt::CaseInsensitive))
1012 else if ( str.contains(
"MiscCable", Qt::CaseInsensitive) &&
1013 str.contains(
".nc", Qt::CaseInsensitive))
1015 else if ( str.contains(
"StationCrossRef", Qt::CaseInsensitive) &&
1016 str.contains(
".nc", Qt::CaseInsensitive))
1018 else if ( str.contains(
"BaselineClockSetup", Qt::CaseInsensitive) &&
1019 str.contains(
".nc", Qt::CaseInsensitive))
1021 else if ( str.contains(
"ClockSetup", Qt::CaseInsensitive) &&
1022 str.contains(
".nc", Qt::CaseInsensitive))
1024 else if ( str.contains(
"Station", Qt::CaseInsensitive) &&
1025 str.contains(
".nc", Qt::CaseInsensitive))
1027 else if ( str.contains(
"SourceCrossRef", Qt::CaseInsensitive) &&
1028 str.contains(
".nc", Qt::CaseInsensitive))
1030 else if ( str.contains(
"Source", Qt::CaseInsensitive) &&
1031 str.contains(
".nc", Qt::CaseInsensitive))
1033 else if ( str.contains(
"Clock", Qt::CaseInsensitive) &&
1034 str.contains(
".nc", Qt::CaseInsensitive))
1036 else if ( str.contains(
"Eccentricity", Qt::CaseInsensitive) &&
1037 str.contains(
".nc", Qt::CaseInsensitive))
1039 else if ( str.contains(
"Antenna", Qt::CaseInsensitive) &&
1040 str.contains(
".nc", Qt::CaseInsensitive))
1042 else if ( str.contains(
"CalcInfo", Qt::CaseInsensitive) &&
1043 str.contains(
".nc", Qt::CaseInsensitive))
1045 else if ( str.contains(
"CalcErp", Qt::CaseInsensitive) &&
1046 str.contains(
".nc", Qt::CaseInsensitive))
1048 else if ( str.contains(
"AtmSetup", Qt::CaseInsensitive) &&
1049 str.contains(
".nc", Qt::CaseInsensitive))
1051 else if ( str.contains(
"ErpSetup", Qt::CaseInsensitive) &&
1052 str.contains(
".nc", Qt::CaseInsensitive))
1054 else if ( str.contains(
"CalibrationSetup", Qt::CaseInsensitive) &&
1055 str.contains(
".nc", Qt::CaseInsensitive))
1057 else if ( str.contains(
"IonoSetup", Qt::CaseInsensitive) &&
1058 str.contains(
".nc", Qt::CaseInsensitive))
1060 else if ( str.contains(
"SelectionStatus", Qt::CaseInsensitive) &&
1061 str.contains(
".nc", Qt::CaseInsensitive))
1064 else if ( str.contains(
"PhaseBLWeights", Qt::CaseInsensitive))
1067 else if (str.contains(eob, Qt::CaseInsensitive))
1072 "::parseSessionBlock(): got an unexpected string in the session block of wrapper file: [" +
1073 str +
"]; skipped");
1075 std::cout <<
" Fix me: SESSION need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1096 const QString eob(
"End Station");
1097 QString str, subDir(
""), key;
1108 "::parseStationBlock(): got a duplicate of the station [" + stnName +
"]; skipped");
1109 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1118 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1121 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
1123 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1126 subDir = str.mid(12);
1129 else if ( str.contains(
"TimeUTC", Qt::CaseInsensitive) &&
1130 str.contains(
".nc", Qt::CaseInsensitive))
1132 else if ( str.contains(
"Met", Qt::CaseInsensitive) &&
1133 str.contains(
".nc", Qt::CaseInsensitive))
1135 else if ( str.contains(
"AzEl", Qt::CaseInsensitive) &&
1136 str.contains(
".nc", Qt::CaseInsensitive))
1138 else if ( str.contains(
"FeedRotation", Qt::CaseInsensitive) &&
1139 str.contains(
".nc", Qt::CaseInsensitive))
1141 else if ( str.contains(
"Cal-AxisOffset", Qt::CaseInsensitive) &&
1142 str.contains(
".nc", Qt::CaseInsensitive))
1144 else if ( str.contains(
"Cal-CableCorrections", Qt::CaseInsensitive) &&
1145 str.contains(
".nc", Qt::CaseInsensitive))
1147 else if ( str.contains(
"Cal-CblCorrections", Qt::CaseInsensitive) &&
1148 str.contains(
".nc", Qt::CaseInsensitive))
1150 else if ( str.contains(
"Cal-Cable", Qt::CaseInsensitive) &&
1151 str.contains(
".nc", Qt::CaseInsensitive))
1153 else if ( str.contains(
"Cal-SlantPathTropDry", Qt::CaseInsensitive) &&
1154 str.contains(
".nc", Qt::CaseInsensitive))
1156 else if ( str.contains(
"Cal-SlantPathTropWet", Qt::CaseInsensitive) &&
1157 str.contains(
".nc", Qt::CaseInsensitive))
1159 else if ( str.contains(
"Cal-StationOceanLoad", Qt::CaseInsensitive) &&
1160 str.contains(
".nc", Qt::CaseInsensitive))
1162 else if ( str.contains(
"Part-AxisOffset", Qt::CaseInsensitive) &&
1163 str.contains(
".nc", Qt::CaseInsensitive))
1165 else if ( str.contains(
"Part-ZenithPathTropDry", Qt::CaseInsensitive) &&
1166 str.contains(
".nc", Qt::CaseInsensitive))
1168 else if ( str.contains(
"Part-ZenithPathTropWet", Qt::CaseInsensitive) &&
1169 str.contains(
".nc", Qt::CaseInsensitive))
1171 else if ( str.contains(
"Part-HorizonGrad", Qt::CaseInsensitive) &&
1172 str.contains(
".nc", Qt::CaseInsensitive))
1174 else if ( str.contains(
"Dis-OceanLoad", Qt::CaseInsensitive) &&
1175 str.contains(
".nc", Qt::CaseInsensitive))
1178 else if ( str.contains(
"RefClockOffset", Qt::CaseInsensitive) &&
1179 str.contains(
".nc", Qt::CaseInsensitive))
1182 else if ( str.contains(
"Tsys", Qt::CaseInsensitive) &&
1183 str.contains(
".nc", Qt::CaseInsensitive))
1186 else if (str.contains(eob, Qt::CaseInsensitive))
1191 "::parseStationBlock(): got an unknown string in the station block of wrapper file: [" +
1192 str +
"]; skipped");
1194 std::cout <<
" Fix me: STATION need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1216 const QString eob(
"End Scan");
1217 QString str, subDir(
"");
1219 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1222 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
1224 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1227 subDir = str.mid(12);
1231 else if ( str.contains(
"TimeUTC", Qt::CaseInsensitive) &&
1232 str.contains(
".nc", Qt::CaseInsensitive))
1234 else if ( str.contains(
"ScanName", Qt::CaseInsensitive) &&
1235 str.contains(
".nc", Qt::CaseInsensitive))
1237 else if ( str.contains(
"ERPApriori", Qt::CaseInsensitive) &&
1238 str.contains(
".nc", Qt::CaseInsensitive))
1240 else if ( str.contains(
"Ephemeris", Qt::CaseInsensitive) &&
1241 str.contains(
".nc", Qt::CaseInsensitive))
1243 else if ( str.contains(
"NutationEQX_kWahr", Qt::CaseInsensitive) &&
1244 str.contains(
".nc", Qt::CaseInsensitive))
1246 else if ( str.contains(
"NutationEQX", Qt::CaseInsensitive) &&
1247 str.contains(
".nc", Qt::CaseInsensitive))
1249 else if ( str.contains(
"NutationNRO", Qt::CaseInsensitive) &&
1250 str.contains(
".nc", Qt::CaseInsensitive))
1252 else if ( str.contains(
"Rot-CF2J2K", Qt::CaseInsensitive) &&
1253 str.contains(
".nc", Qt::CaseInsensitive))
1255 else if ( str.contains(
"CorrRootFile", Qt::CaseInsensitive) &&
1256 str.contains(
".nc", Qt::CaseInsensitive))
1259 else if ( str.contains(
"ScanTimeMJD", Qt::CaseInsensitive) &&
1260 str.contains(
".nc", Qt::CaseInsensitive))
1264 else if (str.contains(eob, Qt::CaseInsensitive))
1269 "::parseScanBlock(): got an unknown string in the scan block of wrapper file: [" +
1270 str +
"]; skipped");
1271 std::cout <<
" Fix me: SCAN need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1285 QRegExp reBand(
"_b(\\w).*", Qt::CaseInsensitive);
1286 if (reBand.indexIn(str) != -1)
1287 key = reBand.cap(1);
1299 const QString eob(
"End Observation");
1300 QString str(
""), subDir(
"");
1301 QString bandKey(
""), bKey(
"");
1303 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1307 bKey = bandKey==
""?
"X":bandKey;
1309 if (str.at(0) !=
'!' && str.at(0) !=
'#' && str.size()>0)
1311 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1314 subDir = str.mid(12);
1317 else if ( str.contains(
"TimeUTC", Qt::CaseInsensitive) &&
1318 str.contains(
".nc", Qt::CaseInsensitive))
1320 else if ( str.contains(
"Baseline", Qt::CaseInsensitive) &&
1321 str.contains(
".nc", Qt::CaseInsensitive))
1323 else if ( str.contains(
"Source", Qt::CaseInsensitive) &&
1324 str.contains(
".nc", Qt::CaseInsensitive))
1329 else if ( str.contains(
"GroupDelayFull", Qt::CaseInsensitive) &&
1330 str.contains(
".nc", Qt::CaseInsensitive))
1332 else if ( str.contains(
"ChannelInfo", Qt::CaseInsensitive) &&
1333 str.contains(
".nc", Qt::CaseInsensitive))
1335 else if ( str.contains(
"PhaseCalInfo", Qt::CaseInsensitive) &&
1336 str.contains(
".nc", Qt::CaseInsensitive))
1338 else if ( str.contains(
"CorrInfo", Qt::CaseInsensitive) &&
1339 str.contains(
".nc", Qt::CaseInsensitive))
1342 if (str.contains(
"-Mk3", Qt::CaseInsensitive))
1344 else if (str.contains(
"-VLBA", Qt::CaseInsensitive))
1346 else if (str.contains(
"-CRL", Qt::CaseInsensitive))
1348 else if (str.contains(
"-GSI", Qt::CaseInsensitive))
1350 else if (str.contains(
"-K5", Qt::CaseInsensitive))
1352 else if (str.contains(
"-S2", Qt::CaseInsensitive))
1354 else if (str.contains(
"-Mk4", Qt::CaseInsensitive))
1356 else if (str.contains(
"-Haystack", Qt::CaseInsensitive))
1358 else if (str.contains(
"-difx", Qt::CaseInsensitive))
1363 "::parseObservationBlock(): the correlator type is set to " +
1366 else if ( str.contains(
"QualityCode", Qt::CaseInsensitive) &&
1367 str.contains(
".nc", Qt::CaseInsensitive))
1369 else if ( str.contains(
"EffFreq", Qt::CaseInsensitive) &&
1370 str.contains(
"_kEqWt", Qt::CaseInsensitive) &&
1371 str.contains(
".nc", Qt::CaseInsensitive) &&
1372 !str.contains(
"_kDB", Qt::CaseInsensitive))
1374 else if ( str.contains(
"EffFreq", Qt::CaseInsensitive) &&
1375 str.contains(
".nc", Qt::CaseInsensitive) &&
1376 !str.contains(
"_kDB", Qt::CaseInsensitive))
1378 if (
bandDataByName_[bandKey].vEffFreq_.isEmpty() || !str.contains(
"_kDB", Qt::CaseInsensitive))
1384 else if ( str.contains(
"RefFreq", Qt::CaseInsensitive) &&
1385 str.contains(
".nc", Qt::CaseInsensitive))
1387 else if ( str.contains(
"AmbigSize", Qt::CaseInsensitive) &&
1388 str.contains(
".nc", Qt::CaseInsensitive))
1390 else if ( str.contains(
"SNR", Qt::CaseInsensitive) &&
1391 str.contains(
".nc", Qt::CaseInsensitive))
1393 else if ( str.contains(
"Correlation", Qt::CaseInsensitive) &&
1394 str.contains(
".nc", Qt::CaseInsensitive))
1396 else if ( str.contains(
"UVFperAsec", Qt::CaseInsensitive) &&
1397 str.contains(
".nc", Qt::CaseInsensitive))
1399 else if ( str.contains(
"PhaseDelayFull", Qt::CaseInsensitive) &&
1400 str.contains(
".nc", Qt::CaseInsensitive))
1402 else if ( str.contains(
"SBDelay", Qt::CaseInsensitive) &&
1403 str.contains(
".nc", Qt::CaseInsensitive))
1405 else if ( str.contains(
"GroupDelay", Qt::CaseInsensitive) &&
1406 str.contains(
".nc", Qt::CaseInsensitive))
1408 else if ( str.contains(
"GroupRate", Qt::CaseInsensitive) &&
1409 str.contains(
".nc", Qt::CaseInsensitive))
1411 else if ( str.contains(
"DelayDataFlag", Qt::CaseInsensitive) &&
1412 str.contains(
".nc", Qt::CaseInsensitive))
1414 else if ( str.contains(
"DataFlag", Qt::CaseInsensitive) &&
1415 str.contains(
".nc", Qt::CaseInsensitive))
1418 else if ( str.contains(
"DiffTec", Qt::CaseInsensitive) &&
1419 str.contains(
".nc", Qt::CaseInsensitive))
1422 else if ( str.contains(
"Cal-BendSunHigher", Qt::CaseInsensitive) &&
1423 str.contains(
".nc", Qt::CaseInsensitive))
1425 else if ( str.contains(
"Cal-BendSun", Qt::CaseInsensitive) &&
1426 str.contains(
".nc", Qt::CaseInsensitive))
1428 else if ( str.contains(
"Cal-Bend", Qt::CaseInsensitive) &&
1429 str.contains(
".nc", Qt::CaseInsensitive))
1431 else if ( str.contains(
"Cal-EarthTide", Qt::CaseInsensitive) &&
1432 str.contains(
".nc", Qt::CaseInsensitive))
1434 else if ( str.contains(
"Cal-HiFreqERP", Qt::CaseInsensitive) &&
1435 str.contains(
".nc", Qt::CaseInsensitive))
1437 else if ( str.contains(
"Cal-OceanLoadOld", Qt::CaseInsensitive) &&
1438 str.contains(
".nc", Qt::CaseInsensitive))
1440 else if ( str.contains(
"Cal-OceanLoad", Qt::CaseInsensitive) &&
1441 str.contains(
".nc", Qt::CaseInsensitive))
1443 else if ( str.contains(
"Cal-OceanPoleTideLoad", Qt::CaseInsensitive) &&
1444 str.contains(
".nc", Qt::CaseInsensitive))
1446 else if ( str.contains(
"Cal-Parallax", Qt::CaseInsensitive) &&
1447 str.contains(
".nc", Qt::CaseInsensitive))
1449 else if ( str.contains(
"Cal-PoleTideOldRestore", Qt::CaseInsensitive) &&
1450 str.contains(
".nc", Qt::CaseInsensitive))
1452 else if ( str.contains(
"Cal-PoleTide", Qt::CaseInsensitive) &&
1453 str.contains(
".nc", Qt::CaseInsensitive))
1455 else if ( str.contains(
"Cal-TiltRemover", Qt::CaseInsensitive) &&
1456 str.contains(
".nc", Qt::CaseInsensitive))
1458 else if ( str.contains(
"Cal-FeedCorrection", Qt::CaseInsensitive) &&
1459 str.contains(
".nc", Qt::CaseInsensitive))
1466 "::parseObservationBlock(): got unbanded Feed Correction, the band key \"X\" is assumed");
1469 else if ( str.contains(
"Cal-Unphase", Qt::CaseInsensitive) &&
1470 str.contains(
".nc", Qt::CaseInsensitive))
1477 "::parseObservationBlock(): got unbanded Unphase Calibration, the band key \"X\" is assumed");
1480 else if ( str.contains(
"Cal-Wobble", Qt::CaseInsensitive) &&
1481 str.contains(
".nc", Qt::CaseInsensitive))
1483 else if ( str.contains(
"Cal-HiFreqLibration", Qt::CaseInsensitive) &&
1484 str.contains(
".nc", Qt::CaseInsensitive) &&
1485 str.contains(
"IERS2006", Qt::CaseInsensitive))
1487 else if ( str.contains(
"Cal-HiFreqLibration", Qt::CaseInsensitive) &&
1488 str.contains(
".nc", Qt::CaseInsensitive) &&
1489 str.contains(
"IERS2010", Qt::CaseInsensitive))
1492 else if ( str.contains(
"Edit", Qt::CaseInsensitive) &&
1493 str.contains(
".nc", Qt::CaseInsensitive))
1495 else if ( str.contains(
"NGSQualityFlag", Qt::CaseInsensitive) &&
1496 str.contains(
".nc", Qt::CaseInsensitive))
1498 else if ( str.contains(
"NumGroupAmbig", Qt::CaseInsensitive) &&
1499 str.contains(
".nc", Qt::CaseInsensitive))
1501 else if ( str.contains(
"NumPhaseAmbig", Qt::CaseInsensitive) &&
1502 str.contains(
".nc", Qt::CaseInsensitive))
1505 else if ( str.contains(
"ObsCrossRef", Qt::CaseInsensitive) &&
1506 str.contains(
".nc", Qt::CaseInsensitive))
1509 else if ( str.contains(
"FeedRotNet", Qt::CaseInsensitive) &&
1510 str.contains(
".nc", Qt::CaseInsensitive))
1512 else if ( str.contains(
"Cal-SlantPathIonoGroup", Qt::CaseInsensitive) &&
1513 str.contains(
".nc", Qt::CaseInsensitive))
1516 else if ( str.contains(
"DelayTheoretical", Qt::CaseInsensitive) &&
1517 str.contains(
".nc", Qt::CaseInsensitive))
1519 else if ( str.contains(
"RateTheoretical", Qt::CaseInsensitive) &&
1520 str.contains(
".nc", Qt::CaseInsensitive))
1523 else if ( str.contains(
"Part-Bend", Qt::CaseInsensitive) &&
1524 str.contains(
".nc", Qt::CaseInsensitive))
1526 else if ( str.contains(
"Part-Gamma", Qt::CaseInsensitive) &&
1527 str.contains(
".nc", Qt::CaseInsensitive))
1529 else if ( str.contains(
"Part-ERP", Qt::CaseInsensitive) &&
1530 str.contains(
".nc", Qt::CaseInsensitive))
1532 else if ( str.contains(
"Part-NutationEQX", Qt::CaseInsensitive) &&
1533 str.contains(
".nc", Qt::CaseInsensitive))
1535 else if ( str.contains(
"Part-NutationNRO", Qt::CaseInsensitive) &&
1536 str.contains(
".nc", Qt::CaseInsensitive))
1538 else if ( str.contains(
"Part-Parallax", Qt::CaseInsensitive) &&
1539 str.contains(
".nc", Qt::CaseInsensitive))
1541 else if ( str.contains(
"Part-Poletide", Qt::CaseInsensitive) &&
1542 str.contains(
".nc", Qt::CaseInsensitive))
1544 else if ( str.contains(
"Part-Precession", Qt::CaseInsensitive) &&
1545 str.contains(
".nc", Qt::CaseInsensitive))
1547 else if ( str.contains(
"Part-RaDec", Qt::CaseInsensitive) &&
1548 str.contains(
".nc", Qt::CaseInsensitive))
1550 else if ( str.contains(
"Part-XYZ", Qt::CaseInsensitive) &&
1551 str.contains(
".nc", Qt::CaseInsensitive))
1554 else if ( str.contains(
"IonoBits", Qt::CaseInsensitive) &&
1555 str.contains(
".nc", Qt::CaseInsensitive))
1557 else if ( str.contains(
"UnPhaseCalFlag", Qt::CaseInsensitive) &&
1558 str.contains(
".nc", Qt::CaseInsensitive))
1560 else if ( str.contains(
"FractC", Qt::CaseInsensitive) &&
1561 str.contains(
".nc", Qt::CaseInsensitive))
1564 else if ( str.contains(
"StructureCorrections", Qt::CaseInsensitive) &&
1565 str.contains(
".nc", Qt::CaseInsensitive))
1575 else if ( str.contains(
"Cal-SlantPathIonoPhase", Qt::CaseInsensitive))
1577 else if ( str.contains(
"NumPhaseAmbig", Qt::CaseInsensitive))
1580 else if ( str.startsWith(
"Phase", Qt::CaseInsensitive) &&
1581 str.contains(
".nc", Qt::CaseInsensitive) &&
1582 !str.contains(
"Ambig", Qt::CaseInsensitive) )
1585 else if ( str.contains(
"Unavailable", Qt::CaseInsensitive) &&
1586 str.contains(
"band", Qt::CaseInsensitive))
1588 else if ( str.contains(
"Cal-EccentricityMap", Qt::CaseInsensitive))
1591 else if (str.contains(eob, Qt::CaseInsensitive))
1596 "::parseObservationBlock(): got an unknown string in the observation block of wrapper"
1597 " file: [" + str +
"]; skipped");
1598 std::cout <<
" Fix me: OBS need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1606 QMap<QString, BandData>::iterator
1675 const QString eob(
"End Program");
1676 QString str(
""), subDir(
""), key;
1677 key = sProgName.simplified();
1679 if (key.compare(
"Solve", Qt::CaseInsensitive) == 0)
1681 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1685 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1687 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1688 subDir = str.mid(12);
1689 else if (str.contains(
"Begin Session", Qt::CaseInsensitive))
1691 while (!str.contains(
"End Session", Qt::CaseInsensitive) && !s.atEnd())
1694 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1696 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1697 subDir = str.mid(12);
1698 else if ( str.contains(
"AtmSetup", Qt::CaseInsensitive) &&
1699 str.contains(
".nc", Qt::CaseInsensitive))
1701 else if ( str.contains(
"BaselineClockSetup", Qt::CaseInsensitive) &&
1702 str.contains(
".nc", Qt::CaseInsensitive))
1704 else if ( str.contains(
"ClockSetup", Qt::CaseInsensitive) &&
1705 str.contains(
".nc", Qt::CaseInsensitive))
1707 else if ( str.contains(
"ErpSetup", Qt::CaseInsensitive) &&
1708 str.contains(
".nc", Qt::CaseInsensitive))
1710 else if ( str.contains(
"CalibrationSetup", Qt::CaseInsensitive) &&
1711 str.contains(
".nc", Qt::CaseInsensitive))
1713 else if ( str.contains(
"IonoSetup", Qt::CaseInsensitive) &&
1714 str.contains(
".nc", Qt::CaseInsensitive))
1716 else if ( str.contains(
"CalcErp", Qt::CaseInsensitive) &&
1717 str.contains(
".nc", Qt::CaseInsensitive))
1719 else if ( str.contains(
"SelectionStatus", Qt::CaseInsensitive) &&
1720 str.contains(
".nc", Qt::CaseInsensitive))
1722 else if ( str.contains(
"CalcInfo", Qt::CaseInsensitive) &&
1723 str.contains(
".nc", Qt::CaseInsensitive))
1725 else if ( str.contains(
"End Session", Qt::CaseInsensitive) )
1730 "::parseProgramBlock(): got an unexpected string in the program block of"
1731 "wrapper file: [" + str +
"]; skipped");
1733 std::cout <<
" Fix me: PROGRAM need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1738 else if (str.contains(
"Begin Station", Qt::CaseInsensitive))
1740 while (!str.contains(
"End Station", Qt::CaseInsensitive) && !s.atEnd())
1743 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1750 else if (str.contains(
"Begin Scan", Qt::CaseInsensitive))
1752 while (!str.contains(
"End Scan", Qt::CaseInsensitive) && !s.atEnd())
1755 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1757 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1758 subDir = str.mid(12);
1759 else if ( str.contains(
"ScanTimeMJD", Qt::CaseInsensitive) &&
1760 str.contains(
".nc", Qt::CaseInsensitive))
1762 else if (str.contains(
"End Scan", Qt::CaseInsensitive))
1767 "::parseProgramBlock(): got an unexpected string in the program block of"
1768 "wrapper file: [" + str +
"]; skipped");
1770 std::cout <<
" Fix me: PROGRAM need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1775 else if (str.contains(
"Begin Observation", Qt::CaseInsensitive))
1777 while (!str.contains(
"End Observation", Qt::CaseInsensitive) && !s.atEnd())
1780 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1782 if (str.contains(
"Default_Dir", Qt::CaseInsensitive))
1783 subDir = str.mid(12);
1784 else if ( str.contains(
"IonoBits", Qt::CaseInsensitive) &&
1785 str.contains(
".nc", Qt::CaseInsensitive))
1787 else if ( str.contains(
"UnPhaseCalFlag", Qt::CaseInsensitive) &&
1788 str.contains(
".nc", Qt::CaseInsensitive))
1790 else if ( str.contains(
"FractC", Qt::CaseInsensitive) &&
1791 str.contains(
".nc", Qt::CaseInsensitive))
1793 else if ( str.contains(
"UserSup", Qt::CaseInsensitive) &&
1794 str.contains(
".nc", Qt::CaseInsensitive))
1796 else if (str.contains(
"End Observation", Qt::CaseInsensitive))
1801 "::parseProgramBlock(): got an unexpected string in the program block of"
1802 "wrapper file: [" + str +
"]; skipped");
1804 std::cout <<
" Fix me: PROGRAM need to add a parser for the string [" << qPrintable(str) <<
"]\n";
1809 else if (str.contains(eob, Qt::CaseInsensitive))
1814 "::parseProgramBlock(): got an unexpected string in the wrapper file: [" + str +
1824 "::parseProgramBlock(): got a duplicate of the Program section of [" +
1825 key +
"]; skipped");
1826 while (!str.contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1829 if (str.size()>0 && str.at(0) !=
'!' && str.at(0) !=
'#')
1841 while (!(str=s.readLine()).contains(eob, Qt::CaseInsensitive) && !s.atEnd())
1866 "::collectStationNames(): mapped the station name [" + d.
stationName_ +
1871 "::collectStationNames(): the station name [" + d.
stationName_ +
"] is already in the map");
1875 "::collectStationNames(): cannot find station name for the key [" + d.
stationKey_ +
"]");
1888 "::procNcString(): duplicate: [" + destination.
getStub() +
"] vs [" + str +
"]");
1889 std::cout <<
" Fix me: got a duplicate: was [" << qPrintable(destination.
getStub())
1890 <<
"] became [" << qPrintable(str) <<
"]\n";
1894 QString name(str.simplified());
1895 if (name.right(3).contains(
".nc", Qt::CaseInsensitive))
1896 name = name.left(name.size() - 3);
1899 destination.
setFileName(subDir.size()==0 ? str.simplified() : subDir +
"/" + str.simplified());
1914 "::procNcStringSpec(): duplicate: [" + destination.
getStub() +
"] vs [" + str +
"]");
1915 std::cout <<
" Fix me: got a duplicate: was [" << qPrintable(destination.
getStub())
1916 <<
"] became [" << qPrintable(str) <<
"]\n";
1920 QString name(str.simplified());
1921 if (name.right(3).contains(
".nc", Qt::CaseInsensitive))
1922 name = name.left(name.size() - 3);
1925 destination.
setFileName(subDir.size()==0 ? str.simplified() : subDir +
"/" + str.simplified());
1940 if ((rc=nc_open(qPrintable(fileName), 0, &ncid)) != NC_NOERR)
1942 printf(
"%s\n", nc_strerror(rc));
1946 if (isOk && (rc=nc_close(ncid)) != NC_NOERR)
1948 printf(
"%s\n", nc_strerror(rc));
1954 "::isValidNcFile(): the netCDF file " + fileName +
" looks ok");
1957 "::isValidNcFile(): got an error while staring at " + fileName);
1980 <<
"Individual variables:\n"
1981 <<
" path2RootDir_ : [" << qPrintable(
path2RootDir_) <<
"]\n"
1985 std::cout <<
"History part:\n";
1993 std::cout <<
" Process " << qPrintable(hd.
processName_) <<
"\n";
1995 <<
" processName_ : [" << qPrintable(hd.
processName_) <<
"]\n"
1997 <<
" creator_ : [" << qPrintable(hd.
creator_) <<
"]\n"
1998 <<
" defaultDir_ : [" << qPrintable(hd.
defaultDir_) <<
"]\n"
2001 <<
" version_ : [" << qPrintable(hd.
version_) <<
"]\n"
2002 <<
" isMk3Compatible_ : [" << (hd.
isMk3Compatible_?
"true":
"false") <<
"]\n"
2006 <<
" sessionCode_ : [" << qPrintable(
sessionCode_) <<
"]\n"
2007 <<
" sessionName_ : [" << qPrintable(
sessionName_) <<
"]\n"
2067 std::cout <<
" Program Solve: \n"
2069 vAtmSetup_.compositeName()) <<
"]\n"
2071 vClockSetup_.compositeName()) <<
"]\n"
2073 vErpSetup_.compositeName()) <<
"]\n"
2075 vIonoSetup_.compositeName()) <<
"]\n"
2077 vCalibrationSetup_.compositeName()) <<
"]\n"
2079 vBaselineClockSetup_.compositeName()) <<
"]\n"
2081 vCalcErp_.compositeName()) <<
"]\n"
2083 vSelectionStatus_.compositeName()) <<
"]\n"
2085 vCalcInfo_.compositeName()) <<
"]\n"
2087 vScanTimeMJD_.compositeName()) <<
"]\n"
2089 vIonoBits_.compositeName()) <<
"]\n"
2091 vUnPhaseCalFlag_.compositeName()) <<
"]\n"
2093 vFractC_.compositeName()) <<
"]\n"
2095 vUserSup_.compositeName()) <<
"]\n"
2098 std::cout <<
"\nOn per band basis:\n";
2099 QMap<QString, BandData>::iterator itt;
2103 std::cout <<
"Band \"" << qPrintable(itt.key()) <<
"\":\n";
2133 std::cout <<
"On per station basis:\n";
2134 QMap<QString, StationDescriptor>::iterator it;
2138 std::cout <<
"Station " << qPrintable(it.key()) <<
"\n";
2140 <<
" stationName : [" << qPrintable(sd.
stationName_) <<
"]\n"
2162 std::cout <<
"Registered NC files:\n";
2166 <<
" [" << qPrintable(
activeVars_.at(i)->getFileName()) <<
"]\n";
2176 for (
int i=0; i<fmt.size(); i++)
2184 "::checkFormat(): cannot find the variable \"" + fmtVar->
name() +
"\" in the file " +
2193 if (var->
getName() !=
"FRNGERR")
2196 "::checkFormat(): enexpected data type of the variable \"" + fmtVar->
name() +
"\"");
2203 if (dims.size() && dims.size() != var->
dimensions().size())
2205 for (
int j=0; j<dims.size(); j++)
2211 "::checkFormat(): the dimension of \"" + fmtVar->
name() +
2212 "\" has been expanded by unity at position " + QString(
"").setNum(j) +
2213 " of " + QString(
"").setNum(var->
dimensions().size()));
2219 "::checkFormat(): number of dimensions, " + QString(
"").setNum(var->
dimensions().size()) +
2220 ", missmatch for \"" + fmtVar->
name() +
"\", expected " + QString(
"").setNum(dims.size()));
2224 for (
int j=0; j<dims.size(); j++)
2229 if (dims.at(j) != var->
dimensions().at(j)->getN())
2232 "::checkFormat(): dimension #" + QString(
"").setNum(j) +
" missmatch for [" +
2233 fmtVar->
name() +
"], expected " + QString(
"").setNum(dims.at(j)) +
" got " +
2234 QString(
"").setNum(var->
dimensions().at(j)->getN()));
2245 "::checkFormat(): the special dimension numObs missmatch for [" +
2246 fmtVar->
name() +
"], expected " + QString(
"").setNum(
numOfObs_) +
" got " +
2247 QString(
"").setNum(var->
dimensions().at(j)->getN()));
2255 "::checkFormat(): the special dimension numScans missmatch for [" +
2256 fmtVar->
name() +
"], expected " + QString(
"").setNum(
numOfScans_) +
" got " +
2257 QString(
"").setNum(var->
dimensions().at(j)->getN()));
2277 str.sprintf(
"DimX%06d", len);
2287 str =
"NumChannels";
2289 str =
"NumChannels_x_2";
2291 str =
"NumStatScan";
2299 "::guessDimName(): uknown special dimension " + QString(
"").setNum(len) +
" of the var " +
2329 "::guessDimVal(): cannot find the station [" + auxKey.simplified() +
2330 "] in the container numOfObsByStn_");
2341 "::guessDimVal(): uknown special dimension " + QString(
"").setNum(d) +
" of the var " + varName);
2351 const QString& stationKey,
const QString& bandKey)
2354 for (
int i=0; i<fmt.size(); i++)
2365 for (
int j=0; j<dims.size(); j++)
2393 if ((len=fmtVar->
attUnits().size()))
2402 if ((len=fmtVar->
attBand().size()) && bandKey.size())
2408 attr->
setData(qPrintable(bandKey), len);
2417 attr->
setData(qPrintable(str), len);
2437 bool need2searchForUvf;
2438 need2searchForUvf =
true;
2440 if (!it.value().vUVFperAsec_.isEmpty())
2441 need2searchForUvf =
false;
2442 if (need2searchForUvf)
2444 bool calcProcessFound=
false;
2446 QRegExp reVersions(
"(\\d+).(\\d+).(\\d+)/(\\d+).(\\d+).(\\d+)");
2453 calcProcessFound =
true;
2454 if (reVersions.indexIn(hd.
version_) != -1)
2456 int nMaj, nMin, nTyn;
2457 nMaj = nMin = nTyn = 0;
2458 nMaj = reVersions.cap(1).toInt(&isOk);
2461 nMin = reVersions.cap(2).toInt(&isOk);
2464 nTyn = reVersions.cap(3).toInt(&isOk);
2467 SgVersion foundVersion(
"temp", nMaj, nMin, nTyn, QString(
""),
tZero);
2468 if (foundVersion <= version2correct)
2471 "::makeWorkAround4KnownBugs(): found data that could be corrected");
2480 "::makeWorkAround4KnownBugs(): checking " + bandKey +
"-band");
2481 if (QFile::exists(
path2RootDir_ +
"/ObsDerived/UVFperAsec_b" + bandKey +
".nc"))
2485 "::makeWorkAround4KnownBugs(): found a missed variable " +
2493 "::makeWorkAround4KnownBugs(): cannot convert \"" + reVersions.cap(3) +
"\" to int");
2497 "::makeWorkAround4KnownBugs(): cannot convert \"" + reVersions.cap(2) +
"\" to int");
2501 "::makeWorkAround4KnownBugs(): cannot convert \"" + reVersions.cap(1) +
"\" to int");
2505 "::makeWorkAround4KnownBugs(): the signature \"SgLib/vgosDbCalc\" has been found, but the "
2506 "version is not in the expected form: \"" + hd.
version_ +
"\"");
2521 QString path2root(
"");
2529 list << path2root +
activeVars_.at(i)->getFileName() ;
2550 "SEC TAG ",
"Seconds part of UTC TAG.........",
"second"),
2552 "UTC TAG ",
"Epoch UTC YMDHM................."),
2559 "ION CORR",
"Ion correction. Add to theo. sec",
"second",
"?"),
2562 "IONRMS ",
"Ion correction to sigma. sec",
"second",
"?"),
2565 "",
"0=OK, -1=Missing, -2=bad",
"",
"?"),
2567 "ION_BITS",
"ICORR for full ion tracking."),
2569 "DELUFLAG",
"Delay unweight flag"),
2571 "RATUFLAG",
"Delay rate unweight flag........"),
2575 "UACSUP ",
"User action for suppression"),
2577 "# AMBIG ",
"Number of group delay ambiguities",
"",
"?"),
2579 "N/A ",
"Number of group delay subambiguities (test purposes)",
"",
"?"),
2581 "#PAMBIG ",
"Number of phase delay ambiguities",
"",
"?"),
2583 "ATM_INTV",
"Batchmode atmos interval - hours"),
2585 "ATM_CNST",
"Atmosphere constraint. ps/hr"),
2587 "AC_SITES",
"Site list for atmos constraints"),
2589 "CLK_INTV",
"Batchmode clock interval - hours"),
2591 "CLK_CNST",
"Clock constraint-Parts in 1.e14"),
2594 "CC_SITES",
"Site list for clocks constraints"),
2596 "",
"Polar Motion Offset Constraint"),
2598 "",
"UT1 Offset Constraint"),
2600 "",
"Bit flag indicating station has iono correction"),
2602 "",
"Stations with ionocorrection"),
2604 "ERROR K ",
"Group delay and rate re-weighting constants."),
2607 "ERROR BL",
"B.L.names for formal errors"),
2609 "SOURSTAT",
"Source selection status bit-mapped array."),
2613 "BASLSTAT",
"Baseline selection bit maped array. 1=some obs, etc."),
2615 "--NEW-- ",
"Source names for Source selection array"),
2618 "--NEW-- ",
"Station names for Baseline selection array"),
2620 "BLDEPCKS",
"Bl-dependent clock list"),
2622 "ECCTYPES",
"Eccentricity type: XY or NE"),
2625 "--NEW-- ",
"Station name of the corresponding eccentricity"),
2627 "ECCNAMES",
"Eccentricity monument name"),
2629 "ECCCOORD",
"Eccentricity taken from eccentricity file.",
"Meter"),
2631 "OBCLFLGS",
"Bit set indicate that calibration is recommended."),
2634 "CAL FLGS",
"Bit set indicate that calibration is recommended."),
2637 "FCL FLGS",
"Standard flcal configuration"),
2639 "CAL LIST",
"Station depedendent calibrations (Cable, Phase, etc?)"),
2641 "FCL LIST",
"Key to the standard flcal config"),
2643 "CALSITES",
"List of sites for standard cal"),
2645 "OBCLLIST",
"Available obs dependent calibrations (poletide, earthdide, ?)"),
2647 "BRK_FLAG",
"Batchmode clock break flags"),
2649 "CLKBREAK",
"Status of clock break existence"),
2651 "BRK_NUMB",
"Number of batchmode clock breaks"),
2654 "BRK_SNAM",
"Batchmode clock break stations"),
2656 "BRK_EPOC",
"Batchmode clock break epochs")
const SgMJD tZero(1957, 10, 4)
const SgNcdfDimension dUnity(dimensionUnityName, dimensionUnityValue, -1)
SgVgosDb::FmtChkVar fcSrcSelectionName("SourceSelectionName", NC_CHAR, false, QList< int >()<< SD_NumSrc<< 8, "--NEW-- ", "Source names for Source selection array")
SgVgosDb::FmtChkVar fcEccentricityVector("EccentricityVector", NC_DOUBLE, false, QList< int >()<< SD_NumStn<< 3, "ECCCOORD", "Eccentricity taken from eccentricity file.", "Meter")
SgVgosDb::FmtChkVar fcFlybyName("FlybyList", NC_CHAR, false, QList< int >()<< SD_Any<< 8, "FCL LIST", "Key to the standard flcal config")
SgVgosDb::FmtChkVar fcClockInterval("ClockInterval", NC_DOUBLE, false, QList< int >()<< SD_Any, "CLK_INTV", "Batchmode clock interval - hours")
SgVgosDb::FmtChkVar fcBlnSelectionName("BaselineSelectionName", NC_CHAR, false, QList< int >()<< SD_NumStn<< 8, "--NEW-- ", "Station names for Baseline selection array")
QList< SgVgosDb::FmtChkVar * > fcfBlnClockSetup
QList< SgVgosDb::FmtChkVar * > fcfEdit_v1002
QList< SgVgosDb::FmtChkVar * > fcfErpSetup
SgVgosDb::FmtChkVar fcClockBreakFlag("ClockBreakFlag", NC_SHORT, true, QList< int >()<< SD_Any, "BRK_FLAG", "Batchmode clock break flags")
SgVgosDb::FmtChkVar fcPhaseFlag("PhaseFlag", NC_SHORT, false, QList< int >()<< SD_NumObs, "PHSUFLAG", "")
QList< SgVgosDb::FmtChkVar * > fcfEdit_v1001
QList< SgVgosDb::FmtChkVar * > fcfNumGroupAmbig
QList< SgVgosDb::FmtChkVar * > fcfCalSlantPathIonoGroup
QList< SgVgosDb::FmtChkVar * > fcfSelectionStatus
QList< SgVgosDb::FmtChkVar * > fcfIonoBits
SgVgosDb::FmtChkVar fcClockRateName("ClockRateConstraintStationList", NC_CHAR, false, QList< int >()<< SD_Any<< 8, "CC_SITES", "Site list for clocks constraints")
SgVgosDb::FmtChkVar fcStatCalFlag("StatCalFlag", NC_SHORT, true, QList< int >()<< SD_NumStn, "CAL FLGS", "Bit set indicate that calibration is recommended.")
SgVgosDb::FmtChkVar fcSecond("Second", NC_DOUBLE, true, QList< int >()<< SD_Any, "SEC TAG ", "Seconds part of UTC TAG.........", "second")
SgVgosDb::FmtChkVar fcGroupBLWeights("GroupBLWeights", NC_DOUBLE, true, QList< int >()<< 2<< SD_Any, "ERROR K ", "Group delay and rate re-weighting constants.")
SgVgosDb::FmtChkVar fcEccentricityName("EccentricityStationList", NC_CHAR, true, QList< int >()<< SD_NumStn<< 8, "--NEW-- ", "Station name of the corresponding eccentricity")
QList< SgVgosDb::FmtChkVar * > * fcfEdit
SgVgosDb::FmtChkVar fcObsCalFlag("ObsCalFlag", NC_SHORT, false, QList< int >()<< 1, "OBCLFLGS", "Bit set indicate that calibration is recommended.")
SgVgosDb::FmtChkVar fcEccentricityMonument("EccentricityMonument", NC_CHAR, false, QList< int >()<< SD_NumStn<< 10, "ECCNAMES", "Eccentricity monument name")
SgVgosDb::FmtChkVar fcIonoSolveFlag("IonoSolveFlag", NC_SHORT, true, QList< int >()<< SD_NumStn, "", "Bit flag indicating station has iono correction")
SgVgosDb::FmtChkVar fcYmdhm("YMDHM", NC_SHORT, true, QList< int >()<< SD_Any<< 5, "UTC TAG ", "Epoch UTC YMDHM.................")
SgVgosDb::FmtChkVar fcBaselineClock("BaselineClock", NC_CHAR, true, QList< int >()<< SD_Any<< 2<< 8, "BLDEPCKS", "Bl-dependent clock list")
QList< SgVgosDb::FmtChkVar * > fcfClockSetup
SgVgosDb::FmtChkVar fcClockBreakNumber("BRK_NUMB", NC_SHORT, false, QList< int >()<< 1, "BRK_NUMB", "Number of batchmode clock breaks")
QList< SgVgosDb::FmtChkVar * > fcfNumPhaseAmbig
SgVgosDb::FmtChkVar fcAtmRateConstraint("AtmRateConstraint", NC_DOUBLE, true, QList< int >()<< SD_Any, "ATM_CNST", "Atmosphere constraint. ps/hr")
SgVgosDb::FmtChkVar fcSrcSelectionFlag("SourceSelectionFlag", NC_SHORT, true, QList< int >()<< SD_NumSrc, "SOURSTAT", "Source selection status bit-mapped array.")
SgVgosDb::FmtChkVar fcCalStationName("StatCalStationList", NC_CHAR, true, QList< int >()<< SD_NumStn<< 8, "CALSITES", "List of sites for standard cal")
QList< SgVgosDb::FmtChkVar * > fcfNumGroupAmbigE
QList< SgVgosDb::FmtChkVar * > fcfClockBreak
SgVgosDb::FmtChkVar fcRateFlag("RateFlag", NC_SHORT, true, QList< int >()<< SD_NumObs, "RATUFLAG", "Delay rate unweight flag........")
QList< SgVgosDb::FmtChkVar * > fcfCalibrationSetup
QList< SgVgosDb::FmtChkVar * > fcfIonoSetup
QList< SgVgosDb::FmtChkVar * > fcfEccentricity
SgVgosDb::FmtChkVar fcNumGroupAmbig("NumGroupAmbig", NC_SHORT, true, QList< int >()<< SD_NumObs, "# AMBIG ", "Number of group delay ambiguities", "", "?")
SgVgosDb::FmtChkVar fcCalIonoGroupSigma("Cal-SlantPathIonoGroupSigma", NC_DOUBLE, true, QList< int >()<< SD_NumObs<< 2, "IONRMS ", "Ion correction to sigma. sec", "second", "?")
QList< SgVgosDb::FmtChkVar * > fcfTimeUTC
QList< SgVgosDb::FmtChkVar * > fcfUserSup
SgVgosDb::FmtChkVar fcClockRateConstraint("ClockRateConstraint", NC_DOUBLE, true, QList< int >()<< SD_Any, "CLK_CNST", "Clock constraint-Parts in 1.e14")
SgVgosDb::FmtChkVar fcClockBreakSite("ClockBreakStationList", NC_CHAR, true, QList< int >(), "BRK_SNAM", "Batchmode clock break stations")
SgVgosDb::FmtChkVar fcGroupBLWeightName("GroupBLWeightStationList", NC_CHAR, true, QList< int >()<< SD_Any<< 2<< 8, "ERROR BL", "B.L.names for formal errors")
SgVgosDb::FmtChkVar fcNumPhaseAmbig("NumPhaseAmbig", NC_INT, true, QList< int >()<< SD_NumObs, "#PAMBIG ", "Number of phase delay ambiguities", "", "?")
SgVgosDb::FmtChkVar fcIonoBits("IonoBits", NC_SHORT, true, QList< int >()<< SD_NumObs, "ION_BITS", "ICORR for full ion tracking.")
SgVgosDb::FmtChkVar fcEccentricityType("EccentricityType", NC_CHAR, false, QList< int >()<< SD_NumStn<< 2, "ECCTYPES", "Eccentricity type: XY or NE")
SgVgosDb::FmtChkVar fcDelayFlag("DelayFlag", NC_SHORT, true, QList< int >()<< SD_NumObs, "DELUFLAG", "Delay unweight flag")
SgVgosDb::FmtChkVar fcAtmInterval("AtmInterval", NC_DOUBLE, false, QList< int >()<< SD_Any, "ATM_INTV", "Batchmode atmos interval - hours")
SgVgosDb::FmtChkVar fcUtOffsetConstraint("UT1OffsetConstraint", NC_DOUBLE, true, QList< int >()<< 1, "", "UT1 Offset Constraint")
SgVgosDb::FmtChkVar fcIonoStationList("IonoStationList", NC_CHAR, true, QList< int >()<< SD_NumStn<< 8, "", "Stations with ionocorrection")
SgVgosDb::FmtChkVar fcAtmRateSite("AtmRateStationList", NC_CHAR, false, QList< int >()<< SD_Any<< 8, "AC_SITES", "Site list for atmos constraints")
SgVgosDb::FmtChkVar fcCalIonoGroupDataFlag("Cal-SlantPathIonoGroupDataFlag", NC_SHORT, false, QList< int >()<< SD_NumObs, "", "0=OK, -1=Missing, -2=bad", "", "?")
QList< SgVgosDb::FmtChkVar * > fcfGroupBLWeights
QList< SgVgosDb::FmtChkVar * > fcfAtmSetup
SgVgosDb::FmtChkVar fcPmOffsetConstraint("WobOffsetConstraint", NC_DOUBLE, true, QList< int >()<< 1, "", "Polar Motion Offset Constraint")
SgVgosDb::FmtChkVar fcBlnSelectionFlag("BaselineSelectionFlag", NC_SHORT, true, QList< int >()<< SD_NumStn<< SD_NumStn, "BASLSTAT", "Baseline selection bit maped array. 1=some obs, etc.")
SgVgosDb::FmtChkVar fcClockBreakStatus("CLKBREAK", NC_CHAR, false, QList< int >()<< 2, "CLKBREAK", "Status of clock break existence")
SgVgosDb::FmtChkVar fcNumGroupSubAmbig("NumGroupSubAmbig", NC_SHORT, false, QList< int >()<< SD_NumObs, "N/A ", "Number of group delay subambiguities (test purposes)", "", "?")
SgVgosDb::FmtChkVar fcCalIonoGroup("Cal-SlantPathIonoGroup", NC_DOUBLE, true, QList< int >()<< SD_NumObs<< 2, "ION CORR", "Ion correction. Add to theo. sec", "second", "?")
SgVgosDb::FmtChkVar fcObsCalName("ObsCalList", NC_CHAR, false, QList< int >()<< SD_Any<< 8, "OBCLLIST", "Available obs dependent calibrations (poletide, earthdide, ?)")
SgVgosDb::FmtChkVar fcClockBreakEpoch("ClockBreakEpoch", NC_DOUBLE, true, QList< int >()<< SD_Any, "BRK_EPOC", "Batchmode clock break epochs")
SgVgosDb::FmtChkVar fcFlybyFlag("FlybyFlag", NC_SHORT, false, QList< int >()<< SD_NumStn<< 7, "FCL FLGS", "Standard flcal configuration")
SgVgosDb::FmtChkVar fcStatCalName("StatCalList", NC_CHAR, true, QList< int >()<< SD_Any<< 8, "CAL LIST", "Station depedendent calibrations (Cable, Phase, etc?)")
SgVgosDb::FmtChkVar fcUserSup("UserSup", NC_SHORT, false, QList< int >()<< SD_NumObs, "UACSUP ", "User action for suppression")
QMap< QString, SgVlbiStationInfo * >::iterator StationsByName_it
const QString & getAcAbbName() const
const SgIdentities * currentIdentities_
virtual void write(LogLevel, quint32, const QString &, bool=false)
bool fromString(Format format, const QString &str, bool isReset=true)
@ F_YYYYMMDDHHMMSSSS
Long verbose: Fri, the 2nd of Apr, 2010; 17hr 02min 43.6400sec.
@ F_YYYYMonDD
Date in digits: 2010.04.02.
@ F_Simple
Digits: 2010/04/02 17:02:43.6.
@ F_Date
RFC2822 date format realized by Qt (Qt::RFC2822Date)
QString toString(Format format=F_Verbose) const
static SgMJD currentMJD()
void setNumOfElements(size_t num)
void setData(const void *, size_t)
void setTypeOfData(nc_type type)
void setName(const QString &str)
const QString & getName() const
nc_type getTypeOfData() const
void setName(const QString &name)
void addAttribute(const SgNcdfAttribute &)
void setTypeOfData(nc_type type)
const QList< SgNcdfDimension * > & dimensions() const
void addDimension(const SgNcdfDimension &d, int idx=-1)
const QString & getName() const
SgNcdfVariable * lookupVar(const QString &name) const
void registerVariable(SgNcdfVariable *, bool is4Service=false)
const QString & getFileName() const
const QString & getKey() const
void parseString(const QString &)
bool have2adjustPermissions_
QString currentInstitution_
QString compositeName() const
QString name4export(const QString &rootDir, SgNetCdf::OperationMode om, const QString &aBand="")
static const QString className()
void setSubDir(const QString &str)
void setFileName4Output(const QString &str)
const QString & getStub() const
void setFileName(const QString &str)
SgVdbVariable(const QString &stdStub, const QString &stdSubDir)
const QString & attDefinition() const
bool have2hideLCode() const
const QList< int > & dims() const
const QString & name() const
nc_type typeOfData() const
const QString & attLCode() const
const QString & attUnits() const
const QString & attBand() const
double outputFormatVersion_
int parseSessionBlock(QTextStream &)
SgVdbVariable vCal_EarthTide_
SgVdbVariable vErpApriori_
SgVdbVariable vClockBreak_
SgVdbVariable vSourceCrossRef_
SgVdbVariable vNutationNro_
void makeWorkAround4KnownBugs()
int parseStationBlock(QTextStream &, const QString &)
static const QString className()
SgVdbVariable vClockApriori_
SgVdbVariable vCal_Wobble_
bool setupFormat(const QList< FmtChkVar * > &, SgNetCdf &, const QString &stationKey=QString(""), const QString &bandKey=QString(""))
SgVdbVariable vStationApriori_
bool checkFormat(const QList< FmtChkVar * > &, const SgNetCdf &, bool ok2fail=false)
SgVdbVariable vPart_NutationNro_
SgVdbVariable vEccentricity_
double inputFormatVersion_
QList< SgVdbVariable * > activeVars_
SgVdbVariable vNutationEqx_
QMap< QString, StationDescriptor > stnDescriptorByKey_
SgVdbVariable vCal_PoleTideOldRestore_
SgNetCdf::OperationMode operationMode_
SgVdbVariable vCal_BendSun_
SgVdbVariable vPart_Parallax_
void collectStationNames()
SgVgosDb(SgIdentities *ids, SgVersion *driverVersion)
int parseScanBlock(QTextStream &)
CorrelatorType correlatorType_
SgVdbVariable vPart_PoleTide_
bool loadStationName(const QString &stnKey)
bool have2adjustPermissions_
void setSessionName(const QString &name)
SgVdbVariable vCal_BendSunHigher_
SgVdbVariable vPart_Precession_
QList< HistoryDescriptor > historyDescriptors_
void setSessionCode(const QString &code)
HistoryDescriptor localHistory_
SgVdbVariable vGroupBLWeights_
QList< SgVdbVariable * > vdbVariables_
SgVdbVariable vCal_HiFreqLibration_
SgVdbVariable vObsCrossRef_
SgVdbVariable vAntennaApriori_
SgVdbVariable vScanTimeUTC_
SgVdbVariable vCal_OceanLoad_
bool isValidNcFile(const QString &)
SgVdbVariable vNutationEqx_kWahr_
SgVdbVariable vPart_Bend_
virtual const QList< QString > listOfInputFiles() const
SgVdbVariable vStationCrossRef_
SgVdbVariable vMiscFourFit_
SgVdbVariable vCal_HfErp_
SgVdbVariable vMiscCable_
SgVdbVariable vCal_PoleTide_
QMap< QString, StationDescriptor * > stnDescriptorByName_
SgVdbVariable vCal_OceanPoleTideLoad_
bool init(const QString path, const QString fileName)
QMap< QString, ProgramGenericDescriptor > progDescriptorByName_
int parseVersionBlock(QTextStream &, const QString &)
QMap< QString, BandData > bandDataByName_
void parseBandKey(const QString &str, QString &key)
SgVdbVariable vCal_FeedCorrection_
int parseHistoryProcessSubBlock(QTextStream &, const QString &)
SgVdbVariable vCal_HfLibration_
int procNcStringSpec(const QString &str, const QString &subDir, SgVdbVariable &destination)
SgVdbVariable vPart_NutationEqx_
int parseHistoryBlock(QTextStream &)
SgVdbVariable vLeapSecond_
int parseProgramBlock(QTextStream &, const QString &)
QList< SgVdbVariable * > obsUserCorrections_
SgVdbVariable vPart_Gamma_
SgVdbVariable vSourceApriori_
ProgramSolveDescriptor progSolveDescriptor_
SgVdbVariable vFeedRotNet_
SgVdbVariable vRateTheoretical_
bool have2redoLeapSecond_
SgVdbVariable vCal_OceanLoadOld_
SgVdbVariable vRot_CF2J2K_
SgVdbVariable vEphemeris_
SgVdbVariable vObservationTimeUTC_
int parseObservationBlock(QTextStream &)
int guessDimVal(const QString &, int d, const QString &auxKey)
SgVdbVariable vPart_RaDec_
int procNcString(const QString &str, const QString &subDir, SgVdbVariable &destination)
const QString guessDimName(const QString &varName, int len)
SgVdbVariable vCorrRootFile_
SgVdbVariable vCal_TiltRemover_
SgVdbVariable vNGSQualityFlag_
SgVdbVariable vCal_Parallax_
SgVdbVariable vDelayTheoretical_
const QString & getScanId() const
const QString & getName() const
@ OT_MK4
observations are from Mk4-compatible correlator output;
@ OT_AGV
observations are in AGV format;
@ OT_KOMB
observations are from KOMB output (generated by NICT, Japan);
OriginType getOriginType() const
const QString & getSessionCode() const
QMap< QString, SgVlbiBand * > & bandByKey()
QMap< QString, SgVlbiStationInfo * > & stationsByName()
QList< SgVlbiObservation * > & observations()
QMap< QString, SgVlbiSourceInfo * > & sourcesByName()
QMap< QString, SgVlbiAuxObservation * > * auxObservationByScanId()
SgVersion * driverVersion
SgVdbVariable vCal_SlantPathIonoGroup_
SgVdbVariable vGroupDelayFull_
SgVdbVariable vDelayDataFlag_
SgVdbVariable vCorrelation_
SgVdbVariable vEffFreq_EqWt_
SgVdbVariable vPhaseDelayFull_
SgVdbVariable vCal_FeedCorrection_
SgVdbVariable vGroupDelay_
SgVdbVariable vChannelInfo_
SgVdbVariable vGroupRate_
SgVdbVariable vNumPhaseAmbig_
SgVdbVariable vCal_Unphase_
SgVdbVariable vNumGroupAmbig_
SgVdbVariable vUVFperAsec_
SgVdbVariable vMiscFourFit_
SgVdbVariable vPhaseCalInfo_
SgVdbVariable vAmbigSize_
SgVdbVariable vQualityCode_
QString inputWrapperFileName_
ProgramGenericDescriptor()
QList< QString > content_
QList< SgVdbVariable * > vdbVars_
SgVdbVariable vIonoSetup_
SgVdbVariable vCalibrationSetup_
SgVdbVariable vScanTimeMJD_
SgVdbVariable vClockSetup_
SgVdbVariable vSelectionStatus_
SgVdbVariable vUnPhaseCalFlag_
bool hasSomething4output()
SgVdbVariable vBaselineClockSetup_
SgVdbVariable vRefClockOffset_
SgVdbVariable vCal_SlantPathTropWet_
SgVdbVariable vCal_SlantPathTropDry_
SgVdbVariable vPart_HorizonGrad_
SgVdbVariable vPart_ZenithPathTropDry_
SgVdbVariable vCal_Cable_
SgVdbVariable vCal_CblCorrections_
SgVdbVariable vFeedRotation_
SgVdbVariable vCal_AxisOffset_
SgVdbVariable vPart_AxisOffset_
SgVdbVariable vDis_OceanLoad_
SgVdbVariable vCal_OceanLoad_
SgVdbVariable vPart_ZenithPathTropWet_
SgVdbVariable vCal_CableCorrections_