Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Secure .gov websites use HTTPS
A lock ( ) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

Isis 3 Programmer Reference
LidarData.cpp
1#include "LidarData.h"
2
3#include <QByteArray>
4#include <QFile>
5#include <QJsonArray>
6#include <QJsonDocument>
7#include <QJsonObject>
8#include <QJsonValue>
9#include <QList>
10#include <QMapIterator>
11#include <QSharedPointer>
12#include <QString>
13#include <QStringList>
14#include <QTextStream>
15
16#include "Angle.h"
17#include "CameraFactory.h"
18#include "ControlNet.h"
19#include "Distance.h"
20#include "FileName.h"
21#include "IException.h"
22#include "iTime.h"
23#include "Latitude.h"
24#include "Longitude.h"
25#include "Progress.h"
26#include "SerialNumberList.h"
27#include "SurfacePoint.h"
28
29using namespace boost::numeric::ublas;
30
31namespace Isis {
32
33
38 m_numSimultaneousMeasures = 0;
39 m_numAsynchronousMeasures = 0;
40 }
41
42
51
58
61 if (!point) {
62 QString msg = "Point " + pointId + " is not in the lidar data.";
63 throw IException(IException::Programmer, msg, _FILEINFO_);
64 }
65 return point;
66 }
67
68
81 if (!sort) {
82 // This is the default behavior. The list is coming from a QHash so the point order
83 // will vary.
84 return m_points.values();
85 }
86 else {
87 // Sort the points as recommended by QT with std::sort since qsort is deprecated
89 std::sort(pointlist.begin(), pointlist.end(),
91 return pointlist;
92 }
93 }
94
95
102 return m_points.size();
103 }
104
105
112 return m_numSimultaneousMeasures;
113 }
114
121 return m_numAsynchronousMeasures;
122 }
123
124
131 return m_numSimultaneousMeasures + m_numAsynchronousMeasures;
132 }
133
134
147 void LidarData::SetImages(ControlNet &controlNet, Progress *progress) {
148
149 // iterate over map between serial number and camera pointers
150 QMapIterator< QString, Isis::Camera *> it(p_cameraMap);
151 while (it.hasNext()) {
152 it.next();
153 QString serialNumber = it.key();
154
155 // get corresponding camera pointer from controlNet
156 Isis::Camera *cam = controlNet.Camera(serialNumber);
157 p_cameraMap[serialNumber] = cam;
158 p_cameraValidMeasuresMap[serialNumber] = 0; // not sure if all this is needed
159 p_cameraRejectedMeasuresMap[serialNumber] = 0;
160 p_cameraList.push_back(cam);
161 }
162
163 // Loop through all measures and set the camera
164 QHashIterator< QString, QSharedPointer<LidarControlPoint> > p(m_points);
165 while (p.hasNext()) {
166 p.next();
167 LidarControlPointQsp curPoint = p.value();
168
169 QList< QString > serialNums = curPoint->getCubeSerialNumbers();
170 for (int m = 0; m < serialNums.size(); m++) {
171 ControlMeasure *curMeasure = (*curPoint)[serialNums[m]];
172
173 QString serialNumber = curMeasure->GetCubeSerialNumber();
174 Isis::Camera *cam = p_cameraMap[serialNumber];
175
176 if (cam == NULL) {
177 IString msg = "Lidar Control point [" + curPoint->GetId() +
178 "], measure [" + curMeasure->GetCubeSerialNumber() +
179 "] does not have a cube in the ISIS control net with a matching serial number";
180 throw IException(IException::User, msg, _FILEINFO_);
181 }
182
183 curMeasure->SetCamera(cam);
184
185 // increment number of measures for this image (camera)
186 if (!curMeasure->IsIgnored()) {
187 p_cameraValidMeasuresMap[serialNumber]++;
188 }
189 }
190 }
191 }
192
193
210 // First check if cameras have already been setup via another SetImages call
211 if (p_cameraList.size() > 0) {
212 return;
213 }
214 // Prep for reporting progress
215 if (progress != NULL) {
216 progress->SetText("Setting input images...");
217 progress->SetMaximumSteps(list.size());
218 progress->CheckStatus();
219 }
220 // Open the camera for all the images in the serial number list
221 for (int i = 0; i < list.size(); i++) {
222 QString serialNumber = list.serialNumber(i);
223 QString filename = list.fileName(i);
224 Cube cube(filename, "r");
225
226 try {
228 p_cameraMap[serialNumber] = cam;
229 p_cameraValidMeasuresMap[serialNumber] = 0;
230 p_cameraRejectedMeasuresMap[serialNumber] = 0;
231 p_cameraList.push_back(cam);
232 }
233 catch (IException &e) {
234 QString msg = "Unable to create camera for cube file ";
235 msg += filename;
236 throw IException(e, IException::Unknown, msg, _FILEINFO_);
237 }
238
239 if (progress != NULL)
240 progress->CheckStatus();
241 }
242
243 // Loop through all measures and set the camera
244 QHashIterator< QString, QSharedPointer<LidarControlPoint> > p(m_points);
245 while (p.hasNext()) {
246 p.next();
247 LidarControlPointQsp curPoint = p.value();
248
249 QList< QString > serialNums = curPoint->getCubeSerialNumbers();
250 for (int m = 0; m < serialNums.size(); m++) {
251 ControlMeasure *curMeasure = (*curPoint)[serialNums[m]];
252
253 QString serialNumber = curMeasure->GetCubeSerialNumber();
254 if (list.hasSerialNumber(serialNumber)) {
255 curMeasure->SetCamera(p_cameraMap[serialNumber]);
256
257 // increment number of measures for this image (camera)
258 if (!curMeasure->IsIgnored()) p_cameraValidMeasuresMap[serialNumber]++;
259 }
260 else {
261 IString msg = "Control point [" + curPoint->GetId() +
262 "], measure [" + curMeasure->GetCubeSerialNumber() +
263 "] does not have a cube with a matching serial number";
264 throw IException(IException::User, msg, _FILEINFO_);
265 }
266 }
267 }
268 }
269
270
280 void LidarData::read(FileName lidarDataFile) {
281 // Set up the input file
282 QFile loadFile(lidarDataFile.expanded());
283 // Make sure we can open the file successfully
284 if (!loadFile.open(QIODevice::ReadOnly)) {
285 QString msg("Could not open " + loadFile.fileName());
286 throw IException(IException::User, msg, _FILEINFO_);
287 }
288
289 // Load file
290 QByteArray saveData = loadFile.readAll();
291 QCborValue loadData(saveData);
292 QJsonDocument loadDoc(QJsonDocument::fromJson(loadData.toByteArray()));
293
294 int totalMeasures = 0;
295
296 // Unserialize LidarData
297 QJsonObject lidarDataObject = loadDoc.object();
298 if (lidarDataObject.contains("points") && lidarDataObject["points"].isArray()) {
299 // Unserialize LidarControlPoints
300 QJsonArray pointArray = lidarDataObject["points"].toArray();
301 for (int pointIndex = 0; pointIndex < pointArray.size(); pointIndex++) {
302 // Unserialize LidarControlPoint
303 QJsonObject pointObject = pointArray[pointIndex].toObject();
304
305 QString id;
306 if (pointObject.contains("id") && pointObject["id"].isString()) {
307 id = pointObject["id"].toString();
308 }
309
310 double range = 0.0;
311 if (pointObject.contains("range") && pointObject["range"].isDouble()) {
312 range = pointObject["range"].toDouble();
313 }
314
315 double sigmaRange = 0.0;
316 if (pointObject.contains("sigmaRange") && pointObject["sigmaRange"].isDouble()) {
317 sigmaRange = pointObject["sigmaRange"].toDouble();
318 }
319
320 double time = 0.0;
321 if (pointObject.contains("time") && pointObject["time"].isDouble()) {
322 time = pointObject["time"].toDouble();
323 }
324
325 double latitude = 0.0;
326 if (pointObject.contains("latitude") && pointObject["latitude"].isDouble()) {
327 latitude = pointObject["latitude"].toDouble();
328 }
329
330 double longitude = 0.0;
331 if (pointObject.contains("longitude") && pointObject["longitude"].isDouble()) {
332 longitude = pointObject["longitude"].toDouble();
333 }
334
335 double radius = 0.0;
336 if (pointObject.contains("radius") && pointObject["radius"].isDouble()) {
337 radius = pointObject["radius"].toDouble();
338 }
339
342 lcp->SetId(id);
343 lcp->setTime(iTime(time));
344 lcp->setRange(range);
345 lcp->setSigmaRange(sigmaRange);
346
347 if (pointObject.contains("aprioriMatrix") &&
348 pointObject["aprioriMatrix"].isArray()) {
349 QJsonArray aprioriMatrixArray = pointObject["aprioriMatrix"].toArray();
350 boost::numeric::ublas::symmetric_matrix<double, upper> aprioriMatrix(3);
351 aprioriMatrix.clear();
352 aprioriMatrix(0, 0) = aprioriMatrixArray[0].toDouble();
353 aprioriMatrix(0, 1) = aprioriMatrix(1, 0) = aprioriMatrixArray[1].toDouble();
354 aprioriMatrix(0, 2) = aprioriMatrix(2, 0) = aprioriMatrixArray[2].toDouble();
355 aprioriMatrix(1, 1) = aprioriMatrixArray[3].toDouble();
356 aprioriMatrix(1, 2) = aprioriMatrix(2, 1) = aprioriMatrixArray[4].toDouble();
357 aprioriMatrix(2, 2) = aprioriMatrixArray[5].toDouble();
358
359 lcp->SetAprioriSurfacePoint(SurfacePoint(Latitude(latitude, Angle::Units::Degrees),
362 aprioriMatrix));
363 lcp->SetType(ControlPoint::Constrained);
364 }
365 else {
366 lcp->SetAprioriSurfacePoint(SurfacePoint(Latitude(latitude, Angle::Units::Degrees),
369 }
370
371 // Set the adjusted surface point if it exists
372 if (pointObject.contains("adjustedLatitude") &&
373 pointObject["adjustedLatitude"].isDouble() &&
374 pointObject.contains("adjustedLongitude") &&
375 pointObject["adjustedLongitude"].isDouble() &&
376 pointObject.contains("adjustedRadius") &&
377 pointObject["adjustedRadius"].isDouble()) {
378
379 double adjustedLatitude = 0.0;
380 adjustedLatitude = pointObject["adjustedLatitude"].toDouble();
381
382 double adjustedLongitude = 0.0;
383 adjustedLongitude = pointObject["adjustedLongitude"].toDouble();
384
385 double adjustedRadius = 0.0;
386 adjustedRadius = pointObject["radius"].toDouble();
387
388 if (pointObject.contains("adjustedMatrix") &&
389 pointObject["adjustedMatrix"].isArray()) {
390 QJsonArray adjustedMatrixArray = pointObject["adjustedMatrix"].toArray();
391 boost::numeric::ublas::symmetric_matrix<double, upper> adjustedMatrix(3);
392 adjustedMatrix.clear();
393 adjustedMatrix(0, 0) = adjustedMatrixArray[0].toDouble();
394 adjustedMatrix(0, 1) = adjustedMatrix(1, 0) = adjustedMatrixArray[1].toDouble();
395 adjustedMatrix(0, 2) = adjustedMatrix(2, 0) = adjustedMatrixArray[2].toDouble();
396 adjustedMatrix(1, 1) = adjustedMatrixArray[3].toDouble();
397 adjustedMatrix(1, 2) = adjustedMatrix(2, 1) = adjustedMatrixArray[4].toDouble();
398 adjustedMatrix(2, 2) = adjustedMatrixArray[5].toDouble();
399
400 lcp->SetAdjustedSurfacePoint(SurfacePoint(Latitude(adjustedLatitude, Angle::Units::Degrees),
401 Longitude(adjustedLongitude, Angle::Units::Degrees),
402 Distance(adjustedRadius, Distance::Units::Kilometers),
403 adjustedMatrix));
404 lcp->SetType(ControlPoint::Constrained);
405 }
406 else {
407 lcp->SetAdjustedSurfacePoint(SurfacePoint(Latitude(adjustedLatitude, Angle::Units::Degrees),
408 Longitude(adjustedLongitude, Angle::Units::Degrees),
409 Distance(adjustedRadius, Distance::Units::Kilometers)));
410 }
411 }
412
413 if (pointObject.contains("simultaneousImages") &&
414 pointObject["simultaneousImages"].isArray()) {
415 QJsonArray simultaneousArray =
416 pointObject["simultaneousImages"].toArray();
417
418 for (int simIndex = 0; simIndex < simultaneousArray.size(); simIndex ++) {
419 QString newSerial;
420 // Unserialize each simultaneous image serial number
421 newSerial = simultaneousArray[simIndex].toString();
422 lcp->addSimultaneous(newSerial);
423 m_numSimultaneousMeasures++;
424 }
425 }
426
427 // Unserialize ControlMeasures
428 if (pointObject.contains("measures") && pointObject["measures"].isArray()) {
429 QJsonArray measureArray = pointObject["measures"].toArray();
430 for (int measureIndex = 0; measureIndex < measureArray.size(); measureIndex++) {
431 // Unserialize ControlMeasure
432 QJsonObject measureObject = measureArray[measureIndex].toObject();
433
434 double line = 0.0;
435 if (measureObject.contains("line") && measureObject["line"].toDouble()) {
436 line = measureObject["line"].toDouble();
437 }
438
439 double sample = 0.0;
440 if (measureObject.contains("sample") && measureObject["sample"].toDouble()) {
441 sample = measureObject["sample"].toDouble();
442 }
443
444 QString serialNumber;
445 if (measureObject.contains("serialNumber") && measureObject["serialNumber"].isString()) {
446 serialNumber = measureObject["serialNumber"].toString();
447 }
448
449 if (!p_cameraMap.contains(serialNumber)) {
450 p_cameraMap.insert(serialNumber, NULL);
451 }
452
453 // QString type;
454 // if (measureObject.contains("type") && measureObject["type"].isString()) {
455 // type = measureObject["type"].toString();
456 // }
457
458 ControlMeasure *measure = new ControlMeasure();
459 measure->SetCoordinate(sample, line);
460 measure->SetCubeSerialNumber(serialNumber);
461 // measure->SetType(measure->StringToMeasureType(type));
462 lcp->Add(measure);
463 totalMeasures++;
464 }
465 }
466
467 insert(lcp);
468 }
469 }
470 m_numAsynchronousMeasures = totalMeasures - m_numSimultaneousMeasures;
471 }
472
473
485 void LidarData::write(FileName outputFile, LidarData::Format format) {
486 bool sort = false; // Default behavior
487
488 // Set up the output file
489 if (format == Json) {
490 outputFile = outputFile.setExtension("json");
491 }
492 else if (format == Test) {
493 // Format is same as Json, but points are sorted instead of random so that
494 // output can be compared to truth data
495 outputFile = outputFile.setExtension("json");
496 sort = true;
497 }
498 else {
499 outputFile = outputFile.setExtension("dat");
500 }
501 QFile saveFile(outputFile.expanded());
502
503 if (!saveFile.open(QIODevice::WriteOnly)) {
504 QString msg("Could not open " + saveFile.fileName());
505 throw IException(IException::User, msg, _FILEINFO_);
506 }
507
508 // Serialize LidarData
509 QJsonObject lidarDataObject;
510 QJsonArray pointArray;
511 // Serialize the LidarControlPoints it contains
512 foreach (QSharedPointer<LidarControlPoint> lcp, points(sort)) {
513 // Serialize LidarControlPoint
514 QJsonObject pointObject;
515 pointObject["id"] = lcp->GetId();
516 pointObject["range"] = lcp->range();
517 pointObject["sigmaRange"] = lcp->sigmaRange();
518 pointObject["time"] = lcp->time().Et();
519
520 // Serialize the AprioriSurfacePoint
521 SurfacePoint aprioriSurfacePoint = lcp->GetAprioriSurfacePoint();
522 if (aprioriSurfacePoint.Valid()) {
523 pointObject["latitude"] = aprioriSurfacePoint.GetLatitude().planetocentric(Angle::Units::Degrees);
524 pointObject["longitude"] = aprioriSurfacePoint.GetLongitude().positiveEast(Angle::Units::Degrees);
525 pointObject["radius"] = aprioriSurfacePoint.GetLocalRadius().kilometers();
526
527 // Serialize the apriori matrix
528 symmetric_matrix<double, upper> aprioriMatrix = aprioriSurfacePoint.GetSphericalMatrix();
529 QJsonArray aprioriMatrixArray;
530 aprioriMatrixArray += aprioriMatrix(0, 0);
531 aprioriMatrixArray += aprioriMatrix(0, 1);
532 aprioriMatrixArray += aprioriMatrix(0, 2);
533 aprioriMatrixArray += aprioriMatrix(1, 1);
534 aprioriMatrixArray += aprioriMatrix(1, 2);
535 aprioriMatrixArray += aprioriMatrix(2, 2);
536
537 // If the covariance matrix has a value, add it to the PVL point.
538 if ( aprioriMatrix(0, 0) != 0.0
539 || aprioriMatrix(0, 1) != 0.0
540 || aprioriMatrix(0, 2) != 0.0
541 || aprioriMatrix(1, 1) != 0.0
542 || aprioriMatrix(1, 2) != 0.0
543 || aprioriMatrix(2, 2) != 0.0 ) {
544 pointObject["aprioriMatrix"] = aprioriMatrixArray;
545 }
546 }
547
548 // Serialize the AdjustedSurfacePoint
549 SurfacePoint adjustedSurfacePoint = lcp->GetAdjustedSurfacePoint();
550 if (adjustedSurfacePoint.Valid()) {
551 pointObject["adjustedLatitude"] =
552 adjustedSurfacePoint.GetLatitude().planetocentric(Angle::Units::Degrees);
553 pointObject["adjustedLongitude"] =
554 adjustedSurfacePoint.GetLongitude().positiveEast(Angle::Units::Degrees);
555 pointObject["adjustedRadius"] = adjustedSurfacePoint.GetLocalRadius().kilometers();
556
557 // Serialize the adjusted matrix
558 symmetric_matrix<double, upper> adjustedMatrix = adjustedSurfacePoint.GetSphericalMatrix();
559 QJsonArray adjustedMatrixArray;
560 adjustedMatrixArray += adjustedMatrix(0, 0);
561 adjustedMatrixArray += adjustedMatrix(0, 1);
562 adjustedMatrixArray += adjustedMatrix(0, 2);
563 adjustedMatrixArray += adjustedMatrix(1, 1);
564 adjustedMatrixArray += adjustedMatrix(1, 2);
565 adjustedMatrixArray += adjustedMatrix(2, 2);
566
567 // If the covariance matrix has a value, add it to the PVL point.
568 if ( adjustedMatrix(0, 0) != 0.0
569 || adjustedMatrix(0, 1) != 0.0
570 || adjustedMatrix(0, 2) != 0.0
571 || adjustedMatrix(1, 1) != 0.0
572 || adjustedMatrix(1, 2) != 0.0
573 || adjustedMatrix(2, 2) != 0.0 ) {
574 pointObject["adjustedMatrix"] = adjustedMatrixArray;
575 }
576 }
577
578 // Serialize the list of simultaneous images
579 QJsonArray simultaneousArray;
580 foreach (QString sn, lcp->snSimultaneous()) {
581 simultaneousArray.append(sn);
582 }
583 pointObject["simultaneousImages"] = simultaneousArray;
584
585 QJsonArray measureArray;
586 // Serialize the ControlMeasures it contains
587 foreach (ControlMeasure *measure, lcp->getMeasures()) {
588 // Serialize ControlMeasure
589 QJsonObject measureObject;
590 measureObject["line"] = measure->GetLine();
591 measureObject["sample"] = measure->GetSample();
592 measureObject["serialNumber"] = measure->GetCubeSerialNumber();
593 // measureObject["type"] = measure->GetMeasureTypeString();
594 measureArray.append(measureObject);
595
596 }
597 // Add the ControlMeasures to the LidarControlPoint
598 pointObject["measures"] = measureArray;
599
600 pointArray.append(pointObject);
601
602 }
603 // Add the LidarControlPoints to the LidarData
604 lidarDataObject["points"] = pointArray;
605
606 // Write the JSON to the file
607 QJsonDocument lidarDataDoc(lidarDataObject);
608 if (format == Json || format == Test) {
609 saveFile.write(lidarDataDoc.toJson());
610 }
611 else {
612 QCborValue json(lidarDataDoc.toJson());
613 saveFile.write(json.toByteArray());
614 }
615 }
616
625 bool LidarData::ValidateSerialNumber(QString serialNumber) const {
626 return p_cameraMap.contains(serialNumber);
627 }
628
629
638 int LidarData::GetNumberOfValidMeasuresInImage(const QString &serialNumber) {
639 // If SetImage was called, use the map that has been populated with valid measures
640 if (p_cameraList.size() > 0) {
641 return p_cameraValidMeasuresMap[serialNumber];
642 }
643 return GetValidMeasuresInCube(serialNumber).size();
644 }
645
646
653 return p_cameraRejectedMeasuresMap[serialNumber];
654 }
655
662 QList< ControlMeasure * > validMeasures;
663
664 // Get measures in cube will validate this for us, so we don't need to re-check
665 QList< ControlMeasure * > measureList = GetMeasuresInCube(serialNumber);
666
667 foreach(ControlMeasure * measure, measureList) {
668 if (!measure->IsIgnored()) {
669 validMeasures.append(measure);
670 }
671 }
672
673 return validMeasures;
674 }
675
682 if( !ValidateSerialNumber(serialNumber) ) {
683 IString msg = "Cube Serial Number [" + serialNumber + "] not found in "
684 "the network";
685 throw IException(IException::Programmer, msg, _FILEINFO_);
686
687 }
689 foreach(QSharedPointer <LidarControlPoint> point, m_points) {
690 if (point->HasSerialNumber(serialNumber)) {
691 measures.append(point->GetMeasure(serialNumber));
692 }
693 }
694 return measures;
695 }
696}
@ Degrees
Degrees are generally considered more human readable, 0-360 is one circle, however most math does not...
Definition Angle.h:56
static Camera * Create(Cube &cube)
Creates a Camera object using Pvl Specifications.
a control measurement
Status SetCubeSerialNumber(QString newSerialNumber)
Set cube serial number.
Status SetCoordinate(double sample, double line)
Set the coordinate of the measurement.
QString GetCubeSerialNumber() const
Return the serial number of the cube containing the coordinate.
Status SetCamera(Isis::Camera *camera)
Set pointer to camera associated with a measure.
a control network
Definition ControlNet.h:257
Isis::Camera * Camera(int index)
Returns the camera list from the given image number.
@ Constrained
A Constrained point is a Control Point whose lat/lon/radius is somewhat established and should not be...
IO Handler for Isis Cubes.
Definition Cube.h:168
Distance measurement, usually in meters.
Definition Distance.h:34
double kilometers() const
Get the distance in kilometers.
Definition Distance.cpp:106
@ Kilometers
The distance is being specified in kilometers.
Definition Distance.h:45
This class is designed to encapsulate the concept of a Latitude.
Definition Latitude.h:51
double planetocentric(Angle::Units units=Angle::Radians) const
Get the latitude in the planetocentric (universal) coordinate system.
Definition Latitude.cpp:282
A lidar control ControlPoint.
QSharedPointer< LidarControlPoint > point(QString pointId) const
Gets a single LidarDataPoint by ID.
Definition LidarData.cpp:59
QVector< Isis::Camera * > p_cameraList
vector of image# to camera
Definition LidarData.h:92
int numberLidarPoints()
Returns number of Lidar data points.
bool ValidateSerialNumber(QString serialNumber) const
Does a check to ensure that the given serial number is contained within the network.
QList< ControlMeasure * > GetValidMeasuresInCube(QString serialNumber)
Get all the valid measures pertaining to a given cube serial number.
Format
Enumerates the file formats for serializing the LidarData class.
Definition LidarData.h:53
@ Test
Serializes to an ordered JSON .json file for comparing to truth data.
Definition LidarData.h:56
@ Json
Serializes to a JSON .json file.
Definition LidarData.h:55
void SetImages(SerialNumberList &list, Progress *progress=0)
Creates the ControlNet's image camera's based on the list of Serial Numbers.
LidarData()
Default constructor.
Definition LidarData.cpp:37
void read(FileName)
Unserialize LidarData.
QMap< QString, Isis::Camera * > p_cameraMap
camera
Definition LidarData.h:88
QList< QSharedPointer< LidarControlPoint > > points(bool sort=false) const
Gets the list of Lidar data points optionally sorted .
Definition LidarData.cpp:80
void write(FileName, Format)
Serializes LidarData.
int numberMeasures()
Returns total number of lidar measures.
int numberSimultaneousMeasures()
Returns number of simultaneous lidar measures.
QMap< QString, int > p_cameraRejectedMeasuresMap
#rejected measures
Definition LidarData.h:90
void insert(QSharedPointer< LidarControlPoint > point)
Adds a LidarControlPoint to the LidarData.
Definition LidarData.cpp:48
int GetNumberOfValidMeasuresInImage(const QString &serialNumber)
Return the number of measures in image specified by serialNumber.
QMap< QString, int > p_cameraValidMeasuresMap
#measures
Definition LidarData.h:89
QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber)
Get all the measures pertaining to a given cube serial number.
QHash< QString, QSharedPointer< LidarControlPoint > > m_points
hash of LidarControlPoints
Definition LidarData.h:85
int numberAsynchronousMeasures()
Returns number of non-simultaneous lidar measures.
int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber)
Return the number of jigsaw rejected measures in image specified by serialNumber.
This class is designed to encapsulate the concept of a Longitude.
Definition Longitude.h:40
double positiveEast(Angle::Units units=Angle::Radians) const
Get the longitude in the PositiveEast coordinate system.
Program progress reporter.
Definition Progress.h:42
void SetMaximumSteps(const int steps)
This sets the maximum number of steps in the process.
Definition Progress.cpp:85
void SetText(const QString &text)
Changes the value of the text string reported just before 0% processed.
Definition Progress.cpp:61
void CheckStatus()
Checks and updates the status.
Definition Progress.cpp:105
Serial Number list generator.
bool hasSerialNumber(QString sn)
Determines whether or not the requested serial number exists in the list.
QString serialNumber(const QString &filename)
Return a serial number given a filename.
int size() const
How many serial number / filename combos are in the list.
QString fileName(const QString &sn)
Return a filename given a serial number.
This class defines a body-fixed surface point.
Latitude GetLatitude() const
Return the body-fixed latitude for the surface point.
Longitude GetLongitude() const
Return the body-fixed longitude for the surface point.
Distance GetLocalRadius() const
Return the radius of the surface point.
Parse and return pieces of a time string.
Definition iTime.h:65
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
QSharedPointer< LidarControlPoint > LidarControlPointQsp
Definition for a shared pointer to a LidarControlPoint.