27 #include <QtCore/QDir>
28 #include <QtCore/QFile>
29 #include <QtCore/QRegExp>
30 #include <QtCore/QTextStream>
66 "::storeAtmSetup(): format description failed");
79 for (
unsigned int i=0; i<interval->
n(); i++)
81 for (
unsigned int i=0; i<rateConstraint->
n(); i++)
83 for (
int i=0; i<sites.size(); i++)
84 strncpy(pS + len*i, qPrintable(sites.at(i)), len);
90 "::storeAtmSetup(): cannot put data into " + ncdf.
getFileName());
95 "::storeAtmSetup(): the data were successfully stored in " + ncdf.
getFileName());
110 "CLK_SITS",
"List of clock reference stations");
114 if (refSites.size()==1)
116 else if (refSites.size()>1)
121 if (refSites.size()>0)
129 "::storeClockSetup(): format description failed");
143 for (
unsigned int i=0; i<interval->
n(); i++)
145 for (
unsigned int i=0; i<rateConstraint->
n(); i++)
147 for (
int i=0; i<sites.size(); i++)
148 strncpy(pS + len*i, qPrintable(sites.at(i)), len);
149 for (
int i=0; i<refSites.size(); i++)
150 strncpy(pR + len*i, qPrintable(refSites.at(i)), len);
156 "::storeClockSetup(): cannot put data into " + ncdf.
getFileName());
161 "::storeClockSetup(): the data were successfully stored in " + ncdf.
getFileName());
179 "::storeErpSetup(): format description failed");
192 "::storeErpSetup(): cannot put data into " + ncdf.
getFileName());
197 "::storeErpSetup(): the data were successfully stored in " + ncdf.
getFileName());
215 "::storeIonoSetup(): format description failed");
223 for (
int i=0; i<sites.size(); i++)
225 strncpy(pS + len*i, qPrintable(sites.at(i)), len);
233 "::storeIonoSetup(): cannot put data into " + ncdf.
getFileName());
238 "::storeIonoSetup(): the data were successfully stored in " + ncdf.
getFileName());
251 int numOfBaselines=baselineNames.size();
256 "::storeSolveWeights(): cannot put data into " + ncdf.
getFileName() +
": groupBlWeights is NULL");
259 if (numOfBaselines != (
int)groupBlWeights->
nCol())
262 "::storeSolveWeights(): cannot put data into " + ncdf.
getFileName() +
263 ": baselineNames (" + QString(
"").setNum(baselineNames.size()) +
") and groupBlWeights (" +
264 QString(
"").setNum((
int)groupBlWeights->
nCol()) +
") dimensions missmatch");
274 "::storeSolveWeights(): format description failed");
285 for (
int i=0; i<numOfBaselines; i++)
288 pW[numOfBaselines + i] = groupBlWeights->
getElement(1, i);
289 strncpy(pS + 2*len*i , qPrintable(baselineNames.at(i).mid(0,8)), len);
290 strncpy(pS + 2*len*i + len, qPrintable(baselineNames.at(i).mid(9,8)), len);
297 "::storeSolveWeights(): cannot put data into " + ncdf.
getFileName());
302 "::storeSolveWeights(): the data were successfully stored in " + ncdf.
getFileName());
310 const QVector< QVector<int> > &stationsSelection)
320 "::storeSelectionStatus(): format description failed");
329 pS[i] = sourcesSelection.at(i);
334 pB[
numOfStn_*j + i] = stationsSelection.at(i).at(j);
341 "::storeSelectionStatus(): cannot put data into " + ncdf.
getFileName());
346 "::storeSelectionStatus(): the data were successfully stored in " + ncdf.
getFileName());
355 if (!baselines.size())
367 "::storeBaselineClockSetup(): format description failed");
376 for (
int i=0; i<baselines.size(); i++)
378 strncpy(pS + 2*len*i , qPrintable(baselines.at(i).mid(0,8)), len);
379 strncpy(pS + 2*len*i + len, qPrintable(baselines.at(i).mid(9,8)), len);
386 "::storeBaselineClockSetup(): cannot put data into " + ncdf.
getFileName());
391 "::storeBaselineClockSetup(): the data were successfully stored in " + ncdf.
getFileName());
399 const QVector<QString> &eccTypes,
const QVector<QString> &eccNums,
SgMatrix* eccVals,
400 const QString &eccFileName)
410 "::storeEccentricities(): format description failed");
424 strncpy(pT + lT*i, qPrintable(eccTypes.at(i)), lT);
425 strncpy(pS + lS*i, qPrintable(stationsNames.at(i)), lS);
426 strncpy(pM + lM*i, qPrintable(eccNums.at(i)), lM);
436 "::storeEccentricities(): cannot put data into " + ncdf.
getFileName());
441 "::storeEccentricities(): the data were successfully stored in " + ncdf.
getFileName());
449 const QVector< QVector<int> > &flybyFlags,
const QVector<QString> &statCalNames,
450 const QVector<QString> &flybyNames,
const QVector<QString> &calSiteNames,
451 const QVector<QString> &obsCalNames)
466 "::storeCalibrations(): format description failed");
482 p[i] = statCalFlags[i];
487 for (
int j=0; j<l; j++)
488 p[l*iStn + j] = (flybyFlags[iStn])[j];
491 n = statCalNames.size();
493 for (
int i=0; i<n; i++)
494 strncpy(c + l*i, qPrintable(statCalNames.at(i)), l);
497 n = flybyNames.size();
499 for (
int i=0; i<n; i++)
500 strncpy(c + l*i, qPrintable(flybyNames.at(i)), l);
505 strncpy(c + l*i, qPrintable(calSiteNames.at(i)), l);
508 n = obsCalNames.size();
510 for (
int i=0; i<n; i++)
511 strncpy(c + l*i, qPrintable(obsCalNames.at(i)), l);
517 "::storeCalibrations(): cannot put data into " + ncdf.
getFileName());
522 "::storeCalibrations(): the data were successfully stored in " + ncdf.
getFileName());
530 const QVector<int> &cbFlags,
const QString& band)
538 int numCB, stnNameLength;
539 numCB = cbNames.size();
542 stnNameLength = cbNames.at(0).size();
551 "::storeClockBreaks(): format description failed");
566 for (
int i=0; i<numCB; i++)
568 pF[i] = cbFlags.at(i);
569 pT[i] = cbEpochs.at(i).toDouble();
570 strncpy(pS + stnNameLength*i, qPrintable(cbNames.at(i)), stnNameLength);
577 "::storeClockBreaks(): cannot put data into " + ncdf.
getFileName());
582 "::storeClockBreaks(): the data were successfully stored in " + ncdf.
getFileName());
590 const QString& experimentName,
int experimentSerialNumber,
591 const QString& experimentDescription,
const QString& recordingMode,
593 const SgMJD& tStart,
const SgMJD& tFinis,
int cppsIdx)
603 "::storeSessionHead(): station list size mismatch: " + QString(
"").setNum(
numOfStn_) +
604 " vs " + QString(
"").setNum(stations.size()));
610 "::storeSessionHead(): source list size mismatch: " + QString(
"").setNum(
numOfSrc_) +
611 " vs " + QString(
"").setNum(sources.size()));
627 "::storeSessionHead(): format description failed");
654 tStart.
toYMDHMS_tr(ep[0], ep[1], ep[2], ep[3], ep[4], f);
655 for (
int i=0; i<5; i++)
657 tFinis.
toYMDHMS_tr(ep[0], ep[1], ep[2], ep[3], ep[4], f);
658 for (
int i=0; i<5; i++)
663 len = stations.at(0).size();
665 for (
int i=0; i<stations.size(); i++)
666 strncpy(pS + len*i, qPrintable(stations.at(i)), len);
670 len = sources.at(0).size();
672 for (
int i=0; i<sources.size(); i++)
673 strncpy(pS + len*i, qPrintable(sources.at(i)), len);
677 strncpy(pS, qPrintable(corrType), corrType.size());
680 strncpy(pS, qPrintable(corrName), corrName.size());
683 strncpy(pS, qPrintable(piName), piName.size());
686 strncpy(pS, qPrintable(experimentName), experimentName.size());
691 strncpy(pS, qPrintable(experimentDescription), experimentDescription.size());
694 strncpy(pS, qPrintable(recordingMode), recordingMode.size());
701 "::storeSessionHead(): cannot put data into " + ncdf.
getFileName());
706 "::storeSessionHead(): the data were successfully stored in " + ncdf.
getFileName());
723 "::storeLeapSecond(): format description failed");
734 "::storeLeapSecond(): cannot put data into " + ncdf.
getFileName());
740 "::storeLeapSecond(): the data were successfully stored in " + ncdf.
getFileName());
754 int num=cableSignByKey.size(), l;
758 "::storeMiscCable(): nothing to write");
764 for (QMap<QString, QString>::const_iterator it=cableSignByKey.begin(); it!=cableSignByKey.end(); ++it)
766 if (l < it.key().size())
768 signs += it.value() +
" ";
771 if (signs.size() != 2*num - 1)
774 "::storeMiscCable(): signs size mismatch: " + QString(
"").setNum(signs.size()) +
775 " vs " + QString(
"").setNum(2*num - 1));
784 "::storeMiscCable(): format description failed");
797 for (QMap<QString, QString>::const_iterator it=cableSignByKey.begin();
798 it!=cableSignByKey.end(); ++it, idx++)
799 strncpy(pStn + l*idx, qPrintable(it.key()), l);
800 strncpy(pSgn, qPrintable(signs), signs.size());
806 "::storeMiscCable(): cannot put data into " + ncdf.
getFileName());
811 "::storeMiscCable(): the data were successfully stored in " + ncdf.
getFileName());
819 const QVector<QString>& fourfitControlFile,
const QVector<QString>& fourfitCommand,
820 const QVector<int>& numLags,
const QVector<double>& apLength)
828 "::storeMiscFourFit(): the band \"" + band +
"\" is not registered");
840 if (
numOfObs_ != fourfitControlFile.size())
843 "::storeMiscFourFit(): fourfitControlFile vector size mismatch: " +
844 QString(
"").sprintf(
"%d vs %d",
numOfObs_, fourfitControlFile.size()));
852 if (lCmd < fourfitCommand.at(i).size())
853 lCmd = fourfitCommand.at(i).size();
854 if (lCnt < fourfitControlFile.at(i).size())
855 lCnt = fourfitControlFile.at(i).size();
863 "::storeMiscFourFit(): format description failed");
870 ncdf.
setServiceVars(var->
getStub(),
"Data are extracted from correlator output",
"Obs",
"TimeUTC.nc");
882 pNum[i] = numLags.at(i);
883 pApL[i] = apLength.at(i);
885 strncpy(pCmd + lCmd*i, qPrintable(fourfitCommand.at(i)), lCmd);
886 strncpy(pCnt + lCnt*i, qPrintable(fourfitControlFile.at(i)), lCnt);
894 "::storeMiscFourFit(): cannot put data into " + ncdf.
getFileName());
899 "::storeMiscFourFit(): the data were successfully stored in " + ncdf.
getFileName());
915 for (
int i=0; i<nCtrl; i++)
923 "::storeCalcInfo(): the sizes of control names and values mismatch");
927 for (
int i=0; i<nOcnLdSts; i++)
969 numStn = calcInfo.
stations().size();
980 "::storeCalcInfo(): format description failed");
987 "::storeCalcInfo(): the UT1 interpolation data are not defined");
993 "::storeCalcInfo(): the PM interpolation data are not defined");
1089 for (
int i=0; i<nCtrl; i++)
1092 strncpy(pCtrlN + lCtrlName*i, qPrintable(calcInfo.
controlFlagNames().at(i)), lCtrlName);
1094 for (
int i=0; i<nOcnLdSts; i++)
1095 strncpy(pOSts + lOcnLdSts*i, qPrintable(calcInfo.
oLoadStationStatus().at(i)), lOcnLdSts);
1161 for (
unsigned int i=0; i<calcInfo.
ut1InterpData()->nRow(); i++)
1162 for (
unsigned int j=0; j<calcInfo.
ut1InterpData()->nCol(); j++)
1164 for (
unsigned int i=0; i<calcInfo.
wobInterpData()->nRow(); i++)
1165 for (
unsigned int j=0; j<calcInfo.
wobInterpData()->nCol(); j++)
1171 for (
int i=0; i<numStn; i++)
1176 for (
int j=0; j<11; j++)
1186 for (
int j=0; j<6; j++)
1191 "::storeCalcInfo(): the stnInfo is NULL for idx=" + QString(
"").setNum(i));
1199 "::storeCalcInfo(): cannot put data into " + ncdf.
getFileName());
1204 "::storeCalcInfo(): the data were successfully stored in " + ncdf.
getFileName());
1221 int nPmArrayInfo, nUtArrayInfo, nPmValues, nUtValues;
1222 nPmArrayInfo = pmArrayInfo->
n();
1223 nUtArrayInfo = utArrayInfo->
n();
1224 nPmValues = pmValues->
nRow();
1225 nUtValues = utValues->
n();
1230 "::storeCalcEop(): size mismatch for UT1ArrayInfo: " +
1237 "::storeCalcEop(): size mismatch for WobArrayInfo: " +
1253 "::storeCalcEop(): format description failed");
1281 for (
int i=0; i<nPmArrayInfo; i++)
1283 for (
int i=0; i<nUtArrayInfo; i++)
1285 for (
int i=0; i<nPmValues; i++)
1290 for (
int i=0; i<nUtValues; i++)
1310 "::storeCalcEop(): cannot put data into " + ncdf.
getFileName());
1315 "::storeCalcEop(): the data were successfully stored in " + ncdf.
getFileName());
1333 else if (sourcesNames.size() !=
numOfSrc_)
1336 "::storeSourcesApriories(): size mismatch for sourcesNames: " +
1337 QString(
"").sprintf(
"%d vs %d", sourcesNames.size(),
numOfSrc_));
1343 "::storeSourcesApriories(): size mismatch for sourcesRefs: " +
1344 QString(
"").sprintf(
"%d vs %d", sourcesRefs.size(),
numOfSrc_));
1350 "::storeSourcesApriories(): size mismatch for sourcesCoords: " +
1351 QString(
"").sprintf(
"%d vs %d", cooRaDe->
nRow(),
numOfSrc_));
1359 if (lRef < sourcesRefs.at(i).size())
1360 lRef = sourcesRefs.at(i).size();
1361 if (lNam < sourcesNames.at(i).size())
1362 lNam = sourcesNames.at(i).size();
1370 "::storeSourcesApriories(): format description failed");
1389 strncpy(pName + lNam*i, qPrintable(sourcesNames.at(i)), lNam);
1390 strncpy(pRefr + lRef*i, qPrintable(sourcesRefs .at(i)), lRef);
1397 "::storeSourcesApriories(): cannot put data into " + ncdf.
getFileName());
1402 "::storeSourcesApriories(): the data were successfully stored in " + ncdf.
getFileName());
1416 if (siteNames.size() != (
int)offsets_n_rates->
nRow())
1419 "::storeClockApriories(): size of siteNames (" + QString(
"").setNum(siteNames.size()) +
1420 ") and offset/rates (" + QString(
"").setNum(offsets_n_rates->
nRow()) +
") mismatch");
1425 int nS=siteNames.size();
1427 for (
int i=0; i<nS; i++)
1428 if (lNam < siteNames.at(i).size())
1429 lNam = siteNames.at(i).size();
1439 "::storeClockApriories(): format description failed");
1456 for (
int i=0; i<nS; i++)
1460 strncpy(pS + lNam*i, qPrintable(siteNames.at(i)), lNam);
1467 "::storeClockApriories(): cannot put data into " + ncdf.
getFileName());
1472 "::storeClockApriories(): the data were successfully stored in " + ncdf.
getFileName());
1489 else if (stationsNames.size() !=
numOfStn_)
1492 "::storeStationsApriories(): size mismatch for sourcesNames: " +
1493 QString(
"").sprintf(
"%d vs %d", stationsNames.size(),
numOfStn_));
1496 if (tectonicPlateNames.size() !=
numOfStn_)
1499 "::storeStationsApriories(): size mismatch for the list of tectonic plate names: " +
1500 QString(
"").sprintf(
"%d vs %d", tectonicPlateNames.size(),
numOfStn_));
1506 "::storeStationsApriories(): size mismatch for cooXYZ: " +
1507 QString(
"").sprintf(
"%d vs %d", cooXYZ->
nRow(),
numOfStn_));
1517 "::storeStationsApriories(): format description failed");
1534 strncpy(pName + lNam*i, qPrintable(stationsNames .at(i)), lNam);
1535 strncpy(pTplt + lTpl*i, qPrintable(tectonicPlateNames .at(i)), lTpl);
1542 "::storeStationsApriories(): cannot put data into " + ncdf.
getFileName());
1547 "::storeStationsApriories(): the data were successfully stored in " + ncdf.
getFileName());
1565 "::storeAntennaApriories(): size mismatch for sourcesNames: " +
1566 QString(
"").sprintf(
"%d vs %d", stationsNames.size(),
numOfStn_));
1572 "::storeAntennaApriories(): size mismatch for the list of axis types: " +
1573 QString(
"").sprintf(
"%d vs %d", axisTypes.size(),
numOfStn_));
1576 if (axisOffsets->
n() != (
unsigned int)
numOfStn_)
1579 "::storeAntennaApriories(): size mismatch for axisOffsets: " +
1580 QString(
"").sprintf(
"%d vs %d", axisOffsets->
n(),
numOfStn_));
1586 "::storeAntennaApriories(): size mismatch for axisTilts: " +
1587 QString(
"").sprintf(
"%d vs %d", axisTilts->
nRow(),
numOfStn_));
1596 "::storeAntennaApriories(): format description failed");
1613 pTilt[2*i + 1] = axisTilts->
getElement(i, 1);
1614 pType[i ] = axisTypes.at(i);
1615 strncpy(pName + lNam*i, qPrintable(stationsNames .at(i)), lNam);
1622 "::storeAntennaApriories(): cannot put data into " + ncdf.
getFileName());
1627 "::storeAntennaApriories(): the data were successfully stored in " + ncdf.
getFileName());
1643 QString outputFileName(
"");
1650 "::composeWrapperFile(): the name for the new wrapper file: " + outputFileName);
1659 "::composeWrapperFile(): cannot create a path to the root directory, " +
path2RootDir_);
1664 "::composeWrapperFile(): a path to the root directory, " +
path2RootDir_ +
1665 ", has been created");
1673 if (!(perm & QFile::WriteGroup && perm & QFile::ExeGroup))
1675 if (!QFile::setPermissions(
path2RootDir_, perm | QFile::WriteGroup | QFile::ExeGroup))
1677 "::composeWrapperFile(): cannot change permissions of the directory \"" +
1682 "::composeWrapperFile(): permissions of the directory \"" +
path2RootDir_ +
"\" looks fine");
1687 if (f.open(QFile::WriteOnly))
1720 QFile::Permissions perm=f.permissions();
1721 if (!f.setPermissions(perm | QFile::WriteGroup))
1723 "::composeWrapperFile(): cannot change permissions of the file \"" + f.fileName() +
"\"");
1726 "::composeWrapperFile(): the wrapper file \"" + f.fileName() +
"\" has been composed");
1731 "::composeWrapperFile(): cannot open with write access the wrapper file \"" +
1732 f.fileName() +
"\"");
1737 std::cout <<
"\nDRY RUN: The wrapper file will be created: \""
1738 << qPrintable(
path2RootDir_ +
"/" + outputFileName) <<
"\"\n";
1750 QString sPrefix(
""), sVersion(
""), sSuffix(
""), sExtension(
"");
1751 QString sKind(
""), sOrganization(
""), str(
"");
1752 rx.setMinimal(
true);
1759 if (!newName.contains(
'_'))
1765 rx.setPattern(
"^([-a-zA-Z0-9]+)_(\\S+)$");
1766 if (newName.contains(rx))
1768 sPrefix = rx.cap(1);
1771 rx.setPattern(
"^(\\S+)_V(\\d+)([_\\.]+)(\\S+)$");
1772 if (newName.contains(rx))
1774 sVersion = rx.cap(2);
1775 ver = sVersion.toInt();
1778 rx.setPattern(
"^(\\S+)_k([A-Za-z0-9]+)([_\\.]+)(\\S+)$");
1779 if (newName.contains(rx))
1784 rx.setPattern(
"^(\\S+)_i([A-Za-z0-9]+)([_\\.]+)(\\S+)$");
1785 rx.setMinimal(
true);
1786 if (newName.contains(rx))
1791 if (str.size() && str != sOrganization)
1793 "::createWrapperFileName(): the organization name has been adjusted: " + str +
1794 " => " + sOrganization);
1796 rx.setPattern(
"^(\\S+)\\.(\\S+)$");
1797 if (newName.contains(rx))
1799 sExtension = rx.cap(2);
1802 if (sExtension.size()==0)
1805 sSuffix.sprintf(
"%s%s.%s",
1806 qPrintable(sOrganization.size()?(
"_i" + sOrganization):
""),
1807 qPrintable(sKind.size()?(
"_k" + sKind):
""),
1808 qPrintable(sExtension));
1810 newName.sprintf(
"%s_V%03d%s",
1811 qPrintable(sPrefix), ++ver, qPrintable(sSuffix));
1813 while (QFile(
path2RootDir_ +
"/" + newName).exists() && ver<1000)
1815 newName.sprintf(
"%s_V%03d%s",
1816 qPrintable(sPrefix), ++ver, qPrintable(sSuffix));
1821 "::createWrapperFileName(): the version number is too big");
1826 qPrintable(sPrefix), ver, qPrintable(sSuffix));
1833 qPrintable(sPrefix), ver, qPrintable(sSuffix));
1864 s <<
"Begin History\n";
1872 s <<
"Version " << hd.
version_ <<
"\n";
1873 s <<
"CreatedBy " << hd.
creator_ <<
"\n";
1896 s <<
"!\nEnd History\n";
1906 QString subDir(
""), baseName(
"");
1909 s <<
"!\nDefault_Dir " << (currentSubDir=var.
getSubDir()) <<
"\n";
1918 QString str, subDir(
"");
1919 QMap<QString, BandData>::iterator
1923 s <<
"Begin Session\n";
1950 s <<
"!\nEnd Session\n";
1958 QString str, subDir(
"");
1986 QString str, subDir(
"");
1987 s <<
"!\nBegin Scan\n";
1999 s <<
"!\nEnd Scan\n";
2007 QString str, subDir(
"");
2008 QMap<QString, BandData>::iterator
2010 s <<
"!\nBegin Observation\n";
2101 s <<
"!\nEnd Observation\n";
2113 s <<
"Default_dir " << subDir <<
"\n";
2115 s <<
"Begin Session\n";
2126 s <<
"End Session\n";
2129 s <<
"Begin Scan\n";
2134 s <<
"Begin Observation\n";
2139 s <<
"End Observation\n";
2152 for (
int i=0; i<pgd.
content_.size(); i++)
2164 if (!history.size())
2167 "::saveLocalHistory(): there is no history to save");
2179 if (dir.mkpath(str))
2182 "::saveLocalHistory(): the directory \"" + str +
"\" has been created");
2185 QFile::Permissions perm=QFile::permissions(str);
2186 if (!QFile::setPermissions(str, perm | QFile::WriteGroup | QFile::ExeGroup))
2188 "::saveLocalHistory(): cannot change permissions of the directory \"" + str +
"\"");
2194 "::saveLocalHistory(): cannot create the directory \"" + str +
"\"; saving history failed");
2199 if (QFile(str).exists())
2203 "::saveLocalHistory(): supposed to be a new history file \"" + str +
2204 "] already exists; the file has been removed");
2210 const QString timeTag(
"TIMETAG"), versionTag(
"MK3DB_VERSION");
2213 if (f.open(QFile::WriteOnly | QFile::Append))
2219 for (
int i=0; i<history.size(); i++)
2221 rec = history.at(i);
2233 QFile::Permissions perm=f.permissions();
2234 if (!f.setPermissions(perm | QFile::WriteGroup))
2236 "::saveLocalHistory(): cannot adjust the permissions of the file \"" + f.fileName() +
"\"");
2241 "::saveLocalHistory(): cannot open the history file \"" + f.fileName() +
"\" for write access");
2245 "::saveLocalHistory(): saved " + str.setNum(history.size()) +
2246 " historical records into the file \"" + f.fileName() +
"\"");
2251 std::cout <<
"DRY RUN: The file with local history will be created: \""
2262 const QString& softwareName,
2263 const SgMJD& epochOfCreation,
2264 const QString& creator,
2265 const QString& defaultDir,
2266 const QString& historyFileName,
2267 const QString& version,
2268 bool isMk3Compatible)
2270 QString str, key(softwareName);
2271 if (!history.size())
2274 "::saveForeignHistory(): there is no history to save");
2301 if (dir.mkpath(str))
2304 "::saveForeignHistory(): the directory \"" + str +
"\" has been created");
2307 QFile::Permissions perm=QFile::permissions(str);
2308 if (!QFile::setPermissions(str, perm | QFile::WriteGroup | QFile::ExeGroup))
2310 "::saveForeignHistory(): cannot change permissions of the directory \"" + str +
"\"");
2316 "::saveForeignHistory(): cannot create the directory \"" + str +
"\"; saving history failed");
2321 if (QFile(str).exists())
2325 "::saveForeignHistory(): supposed to be a new history file \"" + str +
2326 "\" already exists; the file has been removed");
2331 const QString timeTag(
"TIMETAG"), versionTag(
"MK3DB_VERSION");
2335 if (f.open(QFile::WriteOnly | QFile::Append))
2340 s << versionTag <<
" " << str.setNum(v) <<
"\n";
2341 for (
int i=0; i<history.size(); i++)
2343 rec = history.at(i);
2351 s << versionTag <<
" " << str.setNum(v) <<
"\n";
2359 QFile::Permissions perm=f.permissions();
2360 if (!f.setPermissions(perm | QFile::WriteGroup))
2362 "::saveForeignHistory(): cannot adjust the permissions of the file \"" + f.fileName() +
"\"");
2367 "::saveForeignHistory(): cannot open the history file \"" + f.fileName() +
"\" for write access");
2371 "::saveForeignHistory(): saved " + str.setNum(history.size()) +
2372 " historical records into the file \"" + f.fileName() +
"\"");
2377 std::cout <<
"DRY RUN: The file with foreign history will be created: \""
SgVersion libraryVersion("SgLib", 0, 8, 2, "Compton Peak (rc2)", SgMJD(2023, 4, 3, 10, 59))
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")
QList< SgVgosDb::FmtChkVar * > fcfBlnClockSetup
QList< SgVgosDb::FmtChkVar * > fcfErpSetup
SgVgosDb::FmtChkVar fcClockBreakFlag("ClockBreakFlag", NC_SHORT, true, QList< int >()<< SD_Any, "BRK_FLAG", "Batchmode clock break flags")
QList< SgVgosDb::FmtChkVar * > fcfSelectionStatus
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 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")
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 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")
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 * > fcfClockBreak
QList< SgVgosDb::FmtChkVar * > fcfCalibrationSetup
QList< SgVgosDb::FmtChkVar * > fcfIonoSetup
QList< SgVgosDb::FmtChkVar * > fcfEccentricity
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 fcEccentricityType("EccentricityType", NC_CHAR, false, QList< int >()<< SD_NumStn<< 2, "ECCTYPES", "Eccentricity type: XY or NE")
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")
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 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?)")
QList< SgVgosDb::FmtChkVar * > fcfHead
SgVgosDb::FmtChkVar fcPoleTideControl
QList< SgVgosDb::FmtChkVar * > fcfCalcInfo
SgVgosDb::FmtChkVar fcStarControl
SgVgosDb::FmtChkVar fcOceanUpPhase
SgVgosDb::FmtChkVar fcCalcVersion
SgVgosDb::FmtChkVar fcClockAprioriRate
SgVgosDb::FmtChkVar fcPrecessionData
SgVgosDb::FmtChkVar fcUT1Values
SgVgosDb::FmtChkVar fcWobValues
SgVgosDb::FmtChkVar fcNumStation
SgVgosDb::FmtChkVar fcCTIMessage
SgVgosDb::FmtChkVar fcRelativityData
SgVgosDb::FmtChkVar fcCalcUt1Module
SgVgosDb::FmtChkVar fcAxisOffsetControl
SgVgosDb::FmtChkVar fcOceanStationsFlag
SgVgosDb::FmtChkVar fcNumObs
SgVgosDb::FmtChkVar fcFourFitCmdCString_v1002
SgVgosDb::FmtChkVar fciUTCInterval
SgVgosDb::FmtChkVar fcCalcControlValues
SgVgosDb::FmtChkVar fcRelativityControl
SgVgosDb::FmtChkVar fcOceanHorizontalPhase
SgVgosDb::FmtChkVar fcAntennaName
SgVgosDb::FmtChkVar fcAxisOffset
SgVgosDb::FmtChkVar fcPoleTideMessage
SgVgosDb::FmtChkVar fcFourfitControlFile_v1002
SgVgosDb::FmtChkVar fcATMControl
SgVgosDb::FmtChkVar fcClockAprioriSite
SgVgosDb::FmtChkVar fcCorrelatorType
QList< SgVgosDb::FmtChkVar * > fcfCalcEop
SgVgosDb::FmtChkVar fcWobIntrpMode
SgVgosDb::FmtChkVar fcOceanUpAmp
SgVgosDb::FmtChkVar fcNumLagsUsed_v1002
SgVgosDb::FmtChkVar fcCableSign
SgVgosDb::FmtChkVar fcParallaxControl
SgVgosDb::FmtChkVar fcSourceList
SgVgosDb::FmtChkVar fcParallaxMessage
SgVgosDb::FmtChkVar fcUT1ArrayInfo
SgVgosDb::FmtChkVar fcExpDescription
SgVgosDb::FmtChkVar fcOceanHorizontalAmp
SgVgosDb::FmtChkVar fcClockAprioriOffset
SgVgosDb::FmtChkVar fcOceanMessage
SgVgosDb::FmtChkVar fcStationPlateName
SgVgosDb::FmtChkVar fcATIMessage
SgVgosDb::FmtChkVar fcNutationControl
SgVgosDb::FmtChkVar fcOceanControl
SgVgosDb::FmtChkVar fcNutationMessage
SgVgosDb::FmtChkVar fcStationList
QList< SgVgosDb::FmtChkVar * > fcfSourceApriori
SgVgosDb::FmtChkVar fcWobbleControl
SgVgosDb::FmtChkVar fcAplength_v1002
SgVgosDb::FmtChkVar fcAxisType
SgVgosDb::FmtChkVar fcUT1EPOCH
SgVgosDb::FmtChkVar fcSourceReference
SgVgosDb::FmtChkVar fcWobArrayInfo
SgVgosDb::FmtChkVar fcEarthTideControl
SgVgosDb::FmtChkVar fcOceanPoleTideCoef
SgVgosDb::FmtChkVar fcNumScan
SgVgosDb::FmtChkVar fcTidalUt1Control
SgVgosDb::FmtChkVar fcEarthTideData
SgVgosDb::FmtChkVar fcLeapSecond
SgVgosDb::FmtChkVar fcFeedhornMessage
SgVgosDb::FmtChkVar fcEarthTideMessage
SgVgosDb::FmtChkVar fcWOBEPOCH
SgVgosDb::FmtChkVar fcUT1Control
QList< SgVgosDb::FmtChkVar * > fcfClockApriori
SgVgosDb::FmtChkVar fcATMMessage
SgVgosDb::FmtChkVar fcExpName
SgVgosDb::FmtChkVar fcUT1IntrpMode
SgVgosDb::FmtChkVar fcPrincipalInvestigator
QList< SgVgosDb::FmtChkVar * > fcfStationApriori
SgVgosDb::FmtChkVar fcAxisTilt
SgVgosDb::FmtChkVar fcSource2000RaDec
SgVgosDb::FmtChkVar fcRecordingMode
SgVgosDb::FmtChkVar fcPepMessage
SgVgosDb::FmtChkVar fcWobbleOrigin
SgVgosDb::FmtChkVar fcCorrelator
SgVgosDb::FmtChkVar fcCalcWobModule
SgVgosDb::FmtChkVar fcSourceNameApriori
QList< SgVgosDb::FmtChkVar * > fcfAntennaApriori
SgVgosDb::FmtChkVar fcUT1Origin
SgVgosDb::FmtChkVar fcStationXYZ
SgVgosDb::FmtChkVar fcCTIControl
QList< SgVgosDb::FmtChkVar * > fcfMiscCable
SgVgosDb::FmtChkVar fcCorrPostProcSoftware
SgVgosDb::FmtChkVar fcStarMessage
SgVgosDb::FmtChkVar fcCalcControlNames
QList< SgVgosDb::FmtChkVar * > fcfMiscFourFit_v1002
QList< SgVgosDb::FmtChkVar * > fcfLeapSecond
SgVgosDb::FmtChkVar fcExpSerialNumber
SgVgosDb::FmtChkVar fcSiteZenithDelay
SgVgosDb::FmtChkVar fcTheoryMessage
SgVgosDb::FmtChkVar fcNumSource
SgVgosDb::FmtChkVar fcAxisOffsetMessage
SgVgosDb::FmtChkVar fcCableStnName
SgVgosDb::FmtChkVar fcSiteMessage
SgVgosDb::FmtChkVar fcATIControl
SgVgosDb::FmtChkVar fcStationNameApriori
const QString & getAcAbbName() const
const QString & getAcFullName() const
const QString & getUserName() const
const SgIdentities * currentIdentities_
const SgVersion * currentDriverVersion_
virtual void write(LogLevel, quint32, const QString &, bool=false)
@ F_Simple
Digits: 2010/04/02 17:02:43.6.
QString toString(Format format=F_Verbose) const
void toYMDHMS_tr(int &nYear, int &nMonth, int &nDay, int &nHour, int &nMin, double &dSec) const
static SgMJD currentMJD()
unsigned int nRow() const
double getElement(unsigned int i, unsigned int j) const
unsigned int nCol() const
const QString & getDefinition() const
const QString & getOrigin() const
const QString & getControlFlag() const
double getPrecessionData() const
QList< SgVlbiStationInfo * > & stations()
DasModel & ut1Interpolation()
QList< QString > & oLoadStationStatus()
SgMatrix *& wobInterpData()
short getFlagTidalUt1() const
DasModel & coordinateTime()
double getRelativityData() const
QList< QString > & controlFlagNames()
QList< double > & siteZenDelays()
SgMatrix *& ut1InterpData()
DasModel & oceanLoading()
DasModel & polarMotionInterpolation()
double getDversion() const
QList< int > & controlFlagValues()
double getEarthTideData(int i) const
const char * data2char() const
const short * data2short() const
const double * data2double() const
SgNcdfVariable * lookupVar(const QString &name) const
void setServiceVars(const QString &stub, const QString &dataOrigin, const QString &timeTag, const QString &timeTagFile)
const short * lookupData2short(const QString &name) const
const double * lookupData2double(const QString &name) const
const QString & getFileName() const
void setOperationMode(OperationMode om)
const char * lookupData2char(const QString &name) const
const int * lookupData2int(const QString &name) const
const QString & getSubDir() const
QString name4export(const QString &rootDir, SgNetCdf::OperationMode om, const QString &aBand="")
const QString & getStub() const
const QString & getFileName4Output() const
double getElement(unsigned int i) const
const QString & getSoftwareName() const
const QList< int > & dims() const
const QString & name() const
void addDimension(int num)
void alternateDimension(int i, int num)
SgVdbVariable vCal_EarthTide_
SgVdbVariable vErpApriori_
SgVdbVariable vClockBreak_
SgVdbVariable vSourceCrossRef_
bool storeClockSetup(const SgVector *interval, const SgVector *rateConstraint, const QList< QString > &sites, const QList< QString > &refSites)
SgVdbVariable vNutationNro_
static const QString className()
SgVdbVariable vClockApriori_
bool storeSessionHead(const QString &corrType, const QString &corrName, const QString &piName, const QString &experimentName, int experimentSerialNumber, const QString &experimentDescription, const QString &recordingMode, const QList< QString > &stations, const QList< QString > &sources, const SgMJD &tStart, const SgMJD &tFinis, int cppsIdx)
SgVdbVariable vCal_Wobble_
bool setupFormat(const QList< FmtChkVar * > &, SgNetCdf &, const QString &stationKey=QString(""), const QString &bandKey=QString(""))
SgVdbVariable vStationApriori_
SgVdbVariable vPart_NutationNro_
void composeObservationBlock(QTextStream &)
SgVdbVariable vEccentricity_
SgVdbVariable vNutationEqx_
QMap< QString, StationDescriptor > stnDescriptorByKey_
SgVdbVariable vCal_PoleTideOldRestore_
SgNetCdf::OperationMode operationMode_
void composeHistoryBlock(QTextStream &)
SgVdbVariable vCal_BendSun_
SgVdbVariable vPart_Parallax_
void composeProgramGenericBlock(QTextStream &, const ProgramGenericDescriptor &)
bool storeClockApriories(const QList< QString > &siteNames, const SgMatrix *offsets_n_rates)
bool saveForeignHistory(const SgVlbiHistory &history, const QString &softwareName, const SgMJD &epochOfCreation, const QString &creator, const QString &defaultDir, const QString &historyFileName, const QString &version, bool isMk3Compatible=true)
bool storeMiscFourFit(const QString &band, SgVlbiSessionInfo::OriginType originType, const QVector< QString > &fourfitControlFile, const QVector< QString > &fourfitCommand, const QVector< int > &numLags, const QVector< double > &apLength)
bool storeCalibrations(int obsCalFlags, const QVector< int > &statCalFlags, const QVector< QVector< int > > &flybyFlags, const QVector< QString > &statCalNames, const QVector< QString > &flybyNames, const QVector< QString > &calSiteNames, const QVector< QString > &obsCalNames)
bool storeIonoSetup(const QList< int > &flags, const QList< QString > &sites)
SgVdbVariable vPart_PoleTide_
bool storeSourcesApriories(const QList< QString > &sourcesNames, const QList< QString > &sourcesRefs, const SgMatrix *cooRaDe)
bool have2adjustPermissions_
SgVdbVariable vCal_BendSunHigher_
bool storeSolveWeights(const QVector< QString > &baselineNames, SgMatrix *groupBlWeights)
SgVdbVariable vPart_Precession_
bool storeAtmSetup(const SgVector *interval, const SgVector *rateConstraint, const QList< QString > &sites)
QList< HistoryDescriptor > historyDescriptors_
bool storeStationsApriories(const QList< QString > &stationsNames, const SgMatrix *cooXYZ, const QList< QString > &tectonicPlateNames)
HistoryDescriptor localHistory_
SgVdbVariable vGroupBLWeights_
void createWrapperFileName(QString &newName)
void composeStationBlock(QTextStream &, const StationDescriptor &)
void composeScanBlock(QTextStream &)
SgVdbVariable vCal_HiFreqLibration_
SgVdbVariable vObsCrossRef_
bool storeLeapSecond(int leapSeconds)
SgVdbVariable vAntennaApriori_
SgVdbVariable vScanTimeUTC_
bool storeErpSetup(double pmOffsetConstraint, double utOffsetConstraint)
bool storeCalcInfo(const SgModelsInfo &calcInfo)
bool composeWrapperFile()
SgVdbVariable vCal_OceanLoad_
SgVdbVariable vNutationEqx_kWahr_
SgVdbVariable vPart_Bend_
SgVdbVariable vStationCrossRef_
SgVdbVariable vMiscFourFit_
SgVdbVariable vCal_HfErp_
SgVdbVariable vMiscCable_
SgVdbVariable vCal_PoleTide_
SgVdbVariable vCal_OceanPoleTideLoad_
bool storeBaselineClockSetup(const QList< QString > &baselines)
void writeNcFileName(QTextStream &, QString ¤tSubDir, const SgVdbVariable &var)
bool storeAntennaApriories(const QList< QString > &stationsNames, const QList< int > &axisTypes, const SgVector *axisOffsets, const SgMatrix *axisTilts)
QMap< QString, ProgramGenericDescriptor > progDescriptorByName_
QMap< QString, BandData > bandDataByName_
bool storeClockBreaks(const QVector< QString > &cbNames, const QVector< SgMJD > &cbEpochs, const QVector< int > &cbFlags, const QString &band="")
void composeProgramSolveBlock(QTextStream &)
SgVdbVariable vCal_FeedCorrection_
SgVdbVariable vCal_HfLibration_
SgVdbVariable vPart_NutationEqx_
SgVdbVariable vLeapSecond_
bool storeMiscCable(const QMap< QString, QString > &cableSignByKey)
SgVdbVariable vPart_Gamma_
SgVdbVariable vSourceApriori_
ProgramSolveDescriptor progSolveDescriptor_
SgVdbVariable vFeedRotNet_
SgVdbVariable vRateTheoretical_
bool have2redoLeapSecond_
SgVdbVariable vCal_OceanLoadOld_
SgVdbVariable vRot_CF2J2K_
SgVdbVariable vEphemeris_
SgVdbVariable vObservationTimeUTC_
void composeSessionBlock(QTextStream &)
void composeVersionBlock(QTextStream &)
bool storeCalcEop(const SgVector *pmArrayInfo, const SgVector *utArrayInfo, const SgMatrix *pmValues, const SgVector *utValues, const SgModelsInfo &calcInfo)
SgVdbVariable vPart_RaDec_
bool storeEccentricities(const QVector< QString > &stationsNames, const QVector< QString > &eccTypes, const QVector< QString > &eccNums, SgMatrix *eccVals, const QString &eccFileName)
bool storeSelectionStatus(const QVector< int > &sourcesSelection, const QVector< QVector< int > > &stationsSelection)
bool saveLocalHistory(const SgVlbiHistory &history)
SgVdbVariable vCorrRootFile_
SgVdbVariable vCal_TiltRemover_
SgVdbVariable vNGSQualityFlag_
SgVdbVariable vCal_Parallax_
SgVdbVariable vDelayTheoretical_
const SgMJD & getEpoch() const
const QString & getText() const
double getOLoadPhase(int iWave, int iCoord) const
double getOptLoadCoeff(int idx) const
double getOLoadAmplitude(int iWave, int iCoord) const
SgVdbVariable vCal_SlantPathIonoGroup_
SgVdbVariable vGroupDelayFull_
SgVdbVariable vDelayDataFlag_
SgVdbVariable vCorrelation_
SgVdbVariable vEffFreq_EqWt_
SgVdbVariable vPhaseDelayFull_
SgVdbVariable vGroupDelay_
SgVdbVariable vChannelInfo_
SgVdbVariable vGroupRate_
SgVdbVariable vNumPhaseAmbig_
SgVdbVariable vNumGroupAmbig_
SgVdbVariable vMiscFourFit_
SgVdbVariable vPhaseCalInfo_
SgVdbVariable vAmbigSize_
SgVdbVariable vQualityCode_
QString inputWrapperFileName_
QList< QString > content_
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_