27 #include <QtCore/QDateTime>
28 #include <QtCore/QDir>
29 #include <QtCore/QFile>
30 #include <QtCore/QList>
31 #include <QtCore/QMap>
67 static const QString
srcChars[] = {
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
68 "M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z"};
82 return "SgSolutionReporter";
92 creationEpoch_(
tZero),
94 solutionTypeName_(
"N/A"),
95 path2APrioriFiles_(
"NONE"),
176 for (
int i=0; i<
parList_.size(); i++)
184 for (
int i=0; i<
pwlList_.size(); i++)
188 for (
int i=0; i<
arcList_.size(); i++)
192 for (QMap<QString, SgEstimator::StochasticSolutionCarrier>::iterator it=
stcSolutions_.begin();
197 for (
int i=0; i<stcSC.
list_->size(); i++)
198 delete stcSC.
list_->at(i);
199 stcSC.
list_->clear();
246 if (useDelays && useRates)
264 QMap<QString, SgVlbiBaselineInfo*>::iterator itb;
267 double sum1(0.0), sum2(0.0), sumNRD(0.0), sumNRD_plus_15(0.0);
268 double ro, sig4NRD2, sig4NRD2_plus_15;
279 sig4NRD2_plus_15 = sig4NRD2 -
282 sumNRD += ro*ro/sig4NRD2;
283 sumNRD_plus_15 += ro*ro/sig4NRD2_plus_15;
303 QMap< QString, QList<SgVlbiObservation*> > obsBySrcNames;
304 QMap< QString, QList<SgVlbiObservation*> > obsByStnNames;
311 obsBySrcNames[o->
src()->
getKey()] << obs;
316 QMap< QString, QList<SgVlbiObservation*> >::iterator its;
317 for (its=obsBySrcNames.begin(); its!=obsBySrcNames.end(); ++its)
321 double sum1(0.0), sum2(0.0), sumNRD(0.0), sumNRD_plus_15(0.0), ro, sig4NRD2, sig4NRD2_plus_15;
323 for (
int i=0; i<obsList.size(); i++)
332 sumNRD += ro*ro/sig4NRD2;
333 sumNRD_plus_15 += ro*ro/sig4NRD2_plus_15;
358 for (its=obsByStnNames.begin(); its!=obsByStnNames.end(); ++its)
362 double sum1(0.0), sum2(0.0), sumNRD(0.0), sumNRD_plus_15(0.0), ro, sig4NRD2, sig4NRD2_plus_15;
364 for (
int i=0; i<obsList.size(); i++)
373 sumNRD += ro*ro/sig4NRD2;
374 sumNRD_plus_15 += ro*ro/sig4NRD2_plus_15;
405 for (
int i=0; i<xAll->size(); i++)
417 for (
int i=0; i<pwlList->size(); i++)
433 *pwl = *pwlList->at(i);
438 for (
int i=0; i<arcList->size(); i++)
441 *arc = *arcList->at(i);
451 const QMap<QString, SgEstimator::StochasticSolutionCarrier> stcs=estimator->
stcSolutions();
452 for (QMap<QString, SgEstimator::StochasticSolutionCarrier>::const_iterator it=stcs.begin();
453 it!=stcs.end(); ++it)
463 for (
int i=0; i<stcSC.
list_->size(); i++)
585 "::evaluateUsedErpApriori2(): the ERP reference time has been adjusted to " +
erpTref_.
toString());
603 "::evaluateUsedErpApriori(): the ERP reference time has been adjusted to " +
erpTref_.
toString());
605 bool isNormalSession;
631 prs_ut->append((pA_ut=
new SgParameter(
"UT1, 0-term (ms )")));
632 prs_ut->append((pB_ut=
new SgParameter(
"UT1, 1-term (ms/d )")));
634 prs_px->append((pA_px=
new SgParameter(
"PMx, 0-term (mas )")));
635 prs_px->append((pB_px=
new SgParameter(
"PMx, 1-term (mas/d )")));
637 prs_py->append((pA_py=
new SgParameter(
"PMy, 0-term (mas )")));
638 prs_py->append((pB_py=
new SgParameter(
"PMy, 1-term (mas/d )")));
640 prs_cx->append((pA_cx=
new SgParameter(
"CIPx, 0-term (mas )")));
641 prs_cx->append((pB_cx=
new SgParameter(
"CIPx, 1-term (mas/d )")));
643 prs_cy->append((pA_cy=
new SgParameter(
"CIPy, 0-term (mas )")));
644 prs_cy->append((pB_cy=
new SgParameter(
"CIPy, 1-term (mas/d )")));
648 prs_ut->append((pC_ut=
new SgParameter(
"UT1, 2-term (ms/d^2)")));
649 prs_ut->append((pD_ut=
new SgParameter(
"UT1, 3-term (ms/d^3)")));
650 prs_px->append((pC_px=
new SgParameter(
"PMx, 2-term (mas/d^2)")));
651 prs_px->append((pD_px=
new SgParameter(
"PMx, 3-term (mas/d^3)")));
652 prs_py->append((pC_py=
new SgParameter(
"PMy, 2-term (mas/d^2)")));
653 prs_py->append((pD_py=
new SgParameter(
"PMy, 3-term (mas/d^3)")));
654 prs_cx->append((pC_cx=
new SgParameter(
"CIPx, 2-term (mas/d^2)")));
655 prs_cx->append((pD_cx=
new SgParameter(
"CIPx, 3-term (mas/d^3)")));
656 prs_cy->append((pC_cy=
new SgParameter(
"CIPy, 2-term (mas/d^2)")));
657 prs_cy->append((pD_cy=
new SgParameter(
"CIPy, 3-term (mas/d^3)")));
659 for (
int i=0; i<prs_ut->size(); i++)
666 for (
int i=0; i<prs_px->size(); i++)
673 for (
int i=0; i<prs_py->size(); i++)
680 for (
int i=0; i<prs_cx->size(); i++)
687 for (
int i=0; i<prs_cy->size(); i++)
712 double sig, dT, dt, dt2, dt3;
730 dt = (*obs - t0) + dT;
815 for (
int i=0; i<prs_ut->size(); i++)
816 delete prs_ut->at(i);
817 for (
int i=0; i<prs_px->size(); i++)
818 delete prs_px->at(i);
819 for (
int i=0; i<prs_py->size(); i++)
820 delete prs_py->at(i);
821 for (
int i=0; i<prs_cx->size(); i++)
822 delete prs_cx->at(i);
823 for (
int i=0; i<prs_cy->size(); i++)
824 delete prs_cy->at(i);
846 "::calculateConditionNumber(): PxAll is NULL");
852 "::calculateConditionNumber(): the dimenstion of PxAll is less than unity, nothing to calculate");
859 "::calculateConditionNumber(): the dimenstion of PxAll is unity, nothing to calculate");
867 double s, betta, gamma;
872 for (
int i=0; i<n; i++)
873 for (
int j=0; j<n; j++)
876 for (
int l=0; l<n; l++)
879 for (
int i=l; i<n; i++)
883 for (
int i=l+1; i<n; i++)
887 for (
int j=l+1; j<n; j++)
890 for (
int i=l; i<n; i++)
893 for (
int i=l+1; i<n; i++)
900 for (
int i=0; i<n; i++)
905 for (
int i=0; i<n; i++)
907 std::cout << i <<
": " << u->
getElement(i) <<
"\n";
913 std::cout <<
"max eigenvalue= " << maxEv <<
", min eigenvalue= " << minEv
914 <<
"condition number= " << (
condNumber_=(minEv!=0.0?maxEv/minEv:-1.0))
925 const QString& fileName,
bool isNeedResidualsOutput)
930 "::report2spoolFile(): an attempt to create a report without a solution");
938 QFile f(path +
"/" + fileName);
939 QString auxFname(
"");
940 if (!f.open(QIODevice::WriteOnly))
943 "::report2spoolFile(): error opening output file: " + path +
"/" + fileName);
996 if (isNeedResidualsOutput)
1024 "::report2spoolFile(): the estimated zenith delays PWL-parameters have been saved "
1025 "in the file: " + path +
"/" + auxFname);
1028 "::report2spoolFile(): saving of the estimated zenith delays PWL-parameters failed");
1035 "::report2spoolFile(): the estimated clock PWL-parameters have been saved "
1036 "in the file: " + path +
"/" + auxFname);
1039 "::report2spoolFile(): saving of the estimated clock PWL-parameters failed");
1047 "::report2spoolFile(): the not used observations have been saved "
1048 "in the file: " + path2obsStatus +
"/" + auxFname);
1051 "::report2spoolFile(): saving of the not used observations failed");
1060 "::report2spoolFile(): the covariance matrix has been saved "
1061 "in the file: " + path +
"/" + auxFname);
1064 "::report2spoolFile(): saving of the covariance matrix failed");
1079 "::report2aposterioriFiles(): an attempt to create a report without a solution");
1127 "::report2aposterioriFiles(): a file with a posteriori positions "
1128 "of radio sources has been created");
1131 "::report2aposterioriFiles(): creating a file with a posteriori positions "
1132 "of radio sources failed");
1136 "::report2aposterioriFiles(): files with a posteriori positions "
1137 "of stations have been created");
1140 "::report2aposterioriFiles(): creating files with a posteriori positions "
1141 "of stations failed");
1150 const QString& fileNameBase)
1155 "::reportSources_Output4AposterioriFiles(): nothing to export, "
1156 "source positions were not estimated");
1175 QFile f(path +
"/" + fileNameBase +
".src");
1176 if (!f.open(QIODevice::WriteOnly))
1179 "::reportSources_Output4AposterioriFiles(): error opening output file: " + path +
1180 "/" + f.fileName() +
" for writing source a posteriori positions");
1186 ts <<
"$$ Source flyby mod file from local solution of " <<
session_->
getName() <<
" session\n";
1187 ts <<
"$$ " <<
usedSources_.size() <<
" total sources\n$$\n";
1202 str.sprintf(
"#-> %-8s %s %s %.6f %.6f %d %.6f",
1203 qPrintable(si->
getKey()),
1212 str.sprintf(
" %-8s %s %s %s",
1213 qPrintable(si->
getKey()),
1225 "::reportSources_Output4AposterioriFiles(): sources a posteriori positions were stored "
1226 "in file \"" + path +
"/" + f.fileName() +
"\"");
1234 const QString& fileNameBase)
1237 QFile f(path +
"/" + fileNameBase +
".sit");
1238 if (!f.open(QIODevice::WriteOnly))
1241 "::reportStations_Output4AposterioriFiles(): error opening output file: " + path +
1242 "/" + f.fileName() +
" for writing station a posteriori positions");
1245 QString sTsince(
"-- -- --");
1246 QString sT0(
"------");
1249 int nYear, nMonth, nDay, nHour, nMin;
1253 sTsince.sprintf(
"%02d %02d %02d", nYear%100, nMonth, nDay);
1257 sT0.sprintf(
"%02d%02d%02d", nYear%100, nMonth, nDay);
1268 <<
"$$ VLBI Site positions\n"
1269 <<
"$$ positions: x (m) y (m) z (m)\n";
1288 str.sprintf(
" %-8s %14.6f %14.6f %14.6f ",
1290 ts << str << sTsince <<
"\n";
1298 "::reportStations_Output4AposterioriFiles(): stations a posteriori coordinates were stored "
1299 "in file \"" + path +
"/" + f.fileName() +
"\"");
1305 "::reportStations_Output4AposterioriFiles(): external velocities were not used");
1309 f.setFileName(path +
"/" + fileNameBase +
".vel");
1310 if (!f.open(QIODevice::WriteOnly))
1313 "::reportStations_Output4AposterioriFiles(): error opening output file: " + path +
1314 "/" + f.fileName() +
" for writing station a posteriori velocities");
1325 <<
"$$ velocities: x (mm/yr) y (mm/yr) z (mm/yr)\n"
1340 str.sprintf(
" %-8s %8.1f %8.1f %8.1f",
1351 "::reportStations_Output4AposterioriFiles(): stations velocities were stored "
1352 "in file \"" + path +
"/" + f.fileName() +
"\"");
1361 int nYear, nMonth, nDay, nHour, nMin;
1363 QString str(
""), dbName(
"");
1366 nYear, nMonth, nDay, nHour, nMin, dSec);
1368 QDateTime dt(QDate(nYear, nMonth, nDay), QTime(nHour, nMin, (
int)(dSec)));
1369 QDateTime dtUTC(dt.toUTC());
1372 dtUTC.date().year() - (dtUTC.date().year()/100)*100,
1373 dtUTC.date().dayOfYear(),
1374 dtUTC.time().hour(),
1375 dtUTC.time().minute());
1379 nYear, nMonth, nDay, nHour, nMin, dSec);
1381 str.sprintf(
" Analysis center: %3s -- %s",
1385 str.sprintf(
" Analyst: %s ( %s )",
1389 str.sprintf(
" Machine: %s %s %s %s",
1394 str.sprintf(
" Executables: %s",
1398 str.sprintf(
" Solve initials: %2s",
1403 str.sprintf(
" Local time: %04d.%02d.%02d-%02d:%02d:%02d",
1404 nYear, nMonth, nDay, nHour, nMin, (
int)dSec);
1407 str.sprintf(
" Correlator type: %s",
1410 ts <<
" Mark-3 db_name:" <<
"\n\n" ;
1413 if (dbName.at(0) ==
'$')
1414 dbName.remove(0, 1);
1417 if (dbName.size() <= 9)
1418 dbName =
"$" + dbName;
1426 str.sprintf(
" Data base %s Ver%3d",
1430 ts << str <<
"\n\n";
1432 str.sprintf(
" Matrix Condition Number =%24.15E",
1434 ts << str <<
"\n\n";
1437 ts <<
" Listing_Options: CRES_EMULATION NO BASELINES NO MINIMUM NO" <<
"\n"
1438 <<
" Listing_Options: MAPPED_EOP_OUTPUT NO SEG_OUTPUT NO APRIORI_ZENDEL NO" <<
"\n"
1439 <<
" Listing_Options: NRD_TABLE YES CHI_TABLE NO SRC_STAT PRE2004 SEG_STYLE PRE2005" <<
"\n";
1440 ts <<
" SgLib release : " <<
1445 ts <<
" User comments:" <<
"\n";
1457 ts <<
" Flyby Station Cals: DB Station Cals: | DB Non-station Cals: "
1458 <<
"| Atmosphere Partial:\n"
1459 <<
" ------------------------------------------------------------------------------"
1460 <<
"--------------------\n";
1464 int numOfStrings, idxStr, idxContr;
1468 listOfContributions <<
"Pol Tide";
1470 listOfContributions <<
"WobXCont";
1472 listOfContributions <<
"WobYCont";
1474 listOfContributions <<
"EarthTid";
1476 listOfContributions <<
"Ocean";
1478 listOfContributions <<
"UT1Ortho";
1480 listOfContributions <<
"XpYpOrth";
1485 listOfContributions <<
"PxyNutat";
1490 listOfContributions <<
"XpYpLib";
1492 listOfContributions <<
"UT1Libra";
1496 listOfContributions <<
"FeedCorr";
1498 listOfContributions <<
"TiltRmvr";
1500 listOfContributions <<
"OPTLCont";
1502 listOfContributions <<
"OldOcean";
1504 listOfContributions <<
"OldPTide";
1508 QString sIono(
"SION");
1513 QMap<QString, int> gionByName;
1514 QString sIonos[3]={
"", sIono,
""};
1515 sIonos[2] = sIono +
"/no" + sIono;
1520 QString stName=it.value()->getKey();
1527 QString blName=bln->
getKey();
1528 if (blName.contains(stName +
":") || blName.contains(
":" + stName))
1536 if (!gionByName.contains(stName))
1537 gionByName.insert(stName, nVal);
1538 else if (gionByName.value(stName)!=2 && gionByName.value(stName)!=nVal)
1539 gionByName[stName] = 2;
1547 if (!gionByName.contains(it.value()->getKey()))
1548 gionByName.insert(it.value()->getKey(), 0);
1551 idxStr = idxContr = 0;
1553 while (idxStr<numOfStrings)
1558 str.sprintf(
" %-8s:NMFDRFLY %-8s %-11s ",
1559 qPrintable(si->
getKey()),
1561 qPrintable(sIonos[gionByName[si->
getKey()]])
1569 if (idxContr<listOfContributions.size())
1571 str.sprintf(
"| %-8s |",
1572 qPrintable(listOfContributions.at(idxContr)));
1579 ts <<
" NMFWTFLY \n";
1585 ts <<
" ----------------------------------------------------------------------------"
1586 <<
"----------------------\n";
1587 str.sprintf(
" CALC Version: %.2f ",
1616 QString str(
""), useChar1(
""), useChar2(
""), sQcOb(
"");
1618 QString oppBandKey(
"");
1619 double dSnrOb, dDelay;
1620 bool isMultipleBand;
1627 ts <<
"1Residuals from Run " <<
reportID_ <<
"\n";
1628 ts <<
" Baseline Source Date Time Obs del Del res "
1629 <<
"Del er. Obs rate Rate res R.err elev azim frq2-rat QC XS"
1630 <<
" SNR / SNS_S Tau_obs_x #AmbX Tau_obs_s #AmbS Tau_apriori_clo "
1631 <<
"Tau_theoretical Tau_est_contrb Rate_obs_x Rate_obs_s"
1632 <<
" Rate_apriori_clock Rate_theoretical Rate_estim_contrib Eff. Dur. "
1633 <<
"Res_gr_del_X Res_gr_del_S Gr_Spc_X Gr_Spc_S USR Ampltude Phase Obsind DS "
1634 <<
"Delay_residual\n";
1636 <<
" fs/s fs/s fs/s deg deg deg deg seconds"
1637 <<
" seconds seconds seconds seconds"
1638 <<
" d/l d/l d/l d/l d/l"
1639 <<
" sec sec sec ns ns "
1640 <<
"d/l d/l rad seconds\n";
1651 double delay_clock=0.0, rate_clock=0.0;
1653 if (o && aux_1 && aux_2)
1668 if (isMultipleBand &&
1691 if (dDelay<=-1.0 || dDelay>=10.0)
1692 sVal =
"**************";
1694 sVal.sprintf(
"%#14.0f", dDelay*1.0e12);
1696 str.sprintf(
"%7d%1s %8s/%8s %8s %s %s%#8.0f %1s %#6.0f%#14.0f%#8.0f %1s %#6.0f"
1697 "%4d%4d%4d%4d %9.6f %2d/%2s %6.1f / %6.1f"
1698 " %17.13f %5d %17.13f %5d"
1699 " %16.13f %16.13f %17.13f"
1700 " %20.12e %20.12e %20.12e %20.12e %20.12e @@ "
1701 " %9.4f %17.8e %17.8e %9.4f %9.4f %3d %10.7f %9.5f %6d %24.12e"
1705 qPrintable(useChar1),
1713 qPrintable(useChar2),
1718 qPrintable(useChar2),
1722 (
int)round(aux_2->getElevationAngle()*
RAD2DEG),
1724 (
int)round(aux_2->getAzimuthAngle()*
RAD2DEG),
1796 ts << qPrintable(str) <<
"\n";
1808 QString str(
""), useChar1(
""), useChar2(
""), sQcOb(
"");
1810 QString oppBandKey(
"");
1811 double dSnrOb, dDelay;
1812 bool isMultipleBand;
1819 ts <<
"1Residuals from Run " <<
reportID_ <<
"\n";
1820 ts <<
" Baseline Source Date Time Obs del Del res Del err"
1821 <<
" Obs rate Rate res Rate err elev frq2-rat QC XS SNR / SNS_S\n"
1823 <<
" fs/s fs/s fs/s deg\n";
1832 if (o && aux_1 && aux_2)
1847 if (isMultipleBand &&
1870 if (dDelay<=-1.0 || dDelay>=10.0)
1871 sVal =
"**************";
1873 sVal.sprintf(
"%#14.0f", dDelay*1.0e12);
1875 str.sprintf(
"%7d%1s %8s/%8s %8s %s %s%#8.0f %1s %#6.0f%#14.0f%#8.0f %1s %#6.0f"
1876 "%4d%4d%4d%4d %9.6f %2d/%2s %6.1f / %6.1f",
1885 qPrintable(useChar2),
1890 qPrintable(useChar2),
1894 (
int)round(aux_2->getElevationAngle()*
RAD2DEG),
1896 (
int)round(aux_2->getAzimuthAngle()*
RAD2DEG),
1931 ts << qPrintable(str) <<
"\n";
1943 ts <<
" Met Statistics:\n"
1944 <<
" Temperature Pressure Humidity\n"
1945 <<
" Station average rms average rms average rms\n";
1954 str.sprintf(
" %-8s MET",
1955 qPrintable(si->
getKey()));
1959 double sumT_1, sumT_2, sumP_1, sumP_2, sumH_1, sumH_2;
1960 double rmsT, rmsP, rmsH, d;
1961 sumT_1 = sumT_2 = sumP_1 = sumP_2 = sumH_1 = sumH_2 = 0.0;
1962 rmsT = rmsP = rmsH = 0.0;
1966 QMap<QString, SgVlbiAuxObservation*>::iterator jt;
1987 d = sumT_2 - sumT_1*sumT_1/num;
1988 if (d<=0.0 && fabs(d)/sumT_2<1.0e-12)
1992 d = sumP_2 - sumP_1*sumP_1/num;
1993 if (d<=0.0 && fabs(d)/sumP_2<1.0e-12)
1997 d = sumH_2 - sumH_1*sumH_1/num;
1998 if (d<=0.0 && fabs(d)/sumH_2<1.0e-12)
2002 str.sprintf(
" %6.1f %6.1f %6.1f %6.1f%8.1f %7.1f",
2003 sumT_1/num, rmsT, sumP_1/num, rmsP, sumH_1/num, rmsH);
2006 str =
" -999.0 0.0 -999.0 0.0-99900.0 0.0";
2019 int numRecObs, numRec59Obs, numProcdObs, num;
2020 int nYear, nMonth, nDay, nHour, nMin;
2022 double dSec, fInterval;
2024 double rmsDelay(0.0), nrmsDelay(0.0), chi2Delay(0.0);
2025 double rmsRate(0.0), nrmsRate(0.0), chi2Rate(0.0);
2026 double nrmsCombined(0.0), chi2Combined(0.0);
2027 double sum1d, sum2d;
2028 double sum1r, sum2r;
2038 numRecObs = numProcRateObs = numRec59Obs = 0;
2058 for (QMap<QString, SgVlbiObservable*>::iterator it=obs->
observableByKey().begin();
2061 int qCode=it.value()->getQualityFactor();
2062 isOk = isOk && qCode>=qCodeLimit;
2063 isOk59 = isOk59 && qCode>=5;
2090 sum1r = sum2r = sum1d = sum2d = 0.0;
2104 if (num != numProcdObs)
2105 std::cout <<
"num != numProcdObs: " << num <<
" vs " << numProcdObs <<
"\n";
2107 nrmsDelay = sqrt((sum2d - sum1d*sum1d/num)/num);
2115 nrmsRate = sqrt((sum2r - sum1r*sum1r/num)/num);
2120 str.sprintf(
" Run %10s %7d Observation Pairs Available ",
2124 str.sprintf(
" Session started on: %14.6f %04d.%02d.%02d %02d:%02d:%06.3f UTC",
2126 nYear, nMonth, nDay, nHour, nMin, dSec);
2129 nDay = (int)trunc(fInterval);
2130 fInterval = fInterval - nDay;
2133 nHour = (int)(fInterval/3600.0);
2134 nMin = (int)((fInterval - 3600.0*nHour)/60.0);
2135 dSec = fInterval - 3600.0*nHour - 60.0*nMin;
2136 str.sprintf(
" Actual duration: %9.3f sec %02d %02d:%02d:%06.3f sec",
2137 fInterval + nDay*
DAY2SEC, nDay, nHour, nMin, dSec);
2140 str.sprintf(
" Solution type: %-17s ",
2142 ts << str <<
"\n\n";
2145 " Data Type Number of Weighted RMS Normalized RMS Chi Square" <<
"\n"
2146 " Observations Residual Residual (precis)" <<
"\n"
2150 str.sprintf(
" Delay %8d %18.3f ps %17.2f %12.4f",
2151 numProcdObs, rmsDelay, nrmsDelay, chi2Delay);
2154 str.sprintf(
" Rate %8d %18g fs/s %15.2f %12.4f",
2155 numProcRateObs, rmsRate, nrmsRate, chi2Rate);
2158 str.sprintf(
"Combined %8d %15.2f %12.4f",
2159 0, nrmsCombined, chi2Combined);
2162 ts <<
"----------------------------------------------------------------------- \n";
2166 str.sprintf(
" Used quality_code_limit: %3d ",
2170 str.sprintf(
" Number of potentially recoverable observations: %8d ",
2174 str.sprintf(
" Number of potentially good observations with QC 5-9:%7d ",
2178 str.sprintf(
" Number of used observations: %8d (%6.2f%%) ",
2179 numProcdObs, numProcdObs*100.0/numRecObs);
2182 str.sprintf(
" Number of suppressed observations: %8d (%6.2f%%) ",
2183 (numRecObs - numProcdObs), (numRecObs - numProcdObs)*100.0/numRecObs);
2186 ts <<
"----------------------------------------------------------------------- \n\n\n\n";
2197 <<
" Baseline Statistics\n"
2198 <<
" Baseline # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. "
2200 <<
" used/recov ps standard ( 15ps+i) fs/s "
2204 QMap<QString, SgVlbiStationInfo*> skippedStationsByName;
2205 QMap<QString, SgVlbiStationInfo*>::iterator itSi;
2210 skippedStationsByName.insert(si->
getKey(), si);
2214 QMap<QString, SgVlbiBaselineInfo*>::iterator it;
2218 QString biName=bi->
getKey();
2219 QString st1Name=biName.left(8);
2220 QString st2Name=biName.right(8);
2222 !skippedStationsByName.contains(st1Name) &&
2223 !skippedStationsByName.contains(st2Name) )
2231 str.sprintf(
" %-17s%5d/%5d%8.1f %9.2f %9.2f %7.1f %10.2f%7.1f%7.1f",
2232 qPrintable(biName.replace(8, 1,
"-")),
2248 skippedBaselines.append(bi);
2252 if (skippedBaselines.size())
2254 ts <<
" Not included: \n\n";
2255 for (
int i=0; i<skippedBaselines.size(); i++)
2258 QString biName=bi->
getKey();
2259 str.sprintf(
" %-17s%5d/%5d deselected",
2260 qPrintable(biName.replace(8, 1,
"-")),
2267 skippedStationsByName.clear();
2268 skippedBaselines.clear();
2279 <<
" Source Statistics \n"
2280 <<
" Source # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. \n"
2281 <<
" ps standard ( 15ps) fs/s \n \n";
2285 QMap<QString, SgVlbiSourceInfo*>::iterator it;
2302 str.sprintf(
" %12s %1s %5d/%5d%8.1f %9.2f %8.2f %7.1f %10.2f",
2317 ts <<
" Not included: \n\n";
2321 str.sprintf(
" %-10s%5d/%5d deselected",
2322 qPrintable(si->
getKey()),
2353 <<
" Station Statistics \n"
2354 <<
" Station # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. \n"
2355 <<
" ps standard ( 15ps) fs/s \n \n";
2360 QMap<QString, SgVlbiStationInfo*>::iterator it;
2366 str.sprintf(
" %12s %5d/%5d%8.1f %9.2f %8.2f %7.1f %10.2f",
2367 qPrintable(si->
getKey()),
2380 skippedStations.append(si);
2384 if (skippedStations.size())
2386 ts <<
" Not included: \n\n";
2387 for (
int i=0; i<skippedStations.size(); i++)
2390 str.sprintf(
" %-10s%5d/%5d deselected",
2391 qPrintable(si->
getKey()),
2398 skippedStations.clear();
2413 <<
" *** Flyby Status ***\n\n"
2414 <<
" directory: " << qPrintable(path2AF) <<
"\n\n"
2415 <<
"Station Source Nutation Nutation Earth Earth Station "
2416 <<
"Pressure EOP Intp. EOP Intp. High Freq Axis \n"
2417 <<
"Positions Positions Model Time Rotation Rotation Velocity "
2418 <<
"Loading Smoothing Smoothing EOP Offset \n"
2419 <<
" Series Series Interpol. Model "
2420 <<
" CALC Mod File Model Mod File \n"
2421 <<
"--------- --------- --------- --------- --------- --------- --------- "
2422 <<
"--------- --------- --------- --------- ---------\n";
2430 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2432 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2438 QString(
"C. Spline") :
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2443 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2445 ts << qPrintable(QString(
"NO_ZONAL").leftJustified(9,
' ',
true)) <<
" ";
2447 ts << qPrintable(QString(
"N/A").leftJustified(9,
' ',
true)) <<
" ";
2455 ts <<
"Site Plate Map: " << qPrintable(path2AF) <<
"/sitpl.dat \n\n";
2463 static const double clcScaleVals[10] =
2464 {1.0e09, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0,
2465 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0};
2466 static const QString clcScaleNames[10] =
2467 {
"ns ",
"D-14 ",
"D-14/day ",
"D-14/day^2",
"D-14/day^3",
2468 "D-14/day^4",
"D-14/day^5",
"D-14/day^6",
"D-14/day^7",
"D-14/day^8"};
2486 <<
" Parameter adjustments for run " << qPrintable(
reportID_)
2488 <<
" Reference epoch for polynomial models: "
2491 <<
" Adjustment a-sigma m-sigma\n";
2503 str.sprintf(
" %8s CLCK %s Reference",
2504 qPrintable(si->
getKey()),
2521 double cXY, cXZ, cYZ;
2522 double latitude, longitude, height;
2531 m3M = W(-latitude)*V(longitude);
2569 ts <<
"Station positions are for epoch: "
2571 str.sprintf(
"%5d. %-8s %04d %4s X Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2580 str.sprintf(
"%5d. %-8s %04d %4s Y Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2589 str.sprintf(
"%5d. %-8s %04d %4s Z Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2599 str.sprintf(
" %-8s %04d U Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2606 str.sprintf(
" %-8s %04d E Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2613 str.sprintf(
" %-8s %04d N Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2624 double vAxisOffset, sAxisOffset;
2629 str.sprintf(
"%5d. %-8s Axis Offset %24.2f mm %14.3f mm %18.3f mm %18.3f mm",
2631 qPrintable(si->
getKey()),
2635 sAxisOffset*1.0e3*chi );
2644 int nPwl, nLoc, nMax;
2645 double *dVal, *dSig;
2650 nMax = std::max(nPwl, nLoc);
2651 dVal =
new double[nMax];
2652 dSig =
new double[nMax];
2653 for (
int i=0; i<nMax; i++)
2654 dVal[i] = dSig[i] = 0.0;
2655 for (
int i=0; i<nLoc; i++)
2660 for (
int i=0; i<nPwl; i++)
2665 for (
int i=0; i<nMax; i++)
2667 str.sprintf(
"%5d. %-8s CL %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2668 idx, qPrintable(si->
getKey()), i,
2670 dVal[i]*clcScaleVals[i], qPrintable(clcScaleNames[i]),
2671 dSig[i]*clcScaleVals[i], qPrintable(clcScaleNames[i]),
2672 dSig[i]*clcScaleVals[i]*chi, qPrintable(clcScaleNames[i]));
2695 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2696 idx, qPrintable(si->
getKey()), 0,
2698 pb->
pA0()->
getSolution()*clcScaleVals[0], qPrintable(clcScaleNames[0]),
2699 pb->
pA0()->
getSigma()*clcScaleVals[0], qPrintable(clcScaleNames[0]),
2700 pb->
pA0()->
getSigma()*clcScaleVals[0]*chi, qPrintable(clcScaleNames[0]));
2707 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2708 idx, qPrintable(si->
getKey()), 1,
2710 pb->
pA1()->
getSolution()*clcScaleVals[1], qPrintable(clcScaleNames[1]),
2711 pb->
pA1()->
getSigma()*clcScaleVals[1], qPrintable(clcScaleNames[1]),
2712 pb->
pA1()->
getSigma()*clcScaleVals[1]*chi, qPrintable(clcScaleNames[1]));
2719 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2720 idx, qPrintable(si->
getKey()), 2,
2722 pb->
pA2()->
getSolution()*clcScaleVals[2], qPrintable(clcScaleNames[2]),
2723 pb->
pA2()->
getSigma()*clcScaleVals[2], qPrintable(clcScaleNames[2]),
2724 pb->
pA2()->
getSigma()*clcScaleVals[2]*chi, qPrintable(clcScaleNames[2]));
2734 str.sprintf(
" %-8s BR 0 %s #%3d band=* %15.3f ns %15.3f ns %18.3f ns",
2735 qPrintable(si->
getKey()),
2757 str.sprintf(
" %-8s BR 0 %s #%3d band=%s %15.3f ns %15.3f ns %18.3f ns",
2758 qPrintable(sib->
getKey()),
2769 "::reportEstimationBlock_Output4Spoolfile(): cannot find station " + si->
getKey() +
2770 " in the " + band->
getKey() +
"-band");
2779 str.sprintf(
"%5d. %-8s AT %d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2780 idx, qPrintable(si->
getKey()), i,
2789 str.sprintf(
" %-8s Atm %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2790 qPrintable(si->
getKey()),
2805 str.sprintf(
"%5d. %-8s AT 0 %s %20.3f %-s %10.3f %-s %10.3f %-s",
2806 idx, qPrintable(si->
getKey()),
2825 str.sprintf(
"%5d. %-8s NG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2826 idx, qPrintable(si->
getKey()),
2834 str.sprintf(
"%5d. %-8s EG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2835 idx, qPrintable(si->
getKey()),
2843 str.sprintf(
"%5d. %-8s NG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2844 idx, qPrintable(si->
getKey()),
2852 str.sprintf(
"%5d. %-8s EG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2853 idx, qPrintable(si->
getKey()),
2863 str.sprintf(
" %-8s NGr %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2864 qPrintable(si->
getKey()),
2873 str.sprintf(
" %-8s EGr %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2874 qPrintable(si->
getKey()),
2912 str.sprintf(
"%5d.%s %-8s RT. ASC. %s %11.4f m-asec %10.4f m-asec %10.4f"
2916 qPrintable(si->
getKey()),
2923 str.sprintf(
" CORRECTION %20.7f\n SCALED SIGMA %20.7f",
2932 str.sprintf(
"%5d.%s %-8s DEC. %s %16.4f m-asec %15.4f m-asec %15.4f m-asec",
2935 qPrintable(si->
getKey()),
2942 str.sprintf(
" CORRECTION %20.7f\n SCALED SIGMA %20.7f",
2954 str.sprintf(
" %-8s CORRELATION %10.4f Reference date: 2000.01.01-12:00:00",
2955 qPrintable(si->
getKey()),
2959 str.sprintf(
" %-8s CORRELATION ------- Reference date: 2000.01.01-12:00:00",
2960 qPrintable(si->
getKey()));
2974 ts <<
" Atmosphere Constraint Statistics\n";
2975 double d, ovrl_rms, ovrl_rel, ovrl_trace;
2976 double scale=1.0e12/
vLight/24.0;
2977 ovrl_rms = ovrl_trace = ovrl_rel = 0.0;
2989 ovrl_rel += d/sigmaAPriori/sigmaAPriori;
2991 ovrl_trace += pwl->
trace();
2992 str.sprintf(
"%3d. %-8s Input %6.2f ps/h RMS %6.2f ps/h NRMS %5.2f share %4.2f count %3d",
2993 idxAux, qPrintable(si->
getKey()),
3004 ovrl_rms = sqrt(ovrl_rms/sum);
3005 ovrl_rel = sqrt(ovrl_rel/sum);
3006 str.sprintf(
" Overall RMS %6.2f ps/h NRMS %5.2f share %4.2f count %3d",
3011 ts << str <<
"\n\n";
3016 double d, ovrl_rms, ovrl_rel, ovrl_trace;
3017 double scale=1.0e14/86400.0;
3018 ovrl_rms = ovrl_trace = ovrl_rel = 0.0;
3021 ts <<
" Clock Constraint Statistics\n";
3033 ovrl_rel += d/sigmaAPriori/sigmaAPriori;
3035 ovrl_trace += pwl->
trace();
3036 str.sprintf(
"%3d. %-8s Input %6.2f D-14 RMS %6.2f D-14 NRMS %5.2f share %4.2f count %3d",
3037 idxAux, qPrintable(si->
getKey()),
3048 ovrl_rms = sqrt(ovrl_rms/sum);
3049 ovrl_rel = sqrt(ovrl_rel/sum);
3050 str.sprintf(
" Overall RMS %6.2f D-14 NRMS %5.2f share %4.2f count %3d",
3055 ts << str <<
"\n\n";
3060 bool isErpAdjusted(
false);
3061 double dUt1=0.0, dPmx=0.0, dPmy=0.0;
3062 double rUt1=0.0, rPmx=0.0, rPmy=0.0;
3063 double sigUt1=0.0, sigPmx=0.0, sigPmy=0.0;
3064 double aprUt1=0.0, aprPmx=0.0, aprPmy=0.0, dt, dd;
3065 double aprCipX=0.0, aprCipY=0.0;
3076 str.sprintf(
"%5d. X Wobble 0, %s %12.4f masec %10.2f microasec %10.2f microasec %10.2f microasec",
3086 isErpAdjusted =
true;
3096 str.sprintf(
"%5d. X Wobble 1, %s %12.4f mas/d %10.2f microas/d %10.2f microas/d %10.2f microas/d",
3106 isErpAdjusted =
true;
3120 str.sprintf(
"%5d. Y Wobble 0, %s %12.4f masec %10.2f microasec %10.2f microasec %10.2f microasec",
3130 isErpAdjusted =
true;
3140 str.sprintf(
"%5d. Y Wobble 1, %s %12.4f mas/d %10.2f microas/d %10.2f microas/d %10.2f microas/d",
3150 isErpAdjusted =
true;
3164 str.sprintf(
"%5d. UT1-TAI 0, %s %12.4f msec %10.2f microsec %11.2f microsec %11.2f microsec",
3173 isErpAdjusted =
true;
3189 str.sprintf(
"%5d. UT1-TAI 1, %s %12.4f ms/d %10.2f micros/d %11.2f micros/d %11.2f micros/d",
3199 isErpAdjusted =
true;
3203 if (isErpAdjusted && p4erp)
3208 <<
" EOP without included hi-freq variations (a-sigmas) \n"
3209 <<
" XWOB YWOB UT1-TAI"
3210 <<
" XSIG YSIG USIG\n"
3212 <<
" microasec microasec microsec\n";
3214 str.sprintf(
"%s %12.4f %12.4f %12.4f %11.2f %11.2f %11.2f",
3216 (aprPmx + rPmx*dt + dPmx)*
RAD2SEC*1.0e3,
3217 (aprPmy + rPmy*dt + dPmy)*
RAD2SEC*1.0e3,
3218 (aprUt1 + rUt1*dt + dUt1)*
DAY2SEC*1.0e3,
3222 ts << str <<
"\n" <<
"\n";
3239 double dX, dY, dPsi, dEps;
3240 double dX_sigma, dY_sigma, dPsi_sigma, dEps_sigma;
3248 dPsi = dX/sin(84381.4059*
SEC2RAD);
3249 dPsi_sigma = dX_sigma/sin(84381.4059*
SEC2RAD);
3251 dEps_sigma = dY_sigma;
3260 dX = dPsi*sin(84381.4059*
SEC2RAD) + aprCipX;
3261 dX_sigma = dPsi_sigma*sin(84381.4059*
SEC2RAD);
3262 dY = dEps + aprCipY;
3263 dY_sigma = dEps_sigma;
3265 double psiEst2Wahr=0.0, epsEst2Wahr=0.0;
3272 psiEst2Wahr, epsEst2Wahr);
3277 str.sprintf(
" EOP epoch (TT) MJD: %12.6f NUT epoch (TT) MJD: %12.6f",
3280 str.sprintf(
"%5d. Nutation offset in longitude (Psi) %14.3f mas %10.1f microasec"
3281 " %10.1f microasec ",
3289 str.sprintf(
" Nutation offset around X-axis (dX) %14.3f mas %10.1f "
3290 "microasec %10.1f microasec ",
3296 str.sprintf(
" Nutation offset wrt IAU 1980 model (Psi) %14.3f mas %10.1f "
3297 "microasec %10.1f microasec ",
3306 str.sprintf(
"%5d. Nutation offset in obliquity (Eps) %14.3f mas %10.1f "
3307 "microasec %10.1f microasec ",
3315 str.sprintf(
" Nutation offset around Y-axis (dY) %14.3f mas "
3316 "%10.1f microasec %10.1f microasec ",
3322 str.sprintf(
" Nutation offset wrt IAU 1980 model (Eps) %14.3f mas "
3323 "%10.1f microasec %10.1f microasec ",
3342 blName.replace(8, 1,
"-");
3345 str.sprintf(
"%5d. %-17s Clock offset "
3346 "%12.3f ps %9.3f ps %9.3f ps",
3347 idx, qPrintable(blName),
3366 blName.replace(8, 1,
"-");
3382 double cXY, cXZ, cYZ;
3387 b_apriori = (s2->
getR() - s1->
getR());
3397 double x2, y2, z2, sigX2, sigY2, sigZ2;
3405 lSigma = x2*sigX2 + y2*sigY2 + z2*sigZ2 +
3409 lSigma = sqrt(lSigma)/l;
3411 double phiSigma, a2, l4;
3414 phiSigma = (x2*z2*sigX2 + y2*z2*sigY2 + a2*a2*sigZ2 +
3417 phiSigma = sqrt(phiSigma);
3420 lambdaSigma = (y2*sigX2 + x2*sigY2 - 2.0*b.
at(
X_AXIS)*b.
at(
Y_AXIS)*cXY)/a2/a2;
3421 lambdaSigma = sqrt(lambdaSigma);
3423 str.sprintf(
"%5d. %-17s X Comp %15.2f mm %14.3f mm "
3424 "%14.3f mm %14.3f mm",
3425 idx, qPrintable(blName),
3432 str.sprintf(
"%5d. %-17s Y Comp %15.2f mm %14.3f mm "
3433 "%14.3f mm %14.3f mm",
3434 idx, qPrintable(blName),
3441 str.sprintf(
"%5d. %-17s Z Comp %15.2f mm %14.3f mm "
3442 "%14.3f mm %14.3f mm",
3443 idx, qPrintable(blName),
3451 str.sprintf(
" %-17s length %15.2f mm %14.3f mm "
3452 "%14.3f mm %14.3f mm",
3455 (l - b_apriori.
module())*1000.0,
3457 lSigma *1000.0*chi );
3460 str.sprintf(
" %-17s latitude %15.2f deg %13.3f mas "
3461 "%14.3f mas %14.3f mas",
3469 str.sprintf(
" %-17s longitude %15.2f deg %13.3f mas "
3470 "%14.3f mas %14.3f mas",
3480 "::reportEstimationBlock_Output4Spoolfile(): a station pointer is NULL");
3490 <<
" General constraints usage information: "
3493 str.sprintf(
" 1) CLO_RATE \"Clock rate between segments \" sigma %10.3E 10^-14 sec/sec",
3498 str.sprintf(
" 2) ATM_RATE \"Atmosphere rate between segments\" sigma %10.3E psec/hr",
3502 ts << str <<
"\n \n";
3505 ts <<
" No constraints have been imposed\n \n";
3507 str.sprintf(
" Corrected Reduced Chi-Square %8.4f",
3511 ts << str <<
"\n\n";
3521 QFile f(path +
"/" + fileName);
3522 if (!f.open(QIODevice::WriteOnly))
3525 "::reportAtmo(): error opening output file: " + path +
"/" + fileName);
3555 "::reportAtmo(): cannot report PWL zenith delays, the number of parameteres less than 1");
3561 "::reportAtmo(): cannot report PWL zenith delays, non-equal number of parameters");
3564 else if (step != pwl->
step())
3567 "::reportAtmo(): cannot report PWL zenith delays, non-equidistant steps");
3574 "::reportAtmo(): cannot report PWL zenith delays, missed station" + si->
getKey());
3584 ts <<
" yr mn dy hr min Julian Date ";
3586 ts << str.sprintf(
"%-8s ", qPrintable(it_st.value()->getKey()));
3589 ts <<
"offset sigma ";
3594 for (
int idx=0; idx<num+1; idx++)
3596 int yr, mn, dy, hr, mi;
3599 mi = (60*mi + sc)/60;
3601 str.sprintf(
" %2d %2d %2d %2d %2d %.5f",
3602 yr, mn, dy, hr, mi, t_i.
toDouble() + 2400000.5);
3611 ts << str.sprintf(
" %14.0f %5.0f",
3638 QFile f(path +
"/" + fileName);
3639 if (!f.open(QIODevice::WriteOnly))
3642 "::reportCloc(): error opening output file: " + path +
"/" + fileName);
3672 "::reportCloc(): cannot report PWL clocks, the number of parameteres less than 1");
3678 "::reportCloc(): cannot report PWL clocks, non-equal number of parameters");
3681 else if (step != pwl->
step())
3684 "::reportCloc(): cannot report PWL clocks, non-equidistant steps");
3692 "::reportCloc(): cannot report PWL clocks, missed station " + si->
getKey());
3702 ts <<
" yr mn dy hr min Julian Date ";
3704 ts << str.sprintf(
"%-8s ", qPrintable(it_st.value()->getKey()));
3707 ts <<
"offset sigma ";
3712 for (
int idx=0; idx<num+1; idx++)
3714 int yr, mn, dy, hr, mi;
3717 mi = (60*mi + sc)/60;
3719 str.sprintf(
" %2d %2d %2d %2d %2d %.5f",
3720 yr, mn, dy, hr, mi, t_i.
toDouble() + 2400000.5);
3729 ts << str.sprintf(
" %14.0f %5.0f",
3752 QFile f(path +
"/" + fileName);
3753 if (!f.open(QIODevice::WriteOnly))
3756 "::reportPall(): error opening the output file: " + path +
"/" + fileName);
3765 ts <<
allParList_.size() <<
" parameters in the list\n";
3767 ts << str.sprintf(
"%4d ", i) <<
allParList_.at(i)->getName() <<
"\n";
3769 ts <<
"\n" <<
PxAll_->
nRow() <<
" elements in a row of the covariance matrix\n";
3770 for (
unsigned int i=0; i<
PxAll_->
nRow(); i++)
3771 for (
unsigned int j=i; j<
PxAll_->
nCol(); j++)
3772 ts << str.sprintf(
"%4d %4d %22.15E", i, j,
PxAll_->
getElement(i, j)) <<
"\n";
3785 QFile f(path +
"/" + fileName);
3786 if (!f.open(QIODevice::WriteOnly))
3789 "::reportNotUsedObs(): error opening output file: " + path +
"/" + fileName);
3819 <<
"1 Baseline information for run " << qPrintable(
reportID_) <<
"\n"
3820 <<
" Monument to monument values at epoch "
3822 <<
" Baseline vector components: Length, Vertical and Transverse components\n"
3823 <<
" Vector mag c-sigma Length c-sigma "
3824 <<
"Horizontal c-sigma Vertical c-sigma\n"
3825 <<
" (mm) (mm) (mm) (mm)"
3826 <<
" (mm) (mm) (mm) (mm)\n";
3835 stations << it.value();
3837 n = stations.size();
3838 for (
int i=0; i<n; i++)
3839 for (
int j=i+1; j<n; j++)
3852 double length, lengthSigma;
3873 idxs[0] = idxs[1] = idxs[2] = -1;
3881 idxs[3] = idxs[4] = idxs[5] = -1;
3883 for (
int l=0; l<6; l++)
3884 for (
int m=0; m<6; m++)
3885 if (idxs[l]>=0 && idxs[m]>=0)
3888 calcLhv(ri_apriori, dr_i, rj_apriori, dr_j, mA, lhv, lhvSigma, length, lengthSigma);
3889 str.sprintf(
" %-8s %04d to %-8s %04d %14.2f %6.2f %14.2f %6.2f %9.2f %6.2f"
3893 length*1000.0, lengthSigma*1000.0,
3909 baselines << it.value();
3911 n = baselines.size();
3912 for (
int i=0; i<n; i++)
3922 double length, lengthSigma;
3936 for (
int l=0; l<3; l++)
3937 for (
int m=0; m<3; m++)
3940 calcLhv(ri_apriori, rj_apriori, db, mA, lhv, lhvSigma, length, lengthSigma);
3941 str.sprintf(
" %-8s %04d to %-8s %04d %14.2f %6.2f %14.2f %6.2f %9.2f %6.2f"
3945 length*1000.0, lengthSigma*1000.0,
3955 <<
"Note: a posteriori baseline vectors are expressed in a baseline-centric reference frames. "
3956 <<
"The first basis vector of the\nframe, l, is in direction of a priori baseline, (r_2 - r_1). "
3957 <<
"Direction of the second vector, h, is defined by a cross\nproduct of a priori baseline vector "
3958 <<
"and a priori geocentric vector of the 2nd station. The last basis vector, v, is\nperpendicular "
3959 <<
"to the vectors l and h and is radially inward at the center of the baseline. For the short "
3960 <<
"baselines, the\nvectors l and h are close to the horizontal plane and v is almost vertical "
3961 <<
"(with opposite sign). In the table above the\ncolumns are:\n * Vector mag: length of the a "
3962 <<
"posteriori baseline;\n * Length: l-component of the baseline;\n * Horizontal: "
3963 <<
"h-component of the baseline;\n * Vertical: v-component of the baseline;\n * c-sigma: "
3964 <<
"calculated (using standard deviations of adjusted station coordinates of baselines) standard "
3965 <<
"deviations\n of the corresponding values.\n\n";
3990 if (excludedObs.size() + unusableObs.size() + includedObs.size() == 0)
3992 ts <<
"No observations are in the solution.\n";
3994 "::reportDeselectedObsBlock_Output4Spoolfile(): no obs to report");
3999 for (
int idx=0; idx<unusableObs.size(); idx++)
4000 allObs << unusableObs.at(idx);
4001 for (
int idx=0; idx<excludedObs.size(); idx++)
4002 allObs << excludedObs.at(idx);
4003 for (
int idx=0; idx<includedObs.size(); idx++)
4004 allObs << includedObs.at(idx);
4007 ts <<
"# Status of observations of the solution of the Run " <<
reportID_ <<
"\n";
4009 <<
" database " <<
session_->
getName() <<
" version " << outputVersion <<
"\n";
4010 ts <<
"# First column: a status flag:\n";
4011 ts <<
"# u - the observation is unusable: either missed data on one of the bands,\n";
4012 ts <<
"# low quality code, deselected baseline, station or sources.\n";
4013 ts <<
"# e - excluded observation, explicitly excluded observation either by user\n";
4014 ts <<
"# or by the software (due to a high residual or not so good quality factor).\n";
4015 ts <<
"# i - the observation was included in the solution.\n";
4016 ts <<
"# Second column: index in a database or other media.\n";
4017 ts <<
"# Third column: time of observation.\n";
4018 ts <<
"# Forth and fifth columns: quality code (QC) for S- and X-bands. The char `-' means\n";
4019 ts <<
"# no data on the band.\n";
4020 ts <<
"# Sixth and seventh columns: fourfit error code (EC) for S- and X-bands. The char `-' means\n";
4021 ts <<
"# no data on the band, the char '.' means no fourfit error code for the observation.\n";
4022 ts <<
"# Eighth and ninth columns: SNR on the S- and X-bands.\n";
4023 ts <<
"# Tenth and eleventh columns: number of used channels on the S- and X-bands.\n";
4024 ts <<
"# Twelveth and thirteenth columns: baseline and source names.\n";
4025 ts <<
"# The last three columns: residual and applied standard deviation (ps) and\n";
4026 ts <<
"# normalized residual (unitless).\n";
4028 ts <<
"# QC EC SNR SNR NumChan\n";
4029 ts <<
"# __N__ __Time__ S X S X S X S X ____Baseline_____ _Source_ Resid.(ps) ";
4030 ts <<
"_Std.Dev_ Normalized\n";
4032 QString strQC_S(
""), strQC_X(
"");
4033 QString strEC_S(
""), strEC_X(
"");
4034 QString strSnr_S(
""), strSnr_X(
"");
4035 QString strNoC_S(
""), strNoC_X(
"");
4036 QString str(
""), sSts(
"");
4037 double scale4Delay(1.0e12);
4039 for (
int idx=0; idx<allObs.size(); idx++)
4055 strEC_S.sprintf(
"%s", qPrintable(
4063 strEC_X.sprintf(
"%s", qPrintable(
4069 strQC_S +
" " + strQC_X +
" " +
4070 strEC_S +
" " + strEC_X +
" " +
4071 strSnr_S +
" " + strSnr_X +
" " +
4072 strNoC_S +
" " + strNoC_X +
" " +
4081 str += QString(
"").sprintf(
" %10.1f %9.1f %8.1f",
4086 ts << qPrintable(sSts + str) <<
"\n";
4090 excludedObs.clear();
4091 unusableObs.clear();
4092 includedObs.clear();
4115 if (excludedObs.size() + unusableObs.size() == 0)
4117 ts <<
"All observations were used in the solution.\n";
4119 "::reportDeselectedObsBlock_Output4Spoolfile(): no deselected obs to report");
4124 ts <<
" Observations that are not in the solution of the Run " <<
reportID_ <<
"\n";
4125 ts <<
"# N __Time__ SQC XQC S_SNR_ X_SNR_ ____Baseline_____ _Source_ Resid.(ps) _Std.Dev_ NormResid\n";
4127 QString strQC_S(
""), strQC_X(
"");
4128 QString strSnr_S(
""), strSnr_X(
"");
4130 double scale4Delay(1.0e12);
4131 for (
int idx=0; idx<unusableObs.size(); idx++)
4150 " S:" + strQC_S +
" X:" + strQC_X +
" S:" + strSnr_S +
" X:" + strSnr_X +
" " +
4152 ts <<
"u " << qPrintable(str) <<
"\n";
4155 for (
int idx=0; idx<excludedObs.size(); idx++)
4174 " S:" + strQC_S +
" X:" + strQC_X +
" S:" + strSnr_S +
" X:" + strSnr_X +
" " +
4176 QString(
"").sprintf(
" %10.1f %9.1f %8.1f",
4185 ts <<
"e " << qPrintable(str) <<
"\n";
4195 QString str(
""), str2copy(
""), strQC_S(
""), strQC_X(
"");
4196 double scale4Delay(1.0e12);
4214 if ( unusedObs.size() == 0)
4216 ts <<
"All observations were used in the solution.\n";
4218 "::reportDeselectedObsBlock_Output4Spoolfile(): no deselected obs to report");
4225 for (
int idx=0; idx<unusedObs.size(); idx++)
4236 str2copy.sprintf(
"observation %2d, %s, %s, %s",
4239 qPrintable(o->
src()->
getKey().simplified()),
4243 str2copy.sprintf(
"observation %2d, %s, %s, %s, which fits at %.2f +/- %.2f ps, norm: %.2f, ",
4246 qPrintable(o->
src()->
getKey().simplified()),
4257 str.sprintf(
"S:%s X:%s",
4259 qPrintable(strQC_S), qPrintable(strQC_X));
4261 ts << qPrintable(str2copy + str) <<
"\n";
4307 if (dir.mkpath(path))
4309 "::reportStochasticEstimations(): a directory \"" + path +
"\" has been created");
4312 "::reportStochasticEstimations(): creating a directory \"" + path +
"\" has been failed");
4317 "::reportStochasticEstimations(): files with station dependent stochastic parameters "
4318 " have been created");
4321 "::reportStochasticEstimations(): creating files with station dependent stochastic parameters "
4332 QString prefix(
"Stn_"), suffix(
".dat");
4338 path, prefix + si->
getKey().simplified() +
"_Clocks" + suffix);
4340 path, prefix + si->
getKey().simplified() +
"_Zenith" + suffix);
4342 path, prefix + si->
getKey().simplified() +
"_AtmGrdN" + suffix);
4344 path, prefix + si->
getKey().simplified() +
"_AtmGrdE" + suffix);
4346 path, prefix + si->
getKey().simplified() +
"_Rx" + suffix);
4348 path, prefix + si->
getKey().simplified() +
"_Ry" + suffix);
4350 path, prefix + si->
getKey().simplified() +
"_Rz" + suffix);
4352 path, prefix + si->
getKey().simplified() +
"_AxsOff" + suffix);
4356 path, prefix +
"Px" + suffix);
4358 path, prefix +
"Py" + suffix);
4360 path, prefix +
"Ut1" + suffix);
4363 path, prefix +
"CipX" + suffix);
4365 path, prefix +
"CipY" + suffix);
4376 const QString& path,
const QString& fileName)
4382 QFile f(path +
"/" + fileName);
4383 if (!f.open(QIODevice::WriteOnly))
4386 "::reportStochParameter(): error opening output file: " + path +
"/" + fileName);
4394 const QMap<QString, SgParameter*>
4396 ts <<
"# Output of " << key <<
", (" << scaleName <<
")\n";
4397 for (QMap<QString, SgParameter*>::const_iterator it=parByEpoch.begin(); it!=parByEpoch.end(); ++it)
4402 str.sprintf(
"%s %.4f %.4f %d",
4410 "::reportStochParameter(): the parameter " + key +
" is NULL");
4411 ts << it.key() <<
": the parameter \"" << key <<
"\" is NULL\n";
4429 if (dir.mkpath(path))
4431 "::reportTotalZenithDelays(): a directory \"" + path +
"\" has been created");
4435 "::reportTotalZenithDelays(): creating a directory \"" + path +
"\" has been failed");
4441 QString prefix(
"Stn_"), suffix(
"_Tzd.dat");
4446 QMap<QString, SgVlbiAuxObservation*>
4449 if (auxObservationsByScan->size())
4451 QFile f(path +
"/" + prefix + si->
getKey().simplified() + suffix);
4452 if (!f.open(QIODevice::WriteOnly))
4455 "::reportTotalZenithDelays(): error opening output file: \"" + f.fileName() +
"\"");
4461 ts <<
"# Output of Total zenith delays for " << si->
getKey().simplified() <<
", (cm)\n";
4463 QMap<QString, SgVlbiAuxObservation*>::const_iterator jt=auxObservationsByScan->constBegin();
4464 for (
int idx=0; jt!=auxObservationsByScan->constEnd(); ++jt, idx++)
4467 double tzd, tzdSigma;
4472 str.sprintf(
"%s %.4f %.4f",
4492 if (dir.mkpath(path))
4494 "::report2MyFile(): a directory \"" + path +
"\" has been created");
4498 "::report2MyFile(): creating a directory \"" + path +
"\" has been failed");
4503 QFile f(path +
"/" + fileName);
4504 if (!f.open(QIODevice::WriteOnly))
4507 "::report2MyFile(): error opening output file: \"" + f.fileName() +
"\"");
4513 ts <<
"# test outputs...\n";
4524 str.sprintf(
"%s %16.4f %8.4f %14.2f %14.2f %14.2f %14.2f %-8s:%-8s %-8s PP:%s",
4614 for (
int i=0; i<4; i++)
4615 for (
int j=0; j<3; j++)
4619 for (
int k=0; k<4; k++)
4622 for (
int i=0; i<6; i++)
4625 for (
int j=i+1; j<6; j++)
4633 lengthSigma = sqrt(d);
4638 "the sigma2 is less than zero: " + QString(
"").sprintf(
"%g", d));
4692 for (
int k=0; k<4; k++)
4695 for (
int i=0; i<3; i++)
4698 for (
int j=i+1; j<3; j++)
4706 lengthSigma = sqrt(d);
4711 "the sigma2 is less than zero: " + QString(
"").sprintf(
"%g", d));
const SgMJD tZero(1957, 10, 4)
void geocentric2geodetic(const Sg3dVector &r, double &latitude, double &longitude, double &height, bool useOldEllipsoid)
void calcCip2IAU1980(const SgMJD &epoch, double dX, double dY, double dPsi_1980, double dEps_1980, double dPsi_2000, double dEps_2000, double &diffPsi, double &diffEps)
#define RAD2MAS
radians to ms:
#define SEC2RAD
radians to arc seconds:
#define DAY2SEC
radians to mas:
double signum(const double x)
#define RAD2DEG
radians to degrees:
#define RAD2SEC
seconds in one day:
static const QString srcChars[]
void calcLhv(const Sg3dVector &r1, const Sg3dVector &dr1, const Sg3dVector &r2, const Sg3dVector &dr2, const SgMatrix &r, Sg3dVector &lhv, Sg3dVector &lhvSigma, double &length, double &lengthSigma)
bool rightAscensionSortingOrderLessThan(SgVlbiSourceInfo *, SgVlbiSourceInfo *)
static const int numOfSrcChars
SgVersion libraryVersion("SgLib", 0, 8, 2, "Compton Peak (rc2)", SgMJD(2023, 4, 3, 10, 59))
QMap< QString, SgVlbiBaselineInfo * >::iterator BaselinesByName_it
const QString defaultNetIdName
QMap< QString, SgVlbiSourceInfo * >::iterator SourcesByName_it
QMap< QString, SgVlbiStationInfo * >::iterator StationsByName_it
double at(DIRECTION i, DIRECTION j) const
double at(DIRECTION i) const
const SgMJD & getT0() const
bool isAttr(uint a) const
QList< SgArcStorage * > * arcStorage()
QList< SgPwlStorage * > * pwlStorage()
double maxConditionNumber() const
void addParametersList(QList< SgParameter * > *, bool=false)
void prepare2Run(int numOfExpectedObs, const SgMJD &, const SgMJD &, const SgMJD &)
const QMap< QString, StochasticSolutionCarrier > & stcSolutions()
QList< SgParameter * > * allRegularParametersList()
void processObs(const SgMJD &t, const SgVector &o_c, const SgVector &sigma)
const QString & getAcAbbName() const
const QString & getUserEmailAddress() const
const QString & getMachineMachineName() const
const QString & getMachineRelease() const
const QString & getMachineNodeName() const
const QString & getUserDefaultInitials() const
const QString & getAcFullName() const
const QString & getCurrentDir() const
const QString & getExecDir() const
const QString & getUserName() const
const QString & getMachineSysName() const
virtual void write(LogLevel, quint32, const QString &, bool=false)
@ F_SOLVE_SPLFL_LONG
Another version from spoolfile format: 12/01/20 00:02.
@ F_SOLVE_SPLFL_SHORT
Another spoolfile represenation of epoch: 2012.01.20-09:14:28.05.
@ F_YYYYMonDD
Date in digits: 2010.04.02.
@ F_HHMMSS
Just time: 17:02:43.6.
@ F_SOLVE_SPLFL_V2
A spoolfile represenation of epoch: 2012.01.20-09:14:28.
@ F_Simple
Digits: 2010/04/02 17:02:43.6.
@ F_Date
RFC2822 date format realized by Qt (Qt::RFC2822Date)
@ F_SOLVE_SPLFL
That was used in ECC.dat files: 2010.04.02-17.02.
@ F_INTERNAL
Digits, date and time: 20100402.71.
QString toString(Format format=F_Verbose) const
static SgMJD currentMJD()
static void MJD_reverse(int date, double time, int &nYear, int &nMonth, int &nDay, int &nHour, int &nMin, double &dSec)
unsigned int nRow() const
void setElement(unsigned int i, unsigned int j, double d)
double getElement(unsigned int i, unsigned int j) const
unsigned int nCol() const
double getPressure() const
double getTemperature() const
@ Attr_ARTIFICIAL_DATA
data are artificial (mean values or some model);
double getRelativeHumidity() const
double getDversion() const
double getSFF_NrmRes_plus_15(DataType) const
double getSigma2add(DataType) const
const QString & getKey() const
int numProcessed(DataType dType) const
double getSFF_NrmRes(DataType) const
void setSFF_NrmRes_plus_15(DataType dType, double d)
void setSFF_NrmRes(DataType dType, double d)
int numUsable(DataType) const
void setNormedResid(DataType dType, double d)
double chi2(DataType) const
double wrms(DataType) const
double reducedChi2(DataType) const
virtual int getMediaIdx() const
@ Attr_NOT_VALID
omit the observation;
@ Attr_PROCESSED
the observation has been processed;
@ Attr_DYNAMIC
parameters supposed to be estimated during the common solution;
const QString & getScaleName() const
double getPwlAPriori() const
double getSolution() const
SgParameterCfg::PMode getPMode() const
double getSigmaAPriori() const
@ Attr_IS_SOLVED
for estimator use
void setSigmaAPriori(double v)
void setPMode(SgParameterCfg::PMode mode)
const SgParameterCfg & getZenith() const
const SgParameterCfg & getAtmGrad() const
SgParameterCfg::PMode getStnCooMode() const
const SgParameterCfg & getPolusUT1() const
SgParameterCfg::PMode getClock0Mode() const
const SgParameterCfg & getPolusXY() const
const SgParameterCfg & getPolusNut() const
const SgParameterCfg & getClock0() const
SgParameterCfg::PMode getZenithMode() const
SgParameterCfg::PMode getBlLengthMode() const
SgParameterCfg::PMode getSrcCooMode() const
SgParameterCfg::PMode getBlClockMode() const
SgMJD getTMean(const SgMJD &=tZero) const
const QString & getName() const
@ Attr_IS_SPECIAL
for estimator use
int getNumOfPolynomials() const
const SgMJD & tStart() const
SgParameter * getP_Bi(int)
int getNumOfNodes() const
virtual int getNumOfSegments()=0
SgParameter * getP_Ai(int)
virtual double calcRateRms4Sfo()
double calcPolySolution(const SgMJD &)
virtual double calcRateSolution(const SgMJD &)=0
const SgMJD & tFinis() const
virtual double calcRateSigma(const SgMJD &)
void calculateConditionNumber()
QMap< QString, SgArcStorage * > arcByName_
bool reportAtmo(const QString &path, const QString &fileName)
QList< SgParameter * > parList_
void absorbInfo(SgTaskManager *)
QString path2APrioriFiles_
void reportAPrioriBlock_Output4Spoolfile(QTextStream &)
void reportStationStatsBlock_Output4Spoolfile(QTextStream &)
void setSession(SgVlbiSession *)
void reportGeneralStatsBlock_Output4Spoolfile(QTextStream &)
void reportResidualsBlock_Output4Spoolfile(QTextStream &)
SgSolutionReporter(SgVlbiSession *, const SgIdentities &)
void reportDeselectedObsBlock_Output4Spoolfile(QTextStream &)
QList< QString > userComents_
bool reportSources_Output4AposterioriFiles(const QString &path, const QString &fileName)
void reportBaselineVariationsBlock_Output4Spoolfile(QTextStream &)
void reportDeselectedObsBlock_Output4Spoolfile_v2(QTextStream &)
QList< SgPwlStorage * > pwlList_
bool reportNotUsedObs(const QString &path, const QString &fileName)
bool reportTotalZenithDelays(const QString &path)
QMap< QString, SgPwlStorage * > pwlByName_
void evaluateUsedErpApriori2()
QList< SgVlbiSourceInfo * > usedSources_
QList< SgParameter * > allParList_
void reportSourceStatsBlock_Output4Spoolfile(QTextStream &)
void reportIdentitiesBlock_Output4Spoolfile(QTextStream &)
void report2aposterioriFiles(const QString &path, const QString &fileNameBase)
bool reportStoch4Stn(const QString &path)
void report2MyFile(const QString &path, const QString &fileName)
void reportMetStatsBlock_Output4Spoolfile(QTextStream &)
void reportEstimationBlock_Output4Spoolfile(QTextStream &)
void reportConfiguresBlock_Output4Spoolfile(QTextStream &)
QString solutionTypeName_
void lookupParameter(SgParameter *)
void reportResidualsBlock_Output4Spoolfile_old(QTextStream &)
SgParametersDescriptor * parametersDescriptor_
QList< SgArcStorage * > arcList_
void reportBaselineStatsBlock_Output4Spoolfile(QTextStream &)
bool reportStations_Output4AposterioriFiles(const QString &path, const QString &fileName)
QMap< QString, SgEstimator::StochasticSolutionCarrier > stcSolutions_
bool reportCloc(const QString &path, const QString &fileName)
QMap< QString, SgParameter * > parByName_
void evaluateUsedErpApriori()
bool reportStochParameter(const QString &key, const SgParameterCfg &parCfg, const QString &path, const QString &fileName)
void reportDeselectedObsBlock_Output4Spoolfile_v3(QTextStream &)
QMap< QString, QMap< QString, SgParameter * > > stcParByName_
bool reportPall(const QString &path, const QString &fileName)
void report2spoolFile(const QString &path, const QString &path2obsStatus, const QString &fileName, bool=false)
QList< SgVlbiSourceInfo * > skippedSources_
void reportStochasticEstimations(const QString &path)
static const QString className()
double getElement(unsigned int i, unsigned int j) const
bool getHave2ApplyNutationHFContrib() const
const QString & getExtAPrioriSitesVelocitiesFileName() const
bool getUseExtAPrioriSitesVelocities() const
bool getHave2ApplyOldPoleTideContrib() const
bool getUseExtAPrioriHiFyErp() const
bool getUseExtAPrioriSitesPositions() const
bool getUseExtAPrioriErp() const
bool getIsSolveCompatible() const
VlbiDelayType getUseDelayType() const
bool getHave2ApplyEarthTideContrib() const
EstimatorPwlMode getPwlMode() const
bool getHave2ApplyPyContrib() const
const QString & getExtAPrioriSitesPositionsFileName() const
const QString & getExtAPrioriHiFyErpFileName() const
QMap< QString, AutomaticProcessing > & apByNetId()
bool getHave2ApplyOceanTideContrib() const
int getQualityCodeThreshold() const
bool getUseExtAPrioriSourcesPositions() const
VlbiRateType getUseRateType() const
bool getHave2ApplyUt1OceanTideHFContrib() const
bool getHave2ApplyPxyOceanTideHFContrib() const
bool getHave2ApplyOldOceanTideContrib() const
bool getHave2ApplyPoleTideContrib() const
bool getUseExtAPrioriAxisOffsets() const
bool getHave2ApplyPxyLibrationContrib() const
bool getHave2ApplyTiltRemvrContrib() const
const QString & getExtAPrioriSourcesPositionsFileName() const
bool getHave2ApplyPxContrib() const
bool getHave2ApplyOceanPoleTideContrib() const
bool getHave2outputCovarMatrix() const
const QString & getExtAPrioriAxisOffsetsFileName() const
int getActiveBandIdx() const
bool getHave2ApplyFeedCorrContrib() const
const QString & getExtAPrioriErpFileName() const
bool getHave2ApplyUt1LibrationContrib() const
SgEstimator * estimator()
int getNumOfParameters() const
int getNumOfConstraints() const
void setElement(unsigned int i, double d)
double getElement(unsigned int i) const
const SgMJD & getReleaseEpoch() const
QString name(NameFormat fmt=NF_Human) const
double getZenithDelayW() const
double getElevationAngle() const
double getEstZenithDelay() const
const SgMeteoData & getMeteoData() const
double getZenithDelayH() const
double getEstZenithDelaySigma() const
double getParallacticAngle() const
double getAzimuthAngle() const
QMap< QString, SgVlbiBaselineInfo * > & baselinesByName()
QMap< QString, SgVlbiStationInfo * > & stationsByName()
int getInputFileVersion() const
QMap< QString, SgVlbiSourceInfo * > & sourcesByName()
const QString & getCorrelatorType() const
SgVlbiStationInfo * stn_2(QMap< QString, SgVlbiStationInfo * >) const
@ Attr_USE_IONO4GRD
use ionosphere corrections for group delays;
@ Attr_USE_IONO4PHD
use ionosphere corrections for phase delays;
@ Attr_NOT_VALID
omit the baseline;
SgVlbiStationInfo * stn_1(QMap< QString, SgVlbiStationInfo * >) const
QList< SgVlbiObservable * > & observables()
double sigma2Apply() const
double getAmbiguitySpacing() const
int getNumOfAmbiguities() const
double getSigma2add() const
double getResidual() const
double getResidualNorm() const
double getUvFrPerAsec(int i) const
const SgMJD & epoch() const
int getQualityFactor() const
SgVlbiStationInfo *& stn_2()
SgVlbiStationInfo *& stn_1()
int getNumOfChannels() const
const QString & getErrorCode() const
SgVlbiObservation * owner()
SgVlbiMeasurement & phDRate()
double getEffIntegrationTime() const
SgVlbiSourceInfo *& src()
double getTotalPhase() const
SgVlbiBaselineInfo *& baseline()
SgVlbiMeasurement * activeDelay()
double getCorrCoeff() const
SgVlbiMeasurement & grDelay()
double getCalcNutWahr_dEpsV() const
double aPrioriCipY() const
SgVlbiStationInfo * stn_1()
double getNormalizedRateResidual()
SgVlbiAuxObservation * auxObs_2()
double getCalcNutWahr_dPsiV() const
double aPrioriCipX() const
double getCalcNut2006_dPsiV() const
SgVlbiBaselineInfo * baseline()
double getCalcNut2006_dEpsV() const
double getNormalizedDelayResidual()
double aPrioriUt1() const
SgVlbiStationInfo * stn_2()
SgVlbiObservable * observable(const QString &)
SgVlbiObservable * primeObs()
QMap< QString, SgVlbiObservable * > & observableByKey()
SgVlbiAuxObservation * auxObs_1()
double sumAX_4delay() const
double sumAX_4rate() const
SgVlbiObservable * activeObs()
const SgMJD & getTFinis() const
const QString & getName() const
const QString & getNetworkID() const
const SgMJD & getTStart() const
@ Attr_HAS_IONO_CORR
the theoretical values are available;
const QString & getOfficialName() const
const QString & getNetworkSuffix() const
const QString & getSessionCode() const
const SgMJD & getTMean() const
SgVlbiBand * primaryBand()
const SgAPriories & getApStationVelocities() const
SgModelsInfo & calcInfo()
QList< SgVlbiBand * > & bands()
QMap< QString, SgVlbiStationInfo * > & stationsByName()
SgParameter * pPolusYRate()
const SgMJD & tRefer() const
SgParameter * pPolusXRate()
QList< SgVlbiObservation * > & observations()
bool hasCipPartials() const
void setReporter(SgSolutionReporter *reporter)
SgTaskConfig * getConfig()
void getAprioriErp(const SgMJD &t, double &vUt1, double &rUt1, double &vPx, double &rPx, double &vPy, double &rPy, double &vCx, double &rCx, double &vCy, double &rCy)
QMap< QString, SgVlbiSourceInfo * > & sourcesByName()
SgParametersDescriptor * getParametersDescriptor()
QMap< QString, SgVlbiBaselineInfo * > & baselinesByName()
const QString & getAprioriComments() const
static QString dn2String(double dn, bool mandatorySign=false)
static QString ra2String(double ra)
@ Attr_NOT_VALID
omit the source;
SgParameter * pAtmGradN()
QMap< QString, SgVlbiAuxObservation * > * auxObservationByScanId()
const Sg3dVector & getV_ea()
double getAxisOffset() const
const QString & getTectonicPlateName() const
@ Attr_NOT_VALID
omit the station;
@ Attr_REFERENCE_CLOCKS
the clocks are the reference ones;
@ Attr_IGNORE_CABLE_CAL
do not apply cable calibration;
const Sg3dVector & getR()
SgParameter * pClocks(int i)
SgParameter * pAtmGradE()
SgParameter * pZenithDelay()
double getEstWetZenithDelay() const
double getAxisOffset_ea() const
const Sg3dVector & getR_ea()
SgBreakModel & clockBreaks()
int getClocksModelOrder() const
double getEstClockModel(int idx) const
SgParameter * pAxisOffset()
double getEstClockModelSigma(int idx) const
QList< SgParameter * > * list_
bool doReportNotUsedData_