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/d)")));
649 prs_ut->append((pD_ut=
new SgParameter(
"UT1, 3-term (ms/d/d)")));
650 prs_px->append((pC_px=
new SgParameter(
"PMx, 2-term (mas/d/d)")));
651 prs_px->append((pD_px=
new SgParameter(
"PMx, 3-term (mas/d/d)")));
652 prs_py->append((pC_py=
new SgParameter(
"PMy, 2-term (mas/d/d)")));
653 prs_py->append((pD_py=
new SgParameter(
"PMy, 3-term (mas/d/d)")));
654 prs_cx->append((pC_cx=
new SgParameter(
"CIPx, 2-term (mas/d/d)")));
655 prs_cx->append((pD_cx=
new SgParameter(
"CIPx, 3-term (mas/d/d)")));
656 prs_cy->append((pC_cy=
new SgParameter(
"CIPy, 2-term (mas/d/d)")));
657 prs_cy->append((pD_cy=
new SgParameter(
"CIPy, 3-term (mas/d/d)")));
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);
1418 str.sprintf(
" Data base $%9s Ver%3d",
1422 ts << str <<
"\n\n";
1424 str.sprintf(
" Matrix Condition Number =%24.15E",
1426 ts << str <<
"\n\n";
1429 ts <<
" Listing_Options: CRES_EMULATION NO BASELINES NO MINIMUM NO" <<
"\n"
1430 <<
" Listing_Options: MAPPED_EOP_OUTPUT NO SEG_OUTPUT NO APRIORI_ZENDEL NO" <<
"\n"
1431 <<
" Listing_Options: NRD_TABLE YES CHI_TABLE NO SRC_STAT PRE2004 SEG_STYLE PRE2005" <<
"\n";
1432 ts <<
" SgLib release : " <<
1437 ts <<
" User comments:" <<
"\n";
1449 ts <<
" Flyby Station Cals: DB Station Cals: | DB Non-station Cals: "
1450 <<
"| Atmosphere Partial:\n"
1451 <<
" ------------------------------------------------------------------------------"
1452 <<
"--------------------\n";
1456 int numOfStrings, idxStr, idxContr;
1460 listOfContributions <<
"Pol Tide";
1462 listOfContributions <<
"WobXCont";
1464 listOfContributions <<
"WobYCont";
1466 listOfContributions <<
"EarthTid";
1468 listOfContributions <<
"Ocean";
1470 listOfContributions <<
"UT1Ortho";
1472 listOfContributions <<
"XpYpOrth";
1477 listOfContributions <<
"PxyNutat";
1482 listOfContributions <<
"XpYpLib";
1484 listOfContributions <<
"UT1Libra";
1488 listOfContributions <<
"FeedCorr";
1490 listOfContributions <<
"TiltRmvr";
1492 listOfContributions <<
"OPTLCont";
1494 listOfContributions <<
"OldOcean";
1496 listOfContributions <<
"OldPTide";
1500 QString sIono(
"SION");
1505 QMap<QString, int> gionByName;
1506 QString sIonos[3]={
"", sIono,
""};
1507 sIonos[2] = sIono +
"/no" + sIono;
1512 QString stName=it.value()->getKey();
1519 QString blName=bln->
getKey();
1520 if (blName.contains(stName +
":") || blName.contains(
":" + stName))
1528 if (!gionByName.contains(stName))
1529 gionByName.insert(stName, nVal);
1530 else if (gionByName.value(stName)!=2 && gionByName.value(stName)!=nVal)
1531 gionByName[stName] = 2;
1539 if (!gionByName.contains(it.value()->getKey()))
1540 gionByName.insert(it.value()->getKey(), 0);
1543 idxStr = idxContr = 0;
1545 while (idxStr<numOfStrings)
1550 str.sprintf(
" %-8s:NMFDRFLY %-8s %-11s ",
1551 qPrintable(si->
getKey()),
1553 qPrintable(sIonos[gionByName[si->
getKey()]])
1561 if (idxContr<listOfContributions.size())
1563 str.sprintf(
"| %-8s |",
1564 qPrintable(listOfContributions.at(idxContr)));
1571 ts <<
" NMFWTFLY \n";
1577 ts <<
" ----------------------------------------------------------------------------"
1578 <<
"----------------------\n";
1579 str.sprintf(
" CALC Version: %.2f ",
1585 QString auxBandKey, s2;
1592 str.sprintf(
" %10s %2d NOT IN SOLUTION",
1593 qPrintable(s2.replace(s2.size()-2, 1, auxBandKey)),
1606 QString str(
""), useChar1(
""), useChar2(
""), sQcOb(
"");
1608 QString oppBandKey(
"");
1609 double dSnrOb, dDelay;
1610 bool isMultipleBand;
1617 ts <<
"1Residuals from Run " <<
reportID_ <<
"\n";
1618 ts <<
" Baseline Source Date Time Obs del Del res "
1619 <<
"Del er. Obs rate Rate res R.err elev azim frq2-rat QC XS"
1620 <<
" SNR / SNS_S Tau_obs_x #AmbX Tau_obs_s #AmbS Tau_apriori_clo "
1621 <<
"Tau_theoretical Tau_est_contrb Rate_obs_x Rate_obs_s"
1622 <<
" Rate_apriori_clock Rate_theoretical Rate_estim_contrib Eff. Dur. "
1623 <<
"Res_gr_del_X Res_gr_del_S Gr_Spc_X Gr_Spc_S USR Ampltude Phase Obsind DS "
1624 <<
"Delay_residual\n";
1626 <<
" fs/s fs/s fs/s deg deg deg deg seconds"
1627 <<
" seconds seconds seconds seconds"
1628 <<
" d/l d/l d/l d/l d/l"
1629 <<
" sec sec sec ns ns "
1630 <<
"d/l d/l rad seconds\n";
1641 double delay_clock=0.0, rate_clock=0.0;
1643 if (o && aux_1 && aux_2)
1658 if (isMultipleBand &&
1681 if (dDelay<=-1.0 || dDelay>=10.0)
1682 sVal =
"**************";
1684 sVal.sprintf(
"%#14.0f", dDelay*1.0e12);
1686 str.sprintf(
"%7d%1s %8s/%8s %8s %s %s%#8.0f %1s %#6.0f%#14.0f%#8.0f %1s %#6.0f"
1687 "%4d%4d%4d%4d %9.6f %2d/%2s %6.1f / %6.1f"
1688 " %17.13f %5d %17.13f %5d"
1689 " %16.13f %16.13f %17.13f"
1690 " %20.12e %20.12e %20.12e %20.12e %20.12e @@ "
1691 " %9.4f %17.8e %17.8e %9.4f %9.4f %3d %10.7f %9.5f %6d %24.12e"
1695 qPrintable(useChar1),
1703 qPrintable(useChar2),
1708 qPrintable(useChar2),
1712 (
int)round(aux_2->getElevationAngle()*
RAD2DEG),
1714 (
int)round(aux_2->getAzimuthAngle()*
RAD2DEG),
1786 ts << qPrintable(str) <<
"\n";
1798 QString str(
""), useChar1(
""), useChar2(
""), sQcOb(
"");
1800 QString oppBandKey(
"");
1801 double dSnrOb, dDelay;
1802 bool isMultipleBand;
1809 ts <<
"1Residuals from Run " <<
reportID_ <<
"\n";
1810 ts <<
" Baseline Source Date Time Obs del Del res Del err"
1811 <<
" Obs rate Rate res Rate err elev frq2-rat QC XS SNR / SNS_S\n"
1813 <<
" fs/s fs/s fs/s deg\n";
1822 if (o && aux_1 && aux_2)
1837 if (isMultipleBand &&
1860 if (dDelay<=-1.0 || dDelay>=10.0)
1861 sVal =
"**************";
1863 sVal.sprintf(
"%#14.0f", dDelay*1.0e12);
1865 str.sprintf(
"%7d%1s %8s/%8s %8s %s %s%#8.0f %1s %#6.0f%#14.0f%#8.0f %1s %#6.0f"
1866 "%4d%4d%4d%4d %9.6f %2d/%2s %6.1f / %6.1f",
1875 qPrintable(useChar2),
1880 qPrintable(useChar2),
1884 (
int)round(aux_2->getElevationAngle()*
RAD2DEG),
1886 (
int)round(aux_2->getAzimuthAngle()*
RAD2DEG),
1921 ts << qPrintable(str) <<
"\n";
1933 ts <<
" Met Statistics:\n"
1934 <<
" Temperature Pressure Humidity\n"
1935 <<
" Station average rms average rms average rms\n";
1944 str.sprintf(
" %-8s MET",
1945 qPrintable(si->
getKey()));
1949 double sumT_1, sumT_2, sumP_1, sumP_2, sumH_1, sumH_2;
1950 double rmsT, rmsP, rmsH, d;
1951 sumT_1 = sumT_2 = sumP_1 = sumP_2 = sumH_1 = sumH_2 = 0.0;
1952 rmsT = rmsP = rmsH = 0.0;
1956 QMap<QString, SgVlbiAuxObservation*>::iterator jt;
1977 d = sumT_2 - sumT_1*sumT_1/num;
1978 if (d<=0.0 && fabs(d)/sumT_2<1.0e-12)
1982 d = sumP_2 - sumP_1*sumP_1/num;
1983 if (d<=0.0 && fabs(d)/sumP_2<1.0e-12)
1987 d = sumH_2 - sumH_1*sumH_1/num;
1988 if (d<=0.0 && fabs(d)/sumH_2<1.0e-12)
1992 str.sprintf(
" %6.1f %6.1f %6.1f %6.1f%8.1f %7.1f",
1993 sumT_1/num, rmsT, sumP_1/num, rmsP, sumH_1/num, rmsH);
1996 str =
" -999.0 0.0 -999.0 0.0-99900.0 0.0";
2009 int numRecObs, numRec59Obs, numProcdObs, num;
2010 int nYear, nMonth, nDay, nHour, nMin;
2012 double dSec, fInterval;
2014 double rmsDelay(0.0), nrmsDelay(0.0), chi2Delay(0.0);
2015 double rmsRate(0.0), nrmsRate(0.0), chi2Rate(0.0);
2016 double nrmsCombined(0.0), chi2Combined(0.0);
2017 double sum1d, sum2d;
2018 double sum1r, sum2r;
2028 numRecObs = numProcRateObs = numRec59Obs = 0;
2048 for (QMap<QString, SgVlbiObservable*>::iterator it=obs->
observableByKey().begin();
2051 int qCode=it.value()->getQualityFactor();
2052 isOk = isOk && qCode>=qCodeLimit;
2053 isOk59 = isOk59 && qCode>=5;
2080 sum1r = sum2r = sum1d = sum2d = 0.0;
2094 if (num != numProcdObs)
2095 std::cout <<
"num != numProcdObs: " << num <<
" vs " << numProcdObs <<
"\n";
2097 nrmsDelay = sqrt((sum2d - sum1d*sum1d/num)/num);
2105 nrmsRate = sqrt((sum2r - sum1r*sum1r/num)/num);
2110 str.sprintf(
" Run %10s %7d Observation Pairs Available ",
2114 str.sprintf(
" Session started on: %14.6f %04d.%02d.%02d %02d:%02d:%06.3f UTC",
2116 nYear, nMonth, nDay, nHour, nMin, dSec);
2119 nDay = (int)trunc(fInterval);
2120 fInterval = fInterval - nDay;
2123 nHour = (int)(fInterval/3600.0);
2124 nMin = (int)((fInterval - 3600.0*nHour)/60.0);
2125 dSec = fInterval - 3600.0*nHour - 60.0*nMin;
2126 str.sprintf(
" Actual duration: %9.3f sec %02d %02d:%02d:%06.3f sec",
2127 fInterval + nDay*
DAY2SEC, nDay, nHour, nMin, dSec);
2130 str.sprintf(
" Solution type: %-17s ",
2132 ts << str <<
"\n\n";
2135 " Data Type Number of Weighted RMS Normalized RMS Chi Square" <<
"\n"
2136 " Observations Residual Residual (precis)" <<
"\n"
2140 str.sprintf(
" Delay %8d %18.3f ps %17.2f %12.4f",
2141 numProcdObs, rmsDelay, nrmsDelay, chi2Delay);
2144 str.sprintf(
" Rate %8d %18g fs/s %15.2f %12.4f",
2145 numProcRateObs, rmsRate, nrmsRate, chi2Rate);
2148 str.sprintf(
"Combined %8d %15.2f %12.4f",
2149 0, nrmsCombined, chi2Combined);
2152 ts <<
"----------------------------------------------------------------------- \n";
2156 str.sprintf(
" Used quality_code_limit: %3d ",
2160 str.sprintf(
" Number of potentially recoverable observations: %8d ",
2164 str.sprintf(
" Number of potentially good observations with QC 5-9:%7d ",
2168 str.sprintf(
" Number of used observations: %8d (%6.2f%%) ",
2169 numProcdObs, numProcdObs*100.0/numRecObs);
2172 str.sprintf(
" Number of suppressed observations: %8d (%6.2f%%) ",
2173 (numRecObs - numProcdObs), (numRecObs - numProcdObs)*100.0/numRecObs);
2176 ts <<
"----------------------------------------------------------------------- \n\n\n\n";
2187 <<
" Baseline Statistics\n"
2188 <<
" Baseline # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. "
2190 <<
" used/recov ps standard ( 15ps+i) fs/s "
2194 QMap<QString, SgVlbiStationInfo*> skippedStationsByName;
2195 QMap<QString, SgVlbiStationInfo*>::iterator itSi;
2200 skippedStationsByName.insert(si->
getKey(), si);
2204 QMap<QString, SgVlbiBaselineInfo*>::iterator it;
2208 QString biName=bi->
getKey();
2209 QString st1Name=biName.left(8);
2210 QString st2Name=biName.right(8);
2212 !skippedStationsByName.contains(st1Name) &&
2213 !skippedStationsByName.contains(st2Name) )
2221 str.sprintf(
" %-17s%5d/%5d%8.1f %9.2f %9.2f %7.1f %10.2f%7.1f%7.1f",
2222 qPrintable(biName.replace(8, 1,
"-")),
2238 skippedBaselines.append(bi);
2242 if (skippedBaselines.size())
2244 ts <<
" Not included: \n\n";
2245 for (
int i=0; i<skippedBaselines.size(); i++)
2248 QString biName=bi->
getKey();
2249 str.sprintf(
" %-17s%5d/%5d deselected",
2250 qPrintable(biName.replace(8, 1,
"-")),
2257 skippedStationsByName.clear();
2258 skippedBaselines.clear();
2269 <<
" Source Statistics \n"
2270 <<
" Source # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. \n"
2271 <<
" ps standard ( 15ps) fs/s \n \n";
2275 QMap<QString, SgVlbiSourceInfo*>::iterator it;
2292 str.sprintf(
" %12s %1s %5d/%5d%8.1f %9.2f %8.2f %7.1f %10.2f",
2307 ts <<
" Not included: \n\n";
2311 str.sprintf(
" %-10s%5d/%5d deselected",
2312 qPrintable(si->
getKey()),
2343 <<
" Station Statistics \n"
2344 <<
" Station # W.Obs W.RMS Del N.R.D. N.R.D. W.RMS Rate N.R.R. \n"
2345 <<
" ps standard ( 15ps) fs/s \n \n";
2350 QMap<QString, SgVlbiStationInfo*>::iterator it;
2356 str.sprintf(
" %12s %5d/%5d%8.1f %9.2f %8.2f %7.1f %10.2f",
2357 qPrintable(si->
getKey()),
2370 skippedStations.append(si);
2374 if (skippedStations.size())
2376 ts <<
" Not included: \n\n";
2377 for (
int i=0; i<skippedStations.size(); i++)
2380 str.sprintf(
" %-10s%5d/%5d deselected",
2381 qPrintable(si->
getKey()),
2388 skippedStations.clear();
2403 <<
" *** Flyby Status ***\n\n"
2404 <<
" directory: " << qPrintable(path2AF) <<
"\n\n"
2405 <<
"Station Source Nutation Nutation Earth Earth Station "
2406 <<
"Pressure EOP Intp. EOP Intp. High Freq Axis \n"
2407 <<
"Positions Positions Model Time Rotation Rotation Velocity "
2408 <<
"Loading Smoothing Smoothing EOP Offset \n"
2409 <<
" Series Series Interpol. Model "
2410 <<
" CALC Mod File Model Mod File \n"
2411 <<
"--------- --------- --------- --------- --------- --------- --------- "
2412 <<
"--------- --------- --------- --------- ---------\n";
2420 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2422 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2428 QString(
"C. Spline") :
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2433 ts << qPrintable(QString(
"NONE").leftJustified(9,
' ',
true)) <<
" ";
2435 ts << qPrintable(QString(
"NO_ZONAL").leftJustified(9,
' ',
true)) <<
" ";
2437 ts << qPrintable(QString(
"N/A").leftJustified(9,
' ',
true)) <<
" ";
2445 ts <<
"Site Plate Map: " << qPrintable(path2AF) <<
"/sitpl.dat \n\n";
2453 static const double clcScaleVals[10] =
2454 {1.0e09, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0,
2455 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0, 1.0e14/86400.0};
2456 static const QString clcScaleNames[10] =
2457 {
"ns ",
"D-14 ",
"D-14/day ",
"D-14/day ",
"D-14/day^2",
2458 "D-14/day^3",
"D-14/day^4",
"D-14/day^5",
"D-14/day^6",
"D-14/day^7"};
2476 <<
" Parameter adjustments for run " << qPrintable(
reportID_)
2478 <<
" Reference epoch for polynomial models: "
2481 <<
" Adjustment a-sigma m-sigma\n";
2493 str.sprintf(
" %8s CLCK %s Reference",
2494 qPrintable(si->
getKey()),
2511 double cXY, cXZ, cYZ;
2512 double latitude, longitude, height;
2522 m3M = W(-latitude)*V(longitude);
2560 ts <<
"Station positions are for epoch: "
2562 str.sprintf(
"%5d. %-8s %04d %4s X Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2571 str.sprintf(
"%5d. %-8s %04d %4s Y Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2580 str.sprintf(
"%5d. %-8s %04d %4s Z Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2590 str.sprintf(
" %-8s %04d U Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2597 str.sprintf(
" %-8s %04d E Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2604 str.sprintf(
" %-8s %04d N Comp %14.2f mm %14.3f mm %14.3f mm %14.3f mm",
2615 double vAxisOffset, sAxisOffset;
2620 str.sprintf(
"%5d. %-8s Axis Offset %24.2f mm %14.3f mm %18.3f mm %18.3f mm",
2622 qPrintable(si->
getKey()),
2626 sAxisOffset*1.0e3*chi );
2635 int nPwl, nLoc, nMax;
2636 double *dVal, *dSig;
2641 nMax = std::max(nPwl, nLoc);
2642 dVal =
new double[nMax];
2643 dSig =
new double[nMax];
2644 for (
int i=0; i<nMax; i++)
2645 dVal[i] = dSig[i] = 0.0;
2646 for (
int i=0; i<nLoc; i++)
2651 for (
int i=0; i<nPwl; i++)
2656 for (
int i=0; i<nMax; i++)
2658 str.sprintf(
"%5d. %-8s CL %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2659 idx, qPrintable(si->
getKey()), i,
2661 dVal[i]*clcScaleVals[i], qPrintable(clcScaleNames[i]),
2662 dSig[i]*clcScaleVals[i], qPrintable(clcScaleNames[i]),
2663 dSig[i]*clcScaleVals[i]*chi, qPrintable(clcScaleNames[i]));
2686 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2687 idx, qPrintable(si->
getKey()), 0,
2689 pb->
pA0()->
getSolution()*clcScaleVals[0], qPrintable(clcScaleNames[0]),
2690 pb->
pA0()->
getSigma()*clcScaleVals[0], qPrintable(clcScaleNames[0]),
2691 pb->
pA0()->
getSigma()*clcScaleVals[0]*chi, qPrintable(clcScaleNames[0]));
2698 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2699 idx, qPrintable(si->
getKey()), 1,
2701 pb->
pA1()->
getSolution()*clcScaleVals[1], qPrintable(clcScaleNames[1]),
2702 pb->
pA1()->
getSigma()*clcScaleVals[1], qPrintable(clcScaleNames[1]),
2703 pb->
pA1()->
getSigma()*clcScaleVals[1]*chi, qPrintable(clcScaleNames[1]));
2710 str.sprintf(
"%5d. %-8s BR %1d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2711 idx, qPrintable(si->
getKey()), 2,
2713 pb->
pA2()->
getSolution()*clcScaleVals[2], qPrintable(clcScaleNames[2]),
2714 pb->
pA2()->
getSigma()*clcScaleVals[2], qPrintable(clcScaleNames[2]),
2715 pb->
pA2()->
getSigma()*clcScaleVals[2]*chi, qPrintable(clcScaleNames[2]));
2725 str.sprintf(
" %-8s BR 0 %s #%3d band=* %15.3f ns %15.3f ns %18.3f ns",
2726 qPrintable(si->
getKey()),
2748 str.sprintf(
" %-8s BR 0 %s #%3d band=%s %15.3f ns %15.3f ns %18.3f ns",
2749 qPrintable(sib->
getKey()),
2760 "::reportEstimationBlock_Output4Spoolfile(): cannot find station " + si->
getKey() +
2761 " in the " + band->
getKey() +
"-band");
2770 str.sprintf(
"%5d. %-8s AT %d %s %20.3f %-s %10.3f %-s %10.3f %-s",
2771 idx, qPrintable(si->
getKey()), i,
2780 str.sprintf(
" %-8s Atm %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2781 qPrintable(si->
getKey()),
2796 str.sprintf(
"%5d. %-8s AT 0 %s %20.3f %-s %10.3f %-s %10.3f %-s",
2797 idx, qPrintable(si->
getKey()),
2816 str.sprintf(
"%5d. %-8s NG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2817 idx, qPrintable(si->
getKey()),
2825 str.sprintf(
"%5d. %-8s EG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2826 idx, qPrintable(si->
getKey()),
2834 str.sprintf(
"%5d. %-8s NG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2835 idx, qPrintable(si->
getKey()),
2843 str.sprintf(
"%5d. %-8s EG %s %20.3f %-s %10.3f %-s %10.3f %-s",
2844 idx, qPrintable(si->
getKey()),
2854 str.sprintf(
" %-8s NGr %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2855 qPrintable(si->
getKey()),
2864 str.sprintf(
" %-8s EGr %s Avg: %9.3f ps Rms: %11.3f ps Tot_Rms: %11.3f ps",
2865 qPrintable(si->
getKey()),
2903 str.sprintf(
"%5d.%s %-8s RT. ASC. %s %11.4f m-asec %10.4f m-asec %10.4f"
2907 qPrintable(si->
getKey()),
2914 str.sprintf(
" CORRECTION %20.7f\n SCALED SIGMA %20.7f",
2923 str.sprintf(
"%5d.%s %-8s DEC. %s %16.4f m-asec %15.4f m-asec %15.4f m-asec",
2926 qPrintable(si->
getKey()),
2933 str.sprintf(
" CORRECTION %20.7f\n SCALED SIGMA %20.7f",
2945 str.sprintf(
" %-8s CORRELATION %10.4f Reference date: 2000.01.01-12:00:00",
2946 qPrintable(si->
getKey()),
2950 str.sprintf(
" %-8s CORRELATION ------- Reference date: 2000.01.01-12:00:00",
2951 qPrintable(si->
getKey()));
2965 ts <<
" Atmosphere Constraint Statistics\n";
2966 double d, ovrl_rms, ovrl_rel, ovrl_trace;
2967 double scale=1.0e12/
vLight/24.0;
2968 ovrl_rms = ovrl_trace = ovrl_rel = 0.0;
2980 ovrl_rel += d/sigmaAPriori/sigmaAPriori;
2982 ovrl_trace += pwl->
trace();
2983 str.sprintf(
"%3d. %-8s Input %6.2f ps/h RMS %6.2f ps/h NRMS %5.2f share %4.2f count %3d",
2984 idxAux, qPrintable(si->
getKey()),
2995 ovrl_rms = sqrt(ovrl_rms/sum);
2996 ovrl_rel = sqrt(ovrl_rel/sum);
2997 str.sprintf(
" Overall RMS %6.2f ps/h NRMS %5.2f share %4.2f count %3d",
3002 ts << str <<
"\n\n";
3007 double d, ovrl_rms, ovrl_rel, ovrl_trace;
3008 double scale=1.0e14/86400.0;
3009 ovrl_rms = ovrl_trace = ovrl_rel = 0.0;
3012 ts <<
" Clock Constraint Statistics\n";
3024 ovrl_rel += d/sigmaAPriori/sigmaAPriori;
3026 ovrl_trace += pwl->
trace();
3027 str.sprintf(
"%3d. %-8s Input %6.2f D-14 RMS %6.2f D-14 NRMS %5.2f share %4.2f count %3d",
3028 idxAux, qPrintable(si->
getKey()),
3039 ovrl_rms = sqrt(ovrl_rms/sum);
3040 ovrl_rel = sqrt(ovrl_rel/sum);
3041 str.sprintf(
" Overall RMS %6.2f D-14 NRMS %5.2f share %4.2f count %3d",
3046 ts << str <<
"\n\n";
3051 bool isErpAdjusted(
false);
3052 double dUt1=0.0, dPmx=0.0, dPmy=0.0;
3053 double rUt1=0.0, rPmx=0.0, rPmy=0.0;
3054 double sigUt1=0.0, sigPmx=0.0, sigPmy=0.0;
3055 double aprUt1=0.0, aprPmx=0.0, aprPmy=0.0, dt, dd;
3056 double aprCipX=0.0, aprCipY=0.0;
3067 str.sprintf(
"%5d. X Wobble 0, %s %12.4f masec %10.2f microasec %10.2f microasec %10.2f microasec",
3077 isErpAdjusted =
true;
3087 str.sprintf(
"%5d. X Wobble 1, %s %12.4f mas/d %10.2f microas/d %10.2f microas/d %10.2f microas/d",
3097 isErpAdjusted =
true;
3111 str.sprintf(
"%5d. Y Wobble 0, %s %12.4f masec %10.2f microasec %10.2f microasec %10.2f microasec",
3121 isErpAdjusted =
true;
3131 str.sprintf(
"%5d. Y Wobble 1, %s %12.4f mas/d %10.2f microas/d %10.2f microas/d %10.2f microas/d",
3141 isErpAdjusted =
true;
3155 str.sprintf(
"%5d. UT1-TAI 0, %s %12.4f msec %10.2f microsec %11.2f microsec %11.2f microsec",
3164 isErpAdjusted =
true;
3180 str.sprintf(
"%5d. UT1-TAI 1, %s %12.4f ms/d %10.2f micros/d %11.2f micros/d %11.2f micros/d",
3190 isErpAdjusted =
true;
3194 if (isErpAdjusted && p4erp)
3199 <<
" EOP without included hi-freq variations (a-sigmas) \n"
3200 <<
" XWOB YWOB UT1-TAI"
3201 <<
" XSIG YSIG USIG\n"
3203 <<
" microasec microasec microsec\n";
3205 str.sprintf(
"%s %12.4f %12.4f %12.4f %11.2f %11.2f %11.2f",
3207 (aprPmx + rPmx*dt + dPmx)*
RAD2SEC*1.0e3,
3208 (aprPmy + rPmy*dt + dPmy)*
RAD2SEC*1.0e3,
3209 (aprUt1 + rUt1*dt + dUt1)*
DAY2SEC*1.0e3,
3213 ts << str <<
"\n" <<
"\n";
3230 double dX, dY, dPsi, dEps;
3231 double dX_sigma, dY_sigma, dPsi_sigma, dEps_sigma;
3239 dPsi = dX/sin(84381.4059*
SEC2RAD);
3240 dPsi_sigma = dX_sigma/sin(84381.4059*
SEC2RAD);
3242 dEps_sigma = dY_sigma;
3251 dX = dPsi*sin(84381.4059*
SEC2RAD) + aprCipX;
3252 dX_sigma = dPsi_sigma*sin(84381.4059*
SEC2RAD);
3253 dY = dEps + aprCipY;
3254 dY_sigma = dEps_sigma;
3256 double psiEst2Wahr=0.0, epsEst2Wahr=0.0;
3263 psiEst2Wahr, epsEst2Wahr);
3268 str.sprintf(
" EOP epoch (TT) MJD: %12.6f NUT epoch (TT) MJD: %12.6f",
3271 str.sprintf(
"%5d. Nutation offset in longitude (Psi) %14.3f mas %10.1f microasec"
3272 " %10.1f microasec ",
3280 str.sprintf(
" Nutation offset around X-axis (dX) %14.3f mas %10.1f "
3281 "microasec %10.1f microasec ",
3287 str.sprintf(
" Nutation offset wrt IAU 1980 model (Psi) %14.3f mas %10.1f "
3288 "microasec %10.1f microasec ",
3297 str.sprintf(
"%5d. Nutation offset in obliquity (Eps) %14.3f mas %10.1f "
3298 "microasec %10.1f microasec ",
3306 str.sprintf(
" Nutation offset around Y-axis (dY) %14.3f mas "
3307 "%10.1f microasec %10.1f microasec ",
3313 str.sprintf(
" Nutation offset wrt IAU 1980 model (Eps) %14.3f mas "
3314 "%10.1f microasec %10.1f microasec ",
3333 blName.replace(8, 1,
"-");
3336 str.sprintf(
"%5d. %-17s Clock offset "
3337 "%12.3f ps %9.3f ps %9.3f ps",
3338 idx, qPrintable(blName),
3357 blName.replace(8, 1,
"-");
3373 double cXY, cXZ, cYZ;
3378 b_apriori = (s2->
getR() - s1->
getR());
3388 double x2, y2, z2, sigX2, sigY2, sigZ2;
3396 lSigma = x2*sigX2 + y2*sigY2 + z2*sigZ2 +
3400 lSigma = sqrt(lSigma)/l;
3402 double phiSigma, a2, l4;
3405 phiSigma = (x2*z2*sigX2 + y2*z2*sigY2 + a2*a2*sigZ2 +
3408 phiSigma = sqrt(phiSigma);
3411 lambdaSigma = (y2*sigX2 + x2*sigY2 - 2.0*b.
at(
X_AXIS)*b.
at(
Y_AXIS)*cXY)/a2/a2;
3412 lambdaSigma = sqrt(lambdaSigma);
3414 str.sprintf(
"%5d. %-17s X Comp %15.2f mm %14.3f mm "
3415 "%14.3f mm %14.3f mm",
3416 idx, qPrintable(blName),
3423 str.sprintf(
"%5d. %-17s Y Comp %15.2f mm %14.3f mm "
3424 "%14.3f mm %14.3f mm",
3425 idx, qPrintable(blName),
3432 str.sprintf(
"%5d. %-17s Z Comp %15.2f mm %14.3f mm "
3433 "%14.3f mm %14.3f mm",
3434 idx, qPrintable(blName),
3442 str.sprintf(
" %-17s length %15.2f mm %14.3f mm "
3443 "%14.3f mm %14.3f mm",
3446 (l - b_apriori.
module())*1000.0,
3448 lSigma *1000.0*chi );
3451 str.sprintf(
" %-17s latitude %15.2f deg %13.3f mas "
3452 "%14.3f mas %14.3f mas",
3460 str.sprintf(
" %-17s longitude %15.2f deg %13.3f mas "
3461 "%14.3f mas %14.3f mas",
3471 "::reportEstimationBlock_Output4Spoolfile(): a station pointer is NULL");
3481 <<
" General constraints usage information: "
3484 str.sprintf(
" 1) CLO_RATE \"Clock rate between segments \" sigma %10.3E 10^-14 sec/sec",
3489 str.sprintf(
" 2) ATM_RATE \"Atmosphere rate between segments\" sigma %10.3E psec/hr",
3493 ts << str <<
"\n \n";
3496 ts <<
" No constraints have been imposed\n \n";
3498 str.sprintf(
" Corrected Reduced Chi-Square %8.4f",
3502 ts << str <<
"\n\n";
3512 QFile f(path +
"/" + fileName);
3513 if (!f.open(QIODevice::WriteOnly))
3516 "::reportAtmo(): error opening output file: " + path +
"/" + fileName);
3546 "::reportAtmo(): cannot report PWL zenith delays, the number of parameteres less than 1");
3552 "::reportAtmo(): cannot report PWL zenith delays, non-equal number of parameters");
3555 else if (step != pwl->
step())
3558 "::reportAtmo(): cannot report PWL zenith delays, non-equidistant steps");
3565 "::reportAtmo(): cannot report PWL zenith delays, missed station" + si->
getKey());
3575 ts <<
" yr mn dy hr min Julian Date ";
3577 ts << str.sprintf(
"%-8s ", qPrintable(it_st.value()->getKey()));
3580 ts <<
"offset sigma ";
3585 for (
int idx=0; idx<num+1; idx++)
3587 int yr, mn, dy, hr, mi;
3590 mi = (60*mi + sc)/60;
3592 str.sprintf(
" %2d %2d %2d %2d %2d %.5f",
3593 yr, mn, dy, hr, mi, t_i.
toDouble() + 2400000.5);
3602 ts << str.sprintf(
" %14.0f %5.0f",
3629 QFile f(path +
"/" + fileName);
3630 if (!f.open(QIODevice::WriteOnly))
3633 "::reportCloc(): error opening output file: " + path +
"/" + fileName);
3663 "::reportCloc(): cannot report PWL clocks, the number of parameteres less than 1");
3669 "::reportCloc(): cannot report PWL clocks, non-equal number of parameters");
3672 else if (step != pwl->
step())
3675 "::reportCloc(): cannot report PWL clocks, non-equidistant steps");
3683 "::reportCloc(): cannot report PWL clocks, missed station " + si->
getKey());
3693 ts <<
" yr mn dy hr min Julian Date ";
3695 ts << str.sprintf(
"%-8s ", qPrintable(it_st.value()->getKey()));
3698 ts <<
"offset sigma ";
3703 for (
int idx=0; idx<num+1; idx++)
3705 int yr, mn, dy, hr, mi;
3708 mi = (60*mi + sc)/60;
3710 str.sprintf(
" %2d %2d %2d %2d %2d %.5f",
3711 yr, mn, dy, hr, mi, t_i.
toDouble() + 2400000.5);
3720 ts << str.sprintf(
" %14.0f %5.0f",
3743 QFile f(path +
"/" + fileName);
3744 if (!f.open(QIODevice::WriteOnly))
3747 "::reportPall(): error opening the output file: " + path +
"/" + fileName);
3756 ts <<
allParList_.size() <<
" parameters in the list\n";
3758 ts << str.sprintf(
"%4d ", i) <<
allParList_.at(i)->getName() <<
"\n";
3760 ts <<
"\n" <<
PxAll_->
nRow() <<
" elements in a row of the covariance matrix\n";
3761 for (
unsigned int i=0; i<
PxAll_->
nRow(); i++)
3762 for (
unsigned int j=i; j<
PxAll_->
nCol(); j++)
3763 ts << str.sprintf(
"%4d %4d %22.15E", i, j,
PxAll_->
getElement(i, j)) <<
"\n";
3776 QFile f(path +
"/" + fileName);
3777 if (!f.open(QIODevice::WriteOnly))
3780 "::reportNotUsedObs(): error opening output file: " + path +
"/" + fileName);
3810 <<
"1 Baseline information for run " << qPrintable(
reportID_) <<
"\n"
3811 <<
" Monument to monument values at epoch "
3813 <<
" Baseline vector components: Length, Vertical and Transverse components\n"
3814 <<
" Vector mag c-sigma Length c-sigma "
3815 <<
"Horizontal c-sigma Vertical c-sigma\n"
3816 <<
" (mm) (mm) (mm) (mm)"
3817 <<
" (mm) (mm) (mm) (mm)\n";
3826 stations << it.value();
3828 n = stations.size();
3829 for (
int i=0; i<n; i++)
3830 for (
int j=i+1; j<n; j++)
3843 double length, lengthSigma;
3864 idxs[0] = idxs[1] = idxs[2] = -1;
3872 idxs[3] = idxs[4] = idxs[5] = -1;
3874 for (
int l=0; l<6; l++)
3875 for (
int m=0; m<6; m++)
3876 if (idxs[l]>=0 && idxs[m]>=0)
3879 calcLhv(ri_apriori, dr_i, rj_apriori, dr_j, mA, lhv, lhvSigma, length, lengthSigma);
3880 str.sprintf(
" %-8s %04d to %-8s %04d %14.2f %6.2f %14.2f %6.2f %9.2f %6.2f"
3884 length*1000.0, lengthSigma*1000.0,
3900 baselines << it.value();
3902 n = baselines.size();
3903 for (
int i=0; i<n; i++)
3913 double length, lengthSigma;
3927 for (
int l=0; l<3; l++)
3928 for (
int m=0; m<3; m++)
3931 calcLhv(ri_apriori, rj_apriori, db, mA, lhv, lhvSigma, length, lengthSigma);
3932 str.sprintf(
" %-8s %04d to %-8s %04d %14.2f %6.2f %14.2f %6.2f %9.2f %6.2f"
3936 length*1000.0, lengthSigma*1000.0,
3946 <<
"Note: a posteriori baseline vectors are expressed in a baseline-centric reference frames. "
3947 <<
"The first basis vector of the\nframe, l, is in direction of a priori baseline, (r_2 - r_1). "
3948 <<
"Direction of the second vector, h, is defined by a cross\nproduct of a priori baseline vector "
3949 <<
"and a priori geocentric vector of the 2nd station. The last basis vector, v, is\nperpendicular "
3950 <<
"to the vectors l and h and is radially inward at the center of the baseline. For the short "
3951 <<
"baselines, the\nvectors l and h are close to the horizontal plane and v is almost vertical "
3952 <<
"(with opposite sign). In the table above the\ncolumns are:\n * Vector mag: length of the a "
3953 <<
"posteriori baseline;\n * Length: l-component of the baseline;\n * Horizontal: "
3954 <<
"h-component of the baseline;\n * Vertical: v-component of the baseline;\n * c-sigma: "
3955 <<
"calculated (using standard deviations of adjusted station coordinates of baselines) standard "
3956 <<
"deviations\n of the corresponding values.\n\n";
3981 if (excludedObs.size() + unusableObs.size() + includedObs.size() == 0)
3983 ts <<
"No observations are in the solution.\n";
3985 "::reportDeselectedObsBlock_Output4Spoolfile(): no obs to report");
3990 for (
int idx=0; idx<unusableObs.size(); idx++)
3991 allObs << unusableObs.at(idx);
3992 for (
int idx=0; idx<excludedObs.size(); idx++)
3993 allObs << excludedObs.at(idx);
3994 for (
int idx=0; idx<includedObs.size(); idx++)
3995 allObs << includedObs.at(idx);
3998 ts <<
"# Status of observations of the solution of the Run " <<
reportID_ <<
"\n";
4000 <<
" database " <<
session_->
getName() <<
" version " << outputVersion <<
"\n";
4001 ts <<
"# First column: a status flag:\n";
4002 ts <<
"# u - the observation is unusable: either missed data on one of the bands,\n";
4003 ts <<
"# low quality code, deselected baseline, station or sources.\n";
4004 ts <<
"# e - excluded observation, explicitly excluded observation either by user\n";
4005 ts <<
"# or by the software (due to a high residual or not so good quality factor).\n";
4006 ts <<
"# i - the observation was included in the solution.\n";
4007 ts <<
"# Second column: index in a database or other media.\n";
4008 ts <<
"# Third column: time of observation.\n";
4009 ts <<
"# Forth and fifth columns: quality code (QC) for S- and X-bands. The char `-' means\n";
4010 ts <<
"# no data on the band.\n";
4011 ts <<
"# Sixth and seventh columns: fourfit error code (EC) for S- and X-bands. The char `-' means\n";
4012 ts <<
"# no data on the band, the char '.' means no fourfit error code for the observation.\n";
4013 ts <<
"# Eighth and ninth columns: SNR on the S- and X-bands.\n";
4014 ts <<
"# Tenth and eleventh columns: number of used channels on the S- and X-bands.\n";
4015 ts <<
"# Twelveth and thirteenth columns: baseline and source names.\n";
4016 ts <<
"# The last three columns: residual and applied standard deviation (ps) and\n";
4017 ts <<
"# normalized residual (unitless).\n";
4019 ts <<
"# QC EC SNR SNR NumChan\n";
4020 ts <<
"# __N__ __Time__ S X S X S X S X ____Baseline_____ _Source_ Resid.(ps) ";
4021 ts <<
"_Std.Dev_ Normalized\n";
4023 QString strQC_S(
""), strQC_X(
"");
4024 QString strEC_S(
""), strEC_X(
"");
4025 QString strSnr_S(
""), strSnr_X(
"");
4026 QString strNoC_S(
""), strNoC_X(
"");
4027 QString str(
""), sSts(
"");
4028 double scale4Delay(1.0e12);
4030 for (
int idx=0; idx<allObs.size(); idx++)
4046 strEC_S.sprintf(
"%s", qPrintable(
4054 strEC_X.sprintf(
"%s", qPrintable(
4060 strQC_S +
" " + strQC_X +
" " +
4061 strEC_S +
" " + strEC_X +
" " +
4062 strSnr_S +
" " + strSnr_X +
" " +
4063 strNoC_S +
" " + strNoC_X +
" " +
4072 str += QString(
"").sprintf(
" %10.1f %9.1f %8.1f",
4077 ts << qPrintable(sSts + str) <<
"\n";
4081 excludedObs.clear();
4082 unusableObs.clear();
4083 includedObs.clear();
4106 if (excludedObs.size() + unusableObs.size() == 0)
4108 ts <<
"All observations were used in the solution.\n";
4110 "::reportDeselectedObsBlock_Output4Spoolfile(): no deselected obs to report");
4115 ts <<
" Observations that are not in the solution of the Run " <<
reportID_ <<
"\n";
4116 ts <<
"# N __Time__ SQC XQC S_SNR_ X_SNR_ ____Baseline_____ _Source_ Resid.(ps) _Std.Dev_ NormResid\n";
4118 QString strQC_S(
""), strQC_X(
"");
4119 QString strSnr_S(
""), strSnr_X(
"");
4121 double scale4Delay(1.0e12);
4122 for (
int idx=0; idx<unusableObs.size(); idx++)
4141 " S:" + strQC_S +
" X:" + strQC_X +
" S:" + strSnr_S +
" X:" + strSnr_X +
" " +
4143 ts <<
"u " << qPrintable(str) <<
"\n";
4146 for (
int idx=0; idx<excludedObs.size(); idx++)
4165 " S:" + strQC_S +
" X:" + strQC_X +
" S:" + strSnr_S +
" X:" + strSnr_X +
" " +
4167 QString(
"").sprintf(
" %10.1f %9.1f %8.1f",
4176 ts <<
"e " << qPrintable(str) <<
"\n";
4186 QString str(
""), str2copy(
""), strQC_S(
""), strQC_X(
"");
4187 double scale4Delay(1.0e12);
4205 if ( unusedObs.size() == 0)
4207 ts <<
"All observations were used in the solution.\n";
4209 "::reportDeselectedObsBlock_Output4Spoolfile(): no deselected obs to report");
4216 for (
int idx=0; idx<unusedObs.size(); idx++)
4227 str2copy.sprintf(
"observation %2d, %s, %s, %s",
4230 qPrintable(o->
src()->
getKey().simplified()),
4234 str2copy.sprintf(
"observation %2d, %s, %s, %s, which fits at %.2f +/- %.2f ps, norm: %.2f, ",
4237 qPrintable(o->
src()->
getKey().simplified()),
4248 str.sprintf(
"S:%s X:%s",
4250 qPrintable(strQC_S), qPrintable(strQC_X));
4252 ts << qPrintable(str2copy + str) <<
"\n";
4298 if (dir.mkpath(path))
4300 "::reportStochasticEstimations(): a directory \"" + path +
"\" has been created");
4303 "::reportStochasticEstimations(): creating a directory \"" + path +
"\" has been failed");
4308 "::reportStochasticEstimations(): files with station dependent stochastic parameters "
4309 " have been created");
4312 "::reportStochasticEstimations(): creating files with station dependent stochastic parameters "
4323 QString prefix(
"Stn_"), suffix(
".dat");
4329 path, prefix + si->
getKey().simplified() +
"_Clocks" + suffix);
4331 path, prefix + si->
getKey().simplified() +
"_Zenith" + suffix);
4333 path, prefix + si->
getKey().simplified() +
"_AtmGrdN" + suffix);
4335 path, prefix + si->
getKey().simplified() +
"_AtmGrdE" + suffix);
4337 path, prefix + si->
getKey().simplified() +
"_Rx" + suffix);
4339 path, prefix + si->
getKey().simplified() +
"_Ry" + suffix);
4341 path, prefix + si->
getKey().simplified() +
"_Rz" + suffix);
4343 path, prefix + si->
getKey().simplified() +
"_AxsOff" + suffix);
4347 path, prefix +
"Px" + suffix);
4349 path, prefix +
"Py" + suffix);
4351 path, prefix +
"Ut1" + suffix);
4354 path, prefix +
"CipX" + suffix);
4356 path, prefix +
"CipY" + suffix);
4367 const QString& path,
const QString& fileName)
4373 QFile f(path +
"/" + fileName);
4374 if (!f.open(QIODevice::WriteOnly))
4377 "::reportStochParameter(): error opening output file: " + path +
"/" + fileName);
4385 const QMap<QString, SgParameter*>
4387 ts <<
"# Output of " << key <<
", (" << scaleName <<
")\n";
4388 for (QMap<QString, SgParameter*>::const_iterator it=parByEpoch.begin(); it!=parByEpoch.end(); ++it)
4393 str.sprintf(
"%s %.4f %.4f %d",
4401 "::reportStochParameter(): the parameter " + key +
" is NULL");
4402 ts << it.key() <<
": the parameter \"" << key <<
"\" is NULL\n";
4420 if (dir.mkpath(path))
4422 "::reportTotalZenithDelays(): a directory \"" + path +
"\" has been created");
4426 "::reportTotalZenithDelays(): creating a directory \"" + path +
"\" has been failed");
4432 QString prefix(
"Stn_"), suffix(
"_Tzd.dat");
4437 QMap<QString, SgVlbiAuxObservation*>
4440 if (auxObservationsByScan->size())
4442 QFile f(path +
"/" + prefix + si->
getKey().simplified() + suffix);
4443 if (!f.open(QIODevice::WriteOnly))
4446 "::reportTotalZenithDelays(): error opening output file: \"" + f.fileName() +
"\"");
4452 ts <<
"# Output of Total zenith delays for " << si->
getKey().simplified() <<
", (cm)\n";
4454 QMap<QString, SgVlbiAuxObservation*>::const_iterator jt=auxObservationsByScan->constBegin();
4455 for (
int idx=0; jt!=auxObservationsByScan->constEnd(); ++jt, idx++)
4458 double tzd, tzdSigma;
4463 str.sprintf(
"%s %.4f %.4f",
4483 if (dir.mkpath(path))
4485 "::report2MyFile(): a directory \"" + path +
"\" has been created");
4489 "::report2MyFile(): creating a directory \"" + path +
"\" has been failed");
4494 QFile f(path +
"/" + fileName);
4495 if (!f.open(QIODevice::WriteOnly))
4498 "::report2MyFile(): error opening output file: \"" + f.fileName() +
"\"");
4504 ts <<
"# test outputs...\n";
4515 str.sprintf(
"%s %16.4f %8.4f %14.2f %14.2f %14.2f %14.2f %-8s:%-8s %-8s PP:%s",
4605 for (
int i=0; i<4; i++)
4606 for (
int j=0; j<3; j++)
4610 for (
int k=0; k<4; k++)
4613 for (
int i=0; i<6; i++)
4616 for (
int j=i+1; j<6; j++)
4624 lengthSigma = sqrt(d);
4629 "the sigma2 is less than zero: " + QString(
"").sprintf(
"%g", d));
4683 for (
int k=0; k<4; k++)
4686 for (
int i=0; i<3; i++)
4689 for (
int j=i+1; j<3; j++)
4697 lengthSigma = sqrt(d);
4702 "the sigma2 is less than zero: " + QString(
"").sprintf(
"%g", d));
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)
const SgMJD tZero(1957, 10, 4)
#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, 7, 5, "Tuscarora (rc1)", SgMJD(2022, 2, 18, 17, 34))
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
static void calcRLF(double &latitude, double &longitude, double &height, const Sg3dVector &r, bool useOldEllipsoid)
SgParameter * pAxisOffset()
double getEstClockModelSigma(int idx) const
QList< SgParameter * > * list_
bool doReportNotUsedData_