9#include "BundleResults.h"
16#include <QXmlStreamWriter>
18#include <boost/lexical_cast.hpp>
19#include <boost/numeric/ublas/io.hpp>
20#include <boost/numeric/ublas/matrix_sparse.hpp>
21#include <boost/numeric/ublas/vector_proxy.hpp>
24#include "ControlMeasure.h"
25#include "ControlPoint.h"
26#include "CorrelationMatrix.h"
30#include "MaximumLikelihoodWFunctions.h"
32#include "PvlKeyword.h"
34#include "SerialNumberList.h"
35#include "StatCumProbDistDynCalc.h"
36#include "Statistics.h"
37#include "XmlStackedHandlerReader.h"
39using namespace boost::numeric::ublas;
77 xmlReader->pushContentHandler(
new XmlHandler(
this, project));
78 xmlReader->setErrorHandler(
new XmlHandler(
this, project));
91 m_numberFixedPoints(src.m_numberFixedPoints),
92 m_numberIgnoredPoints(src.m_numberIgnoredPoints),
93 m_numberHeldImages(src.m_numberHeldImages),
94 m_rmsXResiduals(src.m_rmsXResiduals),
95 m_rmsYResiduals(src.m_rmsYResiduals),
96 m_rmsXYResiduals(src.m_rmsXYResiduals),
97 m_rejectionLimit(src.m_rejectionLimit),
98 m_numberObservations(src.m_numberObservations),
99 m_numberImageObservations(src.m_numberImageObservations),
100 m_numberLidarImageObservations(src.m_numberLidarImageObservations),
101 m_numberRejectedObservations(src.m_numberRejectedObservations),
102 m_numberLidarRangeConstraintEquations(src.m_numberLidarRangeConstraintEquations),
103 m_numberUnknownParameters(src.m_numberUnknownParameters),
104 m_numberImageParameters(src.m_numberImageParameters),
105 m_numberConstrainedImageParameters(src.m_numberConstrainedImageParameters),
106 m_numberConstrainedPointParameters(src.m_numberConstrainedPointParameters),
107 m_numberConstrainedLidarPointParameters(src.m_numberConstrainedLidarPointParameters),
108 m_numberConstrainedTargetParameters(src.m_numberConstrainedTargetParameters),
109 m_degreesOfFreedom(src.m_degreesOfFreedom),
110 m_sigma0(src.m_sigma0),
111 m_elapsedTime(src.m_elapsedTime),
112 m_elapsedTimeErrorProp(src.m_elapsedTimeErrorProp),
113 m_converged(src.m_converged),
114 m_bundleControlPoints(src.m_bundleControlPoints),
115 m_bundleLidarPoints(src.m_bundleLidarPoints),
116 m_outNet(src.m_outNet),
117 m_outLidarData(src.m_outLidarData),
118 m_iterations(src.m_iterations),
119 m_observations(src.m_observations),
120 m_rmsImageSampleResiduals(src.m_rmsImageSampleResiduals),
121 m_rmsImageLineResiduals(src.m_rmsImageLineResiduals),
122 m_rmsImageResiduals(src.m_rmsImageResiduals),
123 m_rmsLidarImageSampleResiduals(src.m_rmsLidarImageSampleResiduals),
124 m_rmsLidarImageLineResiduals(src.m_rmsLidarImageLineResiduals),
125 m_rmsLidarImageResiduals(src.m_rmsLidarImageResiduals),
126 m_rmsImageXSigmas(src.m_rmsImageXSigmas),
127 m_rmsImageYSigmas(src.m_rmsImageYSigmas),
128 m_rmsImageZSigmas(src.m_rmsImageZSigmas),
129 m_rmsImageRASigmas(src.m_rmsImageRASigmas),
130 m_rmsImageDECSigmas(src.m_rmsImageDECSigmas),
131 m_rmsImageTWISTSigmas(src.m_rmsImageTWISTSigmas),
132 m_minSigmaCoord1Distance(src.m_minSigmaCoord1Distance),
133 m_maxSigmaCoord1Distance(src.m_maxSigmaCoord1Distance),
134 m_minSigmaCoord2Distance(src.m_minSigmaCoord2Distance),
135 m_maxSigmaCoord2Distance(src.m_maxSigmaCoord2Distance),
136 m_minSigmaCoord3Distance(src.m_minSigmaCoord3Distance),
137 m_maxSigmaCoord3Distance(src.m_maxSigmaCoord3Distance),
138 m_minSigmaCoord1PointId(src.m_minSigmaCoord1PointId),
139 m_maxSigmaCoord1PointId(src.m_maxSigmaCoord1PointId),
140 m_minSigmaCoord2PointId(src.m_minSigmaCoord2PointId),
141 m_maxSigmaCoord2PointId(src.m_maxSigmaCoord2PointId),
142 m_minSigmaCoord3PointId(src.m_minSigmaCoord3PointId),
143 m_maxSigmaCoord3PointId(src.m_maxSigmaCoord3PointId),
144 m_rmsSigmaCoord1Stats(src.m_rmsSigmaCoord1Stats),
145 m_rmsSigmaCoord2Stats(src.m_rmsSigmaCoord2Stats),
146 m_rmsSigmaCoord3Stats(src.m_rmsSigmaCoord3Stats),
147 m_maximumLikelihoodFunctions(src.m_maximumLikelihoodFunctions),
148 m_maximumLikelihoodIndex(src.m_maximumLikelihoodIndex),
151 m_maximumLikelihoodMedianR2Residuals(src.m_maximumLikelihoodMedianR2Residuals) {
207 m_converged = src.m_converged;
209 m_bundleLidarPoints = src.m_bundleLidarPoints;
220 m_rmsImageXSigmas = src.m_rmsImageXSigmas;
280 m_rmsImageXSigmas.clear();
364 m_rmsImageXSigmas.resize(numberImages);
375 QVector<Statistics> rmsImageSampleResiduals,
376 QVector<Statistics> rmsImageResiduals) {
393 QList<Statistics> rmsImageSampleResiduals,
394 QList<Statistics> rmsImageResiduals) {
409 QList<Statistics> rmsLidarImageSampleResiduals,
410 QList<Statistics> rmsLidarImageResiduals) {
426 QString minCoord1PointId, QString maxCoord1PointId) {
443 QString minCoord2PointId, QString maxCoord2PointId) {
460 QString minCoord3PointId, QString maxCoord3PointId) {
476 double rmsFromSigmaCoord1Stats,
477 double rmsFromSigmaCoord2Stats,
478 double rmsFromSigmaCoord3Stats) {
493 QList< QPair< MaximumLikelihoodWFunctions::Model, double > > modelsWithQuantiles) {
507 for (
int i = 0; i < modelsWithQuantiles.size(); i++) {
520 modelsWithQuantiles[i].second));
946 m_bundleLidarPoints = lidarPoints;
1059 return m_rmsImageXSigmas;
1469 return m_bundleLidarPoints;
1483 "Output Control Network has not been set.",
1616 "Correlation matrix for this bundle is NULL.",
1670 stream.writeStartElement(
"bundleResults");
1671 stream.writeStartElement(
"correlationMatrix");
1672 stream.writeAttribute(
"correlationFileName",
1674 stream.writeAttribute(
"covarianceFileName",
1676 stream.writeStartElement(
"imagesAndParameters");
1677 QMapIterator<QString, QStringList> imgParamIt(*
correlationMatrix().imagesAndParameters());
1678 while (imgParamIt.hasNext()) {
1680 stream.writeStartElement(
"image");
1681 stream.writeAttribute(
"id", imgParamIt.key());
1683 for (
int i = 0; i < parameters.size(); i++) {
1684 stream.writeTextElement(
"parameter", parameters[i]);
1686 stream.writeEndElement();
1689 stream.writeEndElement();
1690 stream.writeEndElement();
1692 stream.writeStartElement(
"generalStatisticsValues");
1703 stream.writeTextElement(
"numberConstrainedPointParameters",
1705 stream.writeTextElement(
"numberConstrainedImageParameters",
1707 stream.writeTextElement(
"numberConstrainedTargetParameters",
1714 stream.writeEndElement();
1716 stream.writeStartElement(
"rms");
1717 stream.writeStartElement(
"residuals");
1721 stream.writeEndElement();
1722 stream.writeStartElement(
"sigmas");
1725 switch (coordType) {
1737 IString msg =
"Unknown surface point coordinate type enum [" +
toString(coordType) +
"]." ;
1740 stream.writeEndElement();
1742 stream.writeStartElement(
"imageResidualsLists");
1743 stream.writeStartElement(
"residualsList");
1746 stream.writeStartElement(
"statisticsItem");
1748 stream.writeEndElement();
1750 stream.writeEndElement();
1751 stream.writeStartElement(
"sampleList");
1754 stream.writeStartElement(
"statisticsItem");
1756 stream.writeEndElement();
1758 stream.writeEndElement();
1760 stream.writeStartElement(
"lineList");
1763 stream.writeStartElement(
"statisticsItem");
1765 stream.writeEndElement();
1767 stream.writeEndElement();
1769 stream.writeStartElement(
"lidarResidualsList");
1772 stream.writeStartElement(
"statisticsItem");
1774 stream.writeEndElement();
1776 stream.writeEndElement();
1778 stream.writeStartElement(
"lidarSampleList");
1781 stream.writeStartElement(
"statisticsItem");
1783 stream.writeEndElement();
1785 stream.writeEndElement();
1787 stream.writeStartElement(
"lidarLineList");
1790 stream.writeStartElement(
"statisticsItem");
1792 stream.writeEndElement();
1794 stream.writeEndElement();
1795 stream.writeEndElement();
1797 stream.writeStartElement(
"imageSigmasLists");
1798 stream.writeStartElement(
"xSigmas");
1800 for (
int i = 0; i < m_rmsImageXSigmas.size(); i++) {
1801 stream.writeStartElement(
"statisticsItem");
1802 m_rmsImageXSigmas[i].save(stream, project);
1803 stream.writeEndElement();
1806 stream.writeEndElement();
1808 stream.writeStartElement(
"ySigmas");
1811 stream.writeStartElement(
"statisticsItem");
1813 stream.writeEndElement();
1815 stream.writeEndElement();
1817 stream.writeStartElement(
"zSigmas");
1820 stream.writeStartElement(
"statisticsItem");
1822 stream.writeEndElement();
1824 stream.writeEndElement();
1826 stream.writeStartElement(
"raSigmas");
1829 stream.writeStartElement(
"statisticsItem");
1831 stream.writeEndElement();
1833 stream.writeEndElement();
1835 stream.writeStartElement(
"decSigmas");
1838 stream.writeStartElement(
"statisticsItem");
1840 stream.writeEndElement();
1842 stream.writeEndElement();
1844 stream.writeStartElement(
"twistSigmas");
1847 stream.writeStartElement(
"statisticsItem");
1849 stream.writeEndElement();
1851 stream.writeEndElement();
1852 stream.writeEndElement();
1853 stream.writeEndElement();
1855 stream.writeStartElement(
"elapsedTime");
1858 stream.writeEndElement();
1860 stream.writeStartElement(
"minMaxSigmas");
1863 switch (coordType) {
1865 stream.writeStartElement(
"minLat");
1868 stream.writeEndElement();
1869 stream.writeStartElement(
"maxLat");
1872 stream.writeEndElement();
1873 stream.writeStartElement(
"minLon");
1876 stream.writeEndElement();
1877 stream.writeStartElement(
"maxLon");
1880 stream.writeEndElement();
1881 stream.writeStartElement(
"minRad");
1884 stream.writeEndElement();
1885 stream.writeStartElement(
"maxRad");
1888 stream.writeEndElement();
1891 stream.writeStartElement(
"minX");
1894 stream.writeEndElement();
1895 stream.writeStartElement(
"maxX");
1898 stream.writeEndElement();
1899 stream.writeStartElement(
"minY");
1902 stream.writeEndElement();
1903 stream.writeStartElement(
"maxY");
1906 stream.writeEndElement();
1907 stream.writeStartElement(
"minZ");
1910 stream.writeEndElement();
1911 stream.writeStartElement(
"maxZ");
1914 stream.writeEndElement();
1917 IString msg =
"Unknown surface point coordinate type enum [" +
toString(coordType) +
"]." ;
1920 stream.writeEndElement();
1923 stream.writeStartElement(
"maximumLikelihoodEstimation");
1926 stream.writeAttribute(
"maximumLikelihoodMedianR2Residuals",
1929 stream.writeStartElement(
"cumulativeProbabilityCalculator");
1931 stream.writeEndElement();
1933 stream.writeStartElement(
"residualsCumulativeProbabilityCalculator");
1935 stream.writeEndElement();
1938 stream.writeStartElement(
"model");
1939 stream.writeAttribute(
"modelNumber",
toString(i+1));
1940 stream.writeAttribute(
"modelSelection",
1942 stream.writeAttribute(
"tweakingConstant",
1945 stream.writeEndElement();
1947 stream.writeEndElement();
1948 stream.writeEndElement();
1960 m_xmlHandlerCumProCalc = NULL;
1961 m_xmlHandlerBundleResults = NULL;
1962 m_xmlHandlerProject = NULL;
1964 m_xmlHandlerBundleResults = statistics;
1965 m_xmlHandlerProject = project;
1966 m_xmlHandlerCharacters =
"";
1968 m_xmlHandlerResidualsListSize = 0;
1969 m_xmlHandlerSampleResidualsListSize = 0;
1970 m_xmlHandlerLineResidualsListSize = 0;
1971 m_xmlHandlerXSigmasListSize = 0;
1972 m_xmlHandlerYSigmasListSize = 0;
1973 m_xmlHandlerZSigmasListSize = 0;
1974 m_xmlHandlerRASigmasListSize = 0;
1975 m_xmlHandlerDECSigmasListSize = 0;
1976 m_xmlHandlerTWISTSigmasListSize = 0;
1977 m_xmlHandlerStatisticsList.clear();
1989 m_xmlHandlerProject = NULL;
2009 const QString &localName,
2010 const QString &qName,
2011 const QXmlAttributes &atts) {
2012 m_xmlHandlerCharacters =
"";
2014 if (XmlStackedHandler::startElement(namespaceURI, localName, qName, atts)) {
2016 if (qName ==
"correlationMatrix") {
2017 m_xmlHandlerBundleResults->m_correlationMatrix = NULL;
2020 QString correlationFileName = atts.value(
"correlationFileName");
2021 if (!correlationFileName.isEmpty()) {
2022 FileName correlationFile(correlationFileName);
2023 m_xmlHandlerBundleResults->m_correlationMatrix->setCorrelationFileName(correlationFile);
2026 QString covarianceFileName = atts.value(
"covarianceFileName");
2027 if (!covarianceFileName.isEmpty()) {
2028 FileName covarianceFile(covarianceFileName);
2029 m_xmlHandlerBundleResults->m_correlationMatrix->setCovarianceFileName(covarianceFile);
2032 else if (qName ==
"image") {
2033 QString correlationMatrixImageId = atts.value(
"id");
2034 if (!correlationMatrixImageId.isEmpty()) {
2035 m_xmlHandlerCorrelationImageId = correlationMatrixImageId;
2038 else if (qName ==
"residuals") {
2039 QString rx = atts.value(
"x");
2040 if (!rx.isEmpty()) {
2041 m_xmlHandlerBundleResults->m_rmsXResiduals =
toDouble(rx);
2044 QString ry = atts.value(
"y");
2045 if (!ry.isEmpty()) {
2046 m_xmlHandlerBundleResults->m_rmsYResiduals =
toDouble(ry);
2049 QString rxy = atts.value(
"xy");
2050 if (!rxy.isEmpty()) {
2051 m_xmlHandlerBundleResults->m_rmsXYResiduals =
toDouble(rxy);
2054 else if (qName ==
"sigmas") {
2055 QString lat = atts.value(
"lat");
2056 if (!lat.isEmpty()) {
2057 m_xmlHandlerBundleResults->m_rmsSigmaCoord1Stats =
toDouble(lat);
2059 QString lon = atts.value(
"lon");
2060 if (!lon.isEmpty()) {
2061 m_xmlHandlerBundleResults->m_rmsSigmaCoord2Stats =
toDouble(lon);
2063 QString rad = atts.value(
"rad");
2064 if (!rad.isEmpty()) {
2065 m_xmlHandlerBundleResults->m_rmsSigmaCoord3Stats =
toDouble(rad);
2067 QString x = atts.value(
"x");
2069 m_xmlHandlerBundleResults->m_rmsSigmaCoord1Stats =
toDouble(x);
2071 QString y = atts.value(
"y");
2073 m_xmlHandlerBundleResults->m_rmsSigmaCoord2Stats =
toDouble(y);
2075 QString z = atts.value(
"z");
2077 m_xmlHandlerBundleResults->m_rmsSigmaCoord3Stats =
toDouble(z);
2080 else if (qName ==
"residualsList") {
2081 QString listSizeStr = atts.value(
"listSize");
2082 if (!listSizeStr.isEmpty()) {
2083 m_xmlHandlerResidualsListSize =
toInt(listSizeStr);
2086 else if (qName ==
"sampleList") {
2087 QString listSizeStr = atts.value(
"listSize");
2088 if (!listSizeStr.isEmpty()) {
2089 m_xmlHandlerSampleResidualsListSize =
toInt(listSizeStr);
2092 else if (qName ==
"lineList") {
2093 QString listSizeStr = atts.value(
"listSize");
2094 if (!listSizeStr.isEmpty()) {
2095 m_xmlHandlerLineResidualsListSize =
toInt(listSizeStr);
2098 else if (qName ==
"xSigmas") {
2099 QString listSizeStr = atts.value(
"listSize");
2100 if (!listSizeStr.isEmpty()) {
2101 m_xmlHandlerXSigmasListSize =
toInt(listSizeStr);
2104 else if (qName ==
"ySigmas") {
2105 QString listSizeStr = atts.value(
"listSize");
2106 if (!listSizeStr.isEmpty()) {
2107 m_xmlHandlerYSigmasListSize =
toInt(listSizeStr);
2110 else if (qName ==
"zSigmas") {
2111 QString listSizeStr = atts.value(
"listSize");
2112 if (!listSizeStr.isEmpty()) {
2113 m_xmlHandlerZSigmasListSize =
toInt(listSizeStr);
2116 else if (qName ==
"raSigmas") {
2117 QString listSizeStr = atts.value(
"listSize");
2118 if (!listSizeStr.isEmpty()) {
2119 m_xmlHandlerRASigmasListSize =
toInt(listSizeStr);
2123 else if (qName ==
"decSigmas") {
2124 QString listSizeStr = atts.value(
"listSize");
2125 if (!listSizeStr.isEmpty()) {
2126 m_xmlHandlerDECSigmasListSize =
toInt(listSizeStr);
2129 else if (qName ==
"twistSigmas") {
2130 QString listSizeStr = atts.value(
"listSize");
2131 if (!listSizeStr.isEmpty()) {
2132 m_xmlHandlerTWISTSigmasListSize =
toInt(listSizeStr);
2135 else if (qName ==
"statisticsItem") {
2137 m_xmlHandlerStatisticsList.append(
2138 new Statistics(m_xmlHandlerProject, reader()));
2140 else if (qName ==
"elapsedTime") {
2141 QString time = atts.value(
"time");
2142 if (!time.isEmpty()) {
2143 m_xmlHandlerBundleResults->m_elapsedTime =
toDouble(time);
2146 QString errorProp = atts.value(
"errorProp");
2147 if (!errorProp.isEmpty()) {
2148 m_xmlHandlerBundleResults->m_elapsedTimeErrorProp =
toDouble(errorProp);
2160 else if (qName ==
"minLat") {
2161 QString minLat = atts.value(
"value");
2162 if (!minLat.isEmpty()) {
2163 m_xmlHandlerBundleResults->m_minSigmaCoord1Distance.setMeters(
toDouble(minLat));
2166 QString minLatPointId = atts.value(
"pointId");
2167 if (!minLatPointId.isEmpty()) {
2168 m_xmlHandlerBundleResults->m_minSigmaCoord1PointId = minLatPointId;
2172 else if (qName ==
"minX") {
2173 QString minX = atts.value(
"value");
2174 if (!minX.isEmpty()) {
2175 m_xmlHandlerBundleResults->m_minSigmaCoord1Distance.setMeters(
toDouble(minX));
2178 QString minXPointId = atts.value(
"pointId");
2179 if (!minXPointId.isEmpty()) {
2180 m_xmlHandlerBundleResults->m_minSigmaCoord1PointId = minXPointId;
2183 else if (qName ==
"maxLat") {
2184 QString maxLat = atts.value(
"value");
2185 if (!maxLat.isEmpty()) {
2186 m_xmlHandlerBundleResults->m_maxSigmaCoord1Distance.setMeters(
toDouble(maxLat));
2189 QString maxLatPointId = atts.value(
"pointId");
2190 if (!maxLatPointId.isEmpty()) {
2191 m_xmlHandlerBundleResults->m_maxSigmaCoord1PointId = maxLatPointId;
2195 else if (qName ==
"maxX") {
2197 QString maxX = atts.value(
"value");
2198 if (!maxX.isEmpty()) {
2199 m_xmlHandlerBundleResults->m_maxSigmaCoord1Distance.setMeters(
toDouble(maxX));
2202 QString maxXPointId = atts.value(
"pointId");
2203 if (!maxXPointId.isEmpty()) {
2204 m_xmlHandlerBundleResults->m_maxSigmaCoord1PointId = maxXPointId;
2208 else if (qName ==
"minLon") {
2210 QString minLon = atts.value(
"value");
2211 if (!minLon.isEmpty()) {
2212 m_xmlHandlerBundleResults->m_minSigmaCoord2Distance.setMeters(
toDouble(minLon));
2215 QString minLonPointId = atts.value(
"pointId");
2216 if (!minLonPointId.isEmpty()) {
2217 m_xmlHandlerBundleResults->m_minSigmaCoord2PointId = minLonPointId;
2221 else if (qName ==
"minY") {
2223 QString minY = atts.value(
"value");
2224 if (!minY.isEmpty()) {
2225 m_xmlHandlerBundleResults->m_minSigmaCoord2Distance.setMeters(
toDouble(minY));
2228 QString minYPointId = atts.value(
"pointId");
2229 if (!minYPointId.isEmpty()) {
2230 m_xmlHandlerBundleResults->m_minSigmaCoord2PointId = minYPointId;
2234 else if (qName ==
"maxLon") {
2236 QString maxLon = atts.value(
"value");
2237 if (!maxLon.isEmpty()) {
2238 m_xmlHandlerBundleResults->m_maxSigmaCoord2Distance.setMeters(
toDouble(maxLon));
2241 QString maxLonPointId = atts.value(
"pointId");
2242 if (!maxLonPointId.isEmpty()) {
2243 m_xmlHandlerBundleResults->m_maxSigmaCoord2PointId = maxLonPointId;
2247 else if (qName ==
"maxY") {
2248 QString maxY = atts.value(
"value");
2249 if (!maxY.isEmpty()) {
2250 m_xmlHandlerBundleResults->m_maxSigmaCoord2Distance.setMeters(
toDouble(maxY));
2253 QString maxYPointId = atts.value(
"pointId");
2254 if (!maxYPointId.isEmpty()) {
2255 m_xmlHandlerBundleResults->m_maxSigmaCoord2PointId = maxYPointId;
2259 else if (qName ==
"minRad") {
2261 QString minRad = atts.value(
"value");
2262 if (!minRad.isEmpty()) {
2263 m_xmlHandlerBundleResults->m_minSigmaCoord3Distance.setMeters(
toDouble(minRad));
2266 QString minRadPointId = atts.value(
"pointId");
2267 if (!minRadPointId.isEmpty()) {
2268 m_xmlHandlerBundleResults->m_minSigmaCoord3PointId = minRadPointId;
2272 else if (qName ==
"minZ") {
2274 QString minZ = atts.value(
"value");
2275 if (!minZ.isEmpty()) {
2276 m_xmlHandlerBundleResults->m_minSigmaCoord3Distance.setMeters(
toDouble(minZ));
2279 QString minZPointId = atts.value(
"pointId");
2280 if (!minZPointId.isEmpty()) {
2281 m_xmlHandlerBundleResults->m_minSigmaCoord3PointId = minZPointId;
2285 else if (qName ==
"maxRad") {
2287 QString maxRad = atts.value(
"value");
2288 if (!maxRad.isEmpty()) {
2289 m_xmlHandlerBundleResults->m_maxSigmaCoord3Distance.setMeters(
toDouble(maxRad));
2292 QString maxRadPointId = atts.value(
"pointId");
2293 if (!maxRadPointId.isEmpty()) {
2294 m_xmlHandlerBundleResults->m_maxSigmaCoord3PointId = maxRadPointId;
2298 else if (qName ==
"maxZ") {
2300 QString maxZ = atts.value(
"value");
2301 if (!maxZ.isEmpty()) {
2302 m_xmlHandlerBundleResults->m_maxSigmaCoord3Distance.setMeters(
toDouble(maxZ));
2305 QString maxZPointId = atts.value(
"pointId");
2306 if (!maxZPointId.isEmpty()) {
2307 m_xmlHandlerBundleResults->m_maxSigmaCoord3PointId = maxZPointId;
2311 else if (qName ==
"maximumLikelihoodEstimation") {
2312 QString maximumLikelihoodIndex = atts.value(
"maximumLikelihoodIndex");
2313 if (!maximumLikelihoodIndex.isEmpty()) {
2314 m_xmlHandlerBundleResults->m_maximumLikelihoodIndex =
toInt(maximumLikelihoodIndex);
2318 atts.value(
"maximumLikelihoodMedianR2Residuals");
2320 m_xmlHandlerBundleResults->m_maximumLikelihoodMedianR2Residuals =
2324 else if (qName ==
"model") {
2325 QString model = atts.value(
"modelSelection");
2326 QString tweakingConstant = atts.value(
"tweakingConstant");
2327 QString quantile = atts.value(
"quantile");
2328 bool validModel =
true;
2329 if (model.isEmpty()) validModel =
false;
2330 if (tweakingConstant.isEmpty()) validModel =
false;
2331 if (quantile.isEmpty()) validModel =
false;
2333 m_xmlHandlerBundleResults->m_maximumLikelihoodFunctions.append(
2335 MaximumLikelihoodWFunctions::stringToModel(model),
2340 else if (qName ==
"cumulativeProbabilityCalculator") {
2341 m_xmlHandlerBundleResults->m_cumPro = NULL;
2342 m_xmlHandlerBundleResults->m_cumPro =
2345 else if (qName ==
"residualsCumulativeProbabilityCalculator") {
2346 m_xmlHandlerBundleResults->m_cumProRes = NULL;
2363 m_xmlHandlerCharacters += ch;
2364 return XmlStackedHandler::characters(ch);
2378 const QString &qName) {
2380 if (!m_xmlHandlerCharacters.isEmpty()) {
2381 if (qName ==
"parameter") {
2383 m_xmlHandlerCorrelationParameterList.append(m_xmlHandlerCharacters);
2385 if (qName ==
"image") {
2387 if (m_xmlHandlerCorrelationImageId !=
"") {
2388 m_xmlHandlerCorrelationMap.insert(m_xmlHandlerCorrelationImageId,
2389 m_xmlHandlerCorrelationParameterList);
2391 m_xmlHandlerCorrelationImageId =
"";
2392 m_xmlHandlerCorrelationParameterList.clear();
2395 if (qName ==
"imagesAndParameters") {
2397 if (!m_xmlHandlerCorrelationMap.isEmpty()) {
2398 m_xmlHandlerBundleResults->setCorrMatImgsAndParams(m_xmlHandlerCorrelationMap);
2401 else if (qName ==
"numberFixedPoints") {
2402 m_xmlHandlerBundleResults->m_numberFixedPoints =
toInt(m_xmlHandlerCharacters);
2404 else if (qName ==
"numberIgnoredPoints") {
2405 m_xmlHandlerBundleResults->m_numberIgnoredPoints =
toInt(m_xmlHandlerCharacters);
2407 else if (qName ==
"numberHeldImages") {
2408 m_xmlHandlerBundleResults->m_numberHeldImages =
toInt(m_xmlHandlerCharacters);
2410 else if (qName ==
"rejectionLimit") {
2411 m_xmlHandlerBundleResults->m_rejectionLimit =
toDouble(m_xmlHandlerCharacters);
2413 else if (qName ==
"numberRejectedObservations") {
2414 m_xmlHandlerBundleResults->m_numberRejectedObservations =
toInt(m_xmlHandlerCharacters);
2416 else if (qName ==
"numberLidarRangeConstraintEquations") {
2417 m_xmlHandlerBundleResults->m_numberLidarRangeConstraintEquations =
toInt(m_xmlHandlerCharacters);
2419 else if (qName ==
"numberObservations") {
2420 m_xmlHandlerBundleResults->m_numberObservations =
toInt(m_xmlHandlerCharacters);
2422 else if (qName ==
"numberImageObservations") {
2423 m_xmlHandlerBundleResults->m_numberImageObservations =
toInt(m_xmlHandlerCharacters);
2425 else if (qName ==
"numberLidarImageObservations") {
2426 m_xmlHandlerBundleResults->m_numberLidarImageObservations =
toInt(m_xmlHandlerCharacters);
2428 else if (qName ==
"numberImageParameters") {
2429 m_xmlHandlerBundleResults->m_numberImageParameters =
toInt(m_xmlHandlerCharacters);
2431 else if (qName ==
"numberConstrainedPointParameters") {
2432 m_xmlHandlerBundleResults->m_numberConstrainedPointParameters =
2433 toInt(m_xmlHandlerCharacters);
2435 else if (qName ==
"numberConstrainedImageParameters") {
2436 m_xmlHandlerBundleResults->m_numberConstrainedImageParameters =
2437 toInt(m_xmlHandlerCharacters);
2439 else if (qName ==
"numberConstrainedTargetParameters") {
2440 m_xmlHandlerBundleResults->m_numberConstrainedTargetParameters =
2441 toInt(m_xmlHandlerCharacters);
2443 else if (qName ==
"numberUnknownParameters") {
2444 m_xmlHandlerBundleResults->m_numberUnknownParameters =
toInt(m_xmlHandlerCharacters);
2446 else if (qName ==
"degreesOfFreedom") {
2447 m_xmlHandlerBundleResults->m_degreesOfFreedom =
toInt(m_xmlHandlerCharacters);
2449 else if (qName ==
"sigma0") {
2450 m_xmlHandlerBundleResults->m_sigma0 =
toDouble(m_xmlHandlerCharacters);
2452 else if (qName ==
"converged") {
2453 m_xmlHandlerBundleResults->m_converged =
toBool(m_xmlHandlerCharacters);
2455 else if (qName ==
"iterations") {
2456 m_xmlHandlerBundleResults->m_iterations =
toInt(m_xmlHandlerCharacters);
2459 else if (qName ==
"residualsList") {
2460 if (m_xmlHandlerResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2462 "Unable to read xml file. Invalid residualsList", _FILEINFO_);
2464 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2465 m_xmlHandlerBundleResults->m_rmsImageResiduals.append(m_xmlHandlerStatisticsList[i]);
2467 m_xmlHandlerStatisticsList.clear();
2469 else if (qName ==
"sampleList") {
2470 if (m_xmlHandlerSampleResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2472 "Unable to read xml file. Invalid sampleList", _FILEINFO_);
2474 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2475 m_xmlHandlerBundleResults->m_rmsImageSampleResiduals.append(
2476 m_xmlHandlerStatisticsList[i]);
2478 m_xmlHandlerStatisticsList.clear();
2480 else if (qName ==
"lineList") {
2481 if (m_xmlHandlerLineResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2483 "Unable to read xml file. Invalid lineList", _FILEINFO_);
2485 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2486 m_xmlHandlerBundleResults->m_rmsImageLineResiduals.append(m_xmlHandlerStatisticsList[i]);
2488 m_xmlHandlerStatisticsList.clear();
2490 else if (qName ==
"lidarResidualsList") {
2491 if (m_xmlHandlerResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2493 "Unable to read xml file. Invalid residualsList", _FILEINFO_);
2495 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2496 m_xmlHandlerBundleResults->m_rmsLidarImageResiduals.append(m_xmlHandlerStatisticsList[i]);
2498 m_xmlHandlerStatisticsList.clear();
2500 else if (qName ==
"lidarSampleList") {
2501 if (m_xmlHandlerSampleResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2503 "Unable to read xml file. Invalid sampleList", _FILEINFO_);
2505 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2506 m_xmlHandlerBundleResults->m_rmsLidarImageSampleResiduals.append(
2507 m_xmlHandlerStatisticsList[i]);
2509 m_xmlHandlerStatisticsList.clear();
2511 else if (qName ==
"lidarLineList") {
2512 if (m_xmlHandlerLineResidualsListSize != m_xmlHandlerStatisticsList.size()) {
2514 "Unable to read xml file. Invalid lineList", _FILEINFO_);
2516 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2517 m_xmlHandlerBundleResults->m_rmsLidarImageLineResiduals.append(m_xmlHandlerStatisticsList[i]);
2519 m_xmlHandlerStatisticsList.clear();
2521 else if (qName ==
"xSigmas") {
2522 if (m_xmlHandlerXSigmasListSize != m_xmlHandlerStatisticsList.size()) {
2524 "Unable to read xml file. Invalid xSigmas", _FILEINFO_);
2526 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2527 m_xmlHandlerBundleResults->m_rmsImageXSigmas.append(m_xmlHandlerStatisticsList[i]);
2529 m_xmlHandlerStatisticsList.clear();
2531 else if (qName ==
"ySigmas") {
2532 if (m_xmlHandlerYSigmasListSize != m_xmlHandlerStatisticsList.size()) {
2534 "Unable to read xml file. Invalid ySigmas", _FILEINFO_);
2536 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2537 m_xmlHandlerBundleResults->m_rmsImageYSigmas.append(m_xmlHandlerStatisticsList[i]);
2539 m_xmlHandlerStatisticsList.clear();
2541 else if (qName ==
"zSigmas") {
2542 if (m_xmlHandlerZSigmasListSize != m_xmlHandlerStatisticsList.size()) {
2544 "Unable to read xml file. Invalid zSigmas", _FILEINFO_);
2546 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2547 m_xmlHandlerBundleResults->m_rmsImageZSigmas.append(m_xmlHandlerStatisticsList[i]);
2549 m_xmlHandlerStatisticsList.clear();
2551 else if (qName ==
"raSigmas") {
2552 if (m_xmlHandlerRASigmasListSize != m_xmlHandlerStatisticsList.size()) {
2554 "Unable to read xml file. Invalid raSigmas", _FILEINFO_);
2556 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2557 m_xmlHandlerBundleResults->m_rmsImageRASigmas.append(m_xmlHandlerStatisticsList[i]);
2559 m_xmlHandlerStatisticsList.clear();
2561 else if (qName ==
"decSigmas") {
2562 if (m_xmlHandlerDECSigmasListSize != m_xmlHandlerStatisticsList.size()) {
2564 "Unable to read xml file. Invalid decSigmas", _FILEINFO_);
2566 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2567 m_xmlHandlerBundleResults->m_rmsImageDECSigmas.append(m_xmlHandlerStatisticsList[i]);
2569 m_xmlHandlerStatisticsList.clear();
2571 else if (qName ==
"twistSigmas") {
2572 if (m_xmlHandlerTWISTSigmasListSize != m_xmlHandlerStatisticsList.size()) {
2574 "Unable to read xml file. Invalid twistSigmas", _FILEINFO_);
2576 for (
int i = 0; i < m_xmlHandlerStatisticsList.size(); i++) {
2577 m_xmlHandlerBundleResults->m_rmsImageTWISTSigmas.append(m_xmlHandlerStatisticsList[i]);
2579 m_xmlHandlerStatisticsList.clear();
2582 m_xmlHandlerCharacters =
"";
2583 return XmlStackedHandler::endElement(namespaceURI, localName, qName);
This class is a container class for BundleObservations.
This class is an XmlHandler used to read and write BundleResults objects from and to XML files.
XmlHandler(BundleResults *statistics, Project *project)
Constructs an XmlHandler used to save a BundleResults object.
virtual bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &atts)
Handle an XML start element.
virtual bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName)
Handle end tags for the BundleResults serialized XML.
virtual bool characters(const QString &ch)
Adds a QString to the XmlHandler's internal character data.
~XmlHandler()
Destroys an XmlHandler.
A container class for statistical results from a BundleAdjust solution.
void addProbabilityDistributionObservation(double obsValue)
Adds an observation to the cumulative probability distribution of |R^2 residuals|.
void incrementNumberConstrainedImageParameters(int incrementAmount)
Increase the number of constrained image parameters.
~BundleResults()
Destroys this BundleResults object.
QString m_minSigmaCoord1PointId
The minimum sigma coordinate 1 point id.
QVector< Statistics > m_rmsImageTWISTSigmas
< The root mean square image twist sigmas.
double elapsedTimeErrorProp() const
Returns the elapsed time for error propagation.
int numberRejectedObservations() const
Returns the number of observation that were rejected.
int m_numberUnknownParameters
total number of parameters to solve for
QString minSigmaCoord2PointId() const
Returns the minimum sigma point id for coordinate 2.
void setSigma0(double sigma0)
Sets the sigma0.
double rejectionLimit() const
Returns the rejection limit.
int m_degreesOfFreedom
degrees of freedom
QList< Statistics > m_rmsLidarImageResiduals
RMS image lidar sample & line residual stats for each image in the bundle
int m_numberFixedPoints
number of 'fixed' (ground) points (define)
void incrementNumberConstrainedPointParameters(int incrementAmount)
Increase the number of contrained point parameters.
double rmsRxy() const
Returns the RMS of the x and y residuals.
QList< Statistics > rmsImageSampleResiduals() const
Returns the list of RMS image sample residuals statistics.
QList< Statistics > m_rmsLidarImageSampleResiduals
List of RMS lidar sample residual stats for each image in the bundle
int m_numberConstrainedTargetParameters
number of constrained target parameters
BundleObservationVector m_observations
The vector of BundleObservations from BundleAdjust.
BundleResults(QObject *parent=0)
Constructs a BundleResults object.
ControlNetQsp outputControlNet() const
Returns a shared pointer to the output control network.
int numberObservations() const
Returns the number of observations.
void setElapsedTime(double time)
Sets the elapsed time for the bundle adjustment.
Distance m_maxSigmaCoord3Distance
The maximum sigma radius distance.
MaximumLikelihoodWFunctions maximumLikelihoodModelWFunc(int modelIndex) const
Returns the maximum likelihood model at the given index.
void incrementHeldImages()
Increases the number of 'held' images.
int m_numberLidarImageObservations
lidar image coords. (2 per measure)
double m_maximumLikelihoodMedianR2Residuals
Median of R^2 residuals.
double sigmaCoord3StatisticsRms() const
Returns the RMS of the adjusted sigmas for coordinate 3.
double m_rmsXResiduals
rms of x residuals
double m_rmsSigmaCoord3Stats
rms of adjusted Radius sigmas
void initializeProbabilityDistribution(unsigned int nodes=20)
Initializes or resets the cumulative probability distribution of |R^2 residuals|.
void incrementIgnoredPoints()
Increase the number of ignored points.
void incrementFixedPoints()
Increase the number of 'fixed' (ground) points.
void setBundleControlPoints(QVector< BundleControlPointQsp > controlPoints)
Sets the bundle control point vector.
void setNumberConstrainedPointParameters(int numberParameters)
Set number of contrained point parameters.
void setBundleLidarPoints(QVector< BundleLidarControlPointQsp > lidarPoints)
Sets the bundle lidar point vector.
double sigma0() const
Returns the Sigma0 of the bundle adjustment.
QVector< Statistics > m_rmsImageZSigmas
< The root mean square image z sigmas.
void setIterations(int iterations)
Sets the number of iterations taken by the BundleAdjust.
bool converged() const
Returns whether or not the bundle adjustment converged.
Distance m_maxSigmaCoord1Distance
The maximum sigma latitude distance.
double maximumLikelihoodModelQuantile(int modelIndex) const
Returns the quantile of the maximum likelihood model at the given index.
int m_numberImageObservations
photogrammetry image coords. (2 per measure)
void setSigmaCoord1Range(Distance minCoord1Dist, Distance maxCoord1Dist, QString minCoord1PointId, QString maxCoord1PointId)
Sets the min and max sigma distances and point ids for coordinate 1.
void incrementMaximumLikelihoodModelIndex()
Increases the value that indicates which stage the maximum likelihood adjustment is currently on.
QVector< Statistics > rmsImageDECSigmas() const
Returns the list of RMS image declination sigma statistics.
QString m_maxSigmaCoord1PointId
The maximum sigma coordinate 1 point id.
QVector< Statistics > m_rmsImageYSigmas
< The root mean square image y sigmas.
QList< Statistics > rmsLidarImageSampleResiduals() const
Returns the list of RMS image lidar sample residuals statistics.
void setOutputControlNet(ControlNetQsp outNet)
Sets the output ControlNet.
int m_iterations
The number of iterations taken by BundleAdjust.
double m_rmsXYResiduals
rms of all x and y residuals
int m_numberLidarRangeConstraintEquations
void setSigmaCoord2Range(Distance minCoord2Dist, Distance maxCoord2Dist, QString minCoord2PointId, QString maxCoord2PointId)
Sets the min and max sigma distances and point ids for coordinate 2.
int numberConstrainedPointParameters() const
Returns the number of constrained point parameters.
double rmsRy() const
Returns the RMS of the y residuals.
void resetNumberConstrainedImageParameters()
Resets the number of constrained image parameters to 0.
int m_numberIgnoredPoints
number of ignored points
void computeDegreesOfFreedom()
Computes the degrees of freedom of the bundle adjustment and stores it internally.
Distance m_minSigmaCoord2Distance
The minimum sigma longitude distance.
int iterations() const
Returns the number of iterations taken by the BundleAdjust.
CorrelationMatrix correlationMatrix() const
Returns the Correlation Matrix.
void setNumberRejectedObservations(int numberObservations)
Sets the number of rejected observations.
QString minSigmaCoord1PointId() const
Returns the minimum sigma point id for coordinate 1.
double m_rejectionLimit
current rejection limit
QVector< Statistics > rmsImageYSigmas() const
Returns the list of RMS image y sigma statistics.
QString m_minSigmaCoord2PointId
The minimum sigma coordinate 2 point id.
void maximumLikelihoodSetUp(QList< QPair< MaximumLikelihoodWFunctions::Model, double > > modelsWithQuantiles)
This method steps up the maximum likelihood estimation solution.
void save(QXmlStreamWriter &stream, const Project *project) const
Saves the BundleResults object to an XML file.
int m_numberConstrainedImageParameters
number of constrained image parameters
int numberIgnoredPoints() const
Returns the number of ignored points.
QVector< BundleControlPointQsp > & bundleControlPoints()
Returns a reference to the BundleControlPoint vector.
void setCorrMatImgsAndParams(QMap< QString, QStringList > imgsAndParams)
Set the images and their associated parameters of the correlation matrix.
Distance maxSigmaCoord2Distance() const
Returns the maximum sigma distance for coordinate 2.
QString m_minSigmaCoord3PointId
The minimum sigma coordinate 3 point id.
int numberUnknownParameters() const
Returns the number of unknown parameters.
void addResidualsProbabilityDistributionObservation(double obsValue)
Adds an observation to the cumulative probability distribution of residuals used for reporting.
QVector< BundleLidarControlPointQsp > & bundleLidarControlPoints()
Returns a reference to the BundleLidarControlPoint vector.
int m_numberImageParameters
number of image parameters
double m_sigma0
std deviation of unit weight
int numberImageParameters() const
Returns the total number of image parameters.
QList< Statistics > rmsLidarImageLineResiduals() const
Returns the list of RMS image lidar line residuals statistics.
int m_maximumLikelihoodIndex
This count keeps track of which stage of the maximum likelihood adjustment the bundle is currently on...
QList< Statistics > m_rmsImageLineResiduals
List of RMS image line residual statistics for each image in the bundle
int numberMaximumLikelihoodModels() const
Returns how many maximum likelihood models were used in the bundle adjustment.
StatCumProbDistDynCalc * m_cumProRes
This class keeps track of the cumulative probability distribution of residuals (in unweighted pixels)...
void setNumberLidarRangeConstraints(int numberLidarRangeConstraints)
Sets the total number of lidar range constraints.
int maximumLikelihoodModelIndex() const
Returns which step the bundle adjustment is on.
LidarDataQsp outputLidarData() const
Returns a shared pointer to the output LidarData object.
int m_numberConstrainedPointParameters
number of constrained point parameters
int m_numberConstrainedLidarPointParameters
lidar points
int m_numberRejectedObservations
number of rejected image coordinate observations
int numberHeldImages() const
Returns the number of 'held' images.
double sigmaCoord2StatisticsRms() const
Returns the RMS of the adjusted sigmas for coordinate 2.
StatCumProbDistDynCalc * m_cumPro
This class will be used to calculate the cumulative probability distribution of |R^2 residuals|,...
int m_numberObservations
number of image coordinate observations
void setRejectionLimit(double rejectionLimit)
Sets the rejection limit.
Distance minSigmaCoord3Distance() const
Returns the minimum sigma distance for coordinate 3.
int numberLidarImageObservations() const
Returns the number of lidar observations.
void incrementNumberConstrainedTargetParameters(int incrementAmount)
Increases the number of constrained target parameters.
QVector< BundleControlPointQsp > m_bundleControlPoints
The vector of BundleControlPoints from BundleAdjust.
void setOutputLidarData(LidarDataQsp outLidarData)
Sets the output LidarData object.
double m_rmsSigmaCoord2Stats
rms of adjusted Longitude sigmas
void setNumberImageObservations(int numberObservations)
Sets the number of photogrammetric image observations.
void setRmsImageResidualLists(QList< Statistics > rmsImageLineResiduals, QList< Statistics > rmsImageSampleResiduals, QList< Statistics > rmsImageResiduals)
Sets the root mean square image residual Statistics lists.
double maximumLikelihoodMedianR2Residuals() const
Returns the median of the |R^2 residuals|.
int numberFixedPoints() const
Returns the number of 'fixed' (ground) points.
QString maxSigmaCoord1PointId() const
Returns the maximum sigma point id for coordinate 1.
int numberImageObservations() const
Returns the number of observations.
LidarDataQsp m_outLidarData
Output lidar data from BundleAdjust.
void setNumberLidarImageObservations(int numberLidarObservations)
Sets the number of lidar observations.
void resetNumberConstrainedPointParameters()
Resets the number of contrained point parameters to 0.
void setNumberImageParameters(int numberParameters)
Sets the number of image parameters.
int numberConstrainedTargetParameters() const
Return the number of constrained target parameters.
StatCumProbDistDynCalc residualsCumulativeProbabilityDistribution() const
Returns the cumulative probability distribution of the residuals used for reporting.
double elapsedTime() const
Returns the elapsed time for the bundle adjustment.
QList< Statistics > m_rmsLidarImageLineResiduals
List of RMS lidar line residual stats for each image in the bundle
QList< Statistics > rmsImageResiduals() const
Returns the list of RMS image residuals statistics.
Distance m_maxSigmaCoord2Distance
The maximum sigma longitude distance.
QVector< Statistics > m_rmsImageRASigmas
< The root mean square image right ascension sigmas.
const BundleObservationVector & observations() const
Returns a reference to the observations used by the BundleAdjust.
Distance m_minSigmaCoord3Distance
The minimum sigma radius distance.
ControlNetQsp m_outNet
The output control net from BundleAdjust.
void initialize()
Initializes the BundleResults to a default state where all numeric members are set to 0 or another de...
Distance minSigmaCoord1Distance() const
Returns the minimum sigma distance for coordinate 1.
void setNumberUnknownParameters(int numberParameters)
Sets the total number of parameters to solve for.
void setSigmaCoord3Range(Distance minCoord3Dist, Distance maxCoord3Dist, QString minCoord3PointId, QString maxCoord3PointId)
Sets the min and max sigma distances and point ids for coordinate 3.
QString minSigmaCoord3PointId() const
Returns the minimum sigma point id for coordinate 3.
void setNumberConstrainedLidarPointParameters(int numberParameters)
Set number of contrained point parameters.
double rmsRx() const
Returns the RMS of the x residuals.
void setObservations(BundleObservationVector observations)
Sets the vector of BundleObservations.
void initializeResidualsProbabilityDistribution(unsigned int nodes=20)
Initializes or resets the cumulative probability distribution of residuals used for reporting.
void setRmsFromSigmaStatistics(double rmsFromSigmaCoord1Stats, double rmsFromSigmaCoord2Stats, double rmsFromSigmaCoord3Stats)
Sets the root mean square values of the adjusted sigmas for all three coordinates.
void setRmsXYResiduals(double rx, double ry, double rxy)
Sets the root mean square of the x and y residuals.
QList< Statistics > rmsImageLineResiduals() const
Returns the list of RMS image line residuals statistics.
double m_elapsedTime
elapsed time for bundle
double m_elapsedTimeErrorProp
elapsed time for error propagation
QVector< Statistics > rmsImageRASigmas() const
Returns the list of RMS image right ascension sigma statistics.
void setNumberObservations(int numberObservations)
Sets the number of observations.
int numberLidarRangeConstraintEquations() const
Return the number of lidar range constraint equations.
QVector< Statistics > rmsImageXSigmas() const
Returns the list of RMS image x sigma statistics.
void printMaximumLikelihoodTierInformation()
Prints out information about which tier the solution is in and the status of the residuals.
BundleResults & operator=(const BundleResults &src)
Assignment operator for BundleResults.
void resizeSigmaStatisticsVectors(int numberImages)
Resizes all image sigma vectors.
CorrelationMatrix * m_correlationMatrix
The correlation matrix from the BundleAdjust.
void setDegreesOfFreedom(double degreesOfFreedom)
Sets the degrees of freedom.
Distance m_minSigmaCoord1Distance
The minimum sigma latitude distance.
Distance maxSigmaCoord3Distance() const
Returns the maximum sigma distance for coordinate 3.
Distance maxSigmaCoord1Distance() const
Returns the maximum sigma distance for coordinate 1.
double m_rmsYResiduals
rms of y residuals
QString m_maxSigmaCoord2PointId
The maximum sigma coordinate2 point id.
QList< QPair< MaximumLikelihoodWFunctions, double > > m_maximumLikelihoodFunctions
< The maximum likelihood models and their quantiles.
void setCorrMatCovFileName(FileName name)
Set the covariance file name for the matrix used to calculate the correlation matrix.
QString m_maxSigmaCoord3PointId
The maximum sigma coordinate 3 point id.
QList< Statistics > m_rmsImageSampleResiduals
List of RMS image sample residual statistics for each image in the bundle
QVector< Statistics > rmsImageTWISTSigmas() const
Returns the list of RMS image twist sigma statistics.
void setRmsLidarImageResidualLists(QList< Statistics > rmsLidarImageLineResiduals, QList< Statistics > rmsLidarImageSampleResiduals, QList< Statistics > rmsLidarImageResiduals)
Sets the root mean square lidar image residual Statistics lists.
QString maxSigmaCoord3PointId() const
Returns the maximum sigma point id for coordinate 3.
void computeSigma0(double dvtpv, BundleSettings::ConvergenceCriteria criteria)
Computes the sigma0 and stores it internally.
QList< Statistics > m_rmsImageResiduals
RMS image sample and line residual statistics for each image in the bundle
QString maxSigmaCoord2PointId() const
Returns the maximum sigma point id for coordinate 2.
int numberConstrainedImageParameters() const
Returns the number of constrained image parameters.
void setElapsedTimeErrorProp(double time)
Sets the elapsed time for error propegation.
QVector< Statistics > rmsImageZSigmas() const
Returns the list of RMS image z sigma statistics.
QList< Statistics > rmsLidarImageResiduals() const
Returns the list of RMS image lidar residuals statistics.
int m_numberHeldImages
number of 'held' images (define)
double sigmaCoord1StatisticsRms() const
Returns the RMS of the adjusted sigmas for coordinate 1.
void setConverged(bool converged)
Sets if the bundle adjustment converged.
Distance minSigmaCoord2Distance() const
Returns the minimum sigma distance for coordinate 2.
void resetNumberConstrainedTargetParameters()
Resets the number of constrained target parameters to 0.
double m_rmsSigmaCoord1Stats
rms of adjusted Latitude sigmas
StatCumProbDistDynCalc cumulativeProbabilityDistribution() const
Returns the cumulative probability distribution of the |R^2 residuals|.
int degreesOfFreedom() const
Returns the degrees of freedom.
QVector< Statistics > m_rmsImageDECSigmas
< The root mean square image declination sigmas.
ConvergenceCriteria
This enum defines the options for the bundle adjustment's convergence.
@ ParameterCorrections
All parameter corrections will be used to determine that the bundle adjustment has converged.
This is a container for the correlation matrix that comes from a bundle adjust.
void setCovarianceFileName(FileName covarianceFileName)
Set the qmap of images and parameters.
void setImagesAndParameters(QMap< QString, QStringList > imagesAndParameters)
Set the qmap of images and parameters.
Distance measurement, usually in meters.
void setMeters(double distanceInMeters)
Set the distance in meters.
File name manipulation and expansion.
@ Unknown
A type of error that cannot be classified as any of the other error types.
@ Programmer
This error is for when a programmer made an API call that was illegal.
@ Io
A type of error that occurred when performing an actual I/O operation.
Adds specific functionality to C++ strings.
Class provides maximum likelihood estimation functions for robust parameter estimation,...
static QString modelToString(Model model)
Static method to return a string represtentation for a given MaximumLikelihoodWFunctions::Model enum.
The main project for ipce.
This class is used to approximate cumulative probibility distributions of a stream of observations wi...
double value(double cumProb)
Provides the value of the variable that has the given cumulative probility (according the current est...
void addObs(double obs)
Values for the estimated quantile positions are update as observations are added.
This class is used to accumulate statistics on double arrays.
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
@ Latitudinal
Planetocentric latitudinal (lat/lon/rad) coordinates.
@ Rectangular
Body-fixed rectangular x/y/z coordinates.
Manage a stack of content handlers for reading XML files.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
int toInt(const QString &string)
Global function to convert from a string to an integer.
bool toBool(const QString &string)
Global function to convert from a string to a boolean.
double toDouble(const QString &string)
Global function to convert from a string to a double.