Isis 3 Programmer Reference
ControlMeasure.cpp
1
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include "ControlMeasure.h"
11
12#include <QList>
13#include <QStringList>
14
15#include "Application.h"
16#include "Camera.h"
17#include "ControlMeasureLogData.h"
18#include "ControlNet.h"
19#include "ControlPoint.h"
20#include "IString.h"
21#include "iTime.h"
22#include "SpecialPixel.h"
23
24using namespace std;
25
26namespace Isis {
32 p_serialNumber = new QString;
33 p_chooserName = new QString;
34 p_dateTime = new QString;
35 p_loggedData = new QVector<ControlMeasureLogData>();
36
37 p_measureType = Candidate;
38 p_editLock = false;
39 p_jigsawRejected = false;
40 p_ignore = false;
41
42 }
43
44
52
53 p_serialNumber = new QString(*other.p_serialNumber);
54 p_chooserName = new QString(*other.p_chooserName);
55 p_dateTime = new QString(*other.p_dateTime);
56
57 p_loggedData = new QVector<ControlMeasureLogData>(*other.p_loggedData);
58
59 p_measureType = other.p_measureType;
60 p_editLock = other.p_editLock;
61 p_jigsawRejected = other.p_jigsawRejected;
62 p_ignore = other.p_ignore;
63 p_sample = other.p_sample;
64 p_line = other.p_line;
65 p_diameter = other.p_diameter;
66 p_aprioriSample = other.p_aprioriSample;
67 p_aprioriLine = other.p_aprioriLine;
68 p_sampleSigma = other.p_sampleSigma;
69 p_lineSigma = other.p_lineSigma;
70 p_sampleResidual = other.p_sampleResidual;
71 p_lineResidual = other.p_lineResidual;
72 p_camera = other.p_camera;
73 }
74
75
78 // Previously these were initialized to 0.0 in the constructor.
79 p_sample = Null;
80 p_line = Null;
81
82 p_serialNumber = NULL;
83 p_chooserName = NULL;
84 p_dateTime = NULL;
85 p_loggedData = NULL;
86
87 p_diameter = Null;
90 p_computedEphemerisTime = Null;
95
96 p_camera = NULL;
97 p_focalPlaneMeasuredX = Null;
98 p_focalPlaneMeasuredY = Null;
99 p_focalPlaneComputedX = Null;
100 p_focalPlaneComputedY = Null;
101 p_measuredEphemerisTime = Null;
102
103 parentPoint = NULL;
104 }
105
106
111 if (p_serialNumber) {
112 delete p_serialNumber;
113 p_serialNumber = NULL;
114 }
115
116 if (p_chooserName) {
117 delete p_chooserName;
118 p_chooserName = NULL;
119 }
120
121 if (p_dateTime) {
122 delete p_dateTime;
123 p_dateTime = NULL;
124 }
125
126 if (p_loggedData) {
127 delete p_loggedData;
128 p_loggedData = NULL;
129 }
130
131 }
132
133
134 ControlMeasure::Status ControlMeasure::SetAprioriLine(double aprioriLine) {
135 if (IsEditLocked())
136 return MeasureLocked;
137 MeasureModified();
138
139 p_aprioriLine = aprioriLine;
140 return Success;
141 }
142
143
144 ControlMeasure::Status ControlMeasure::SetAprioriSample(
145 double aprioriSample) {
146 if (IsEditLocked())
147 return MeasureLocked;
148 MeasureModified();
149
150 p_aprioriSample = aprioriSample;
151 return Success;
152 }
153
154
169 ControlMeasure::Status ControlMeasure::SetCamera(Isis::Camera *camera) {
170 p_camera = camera;
171 return Success;
172 }
173
174
187 ControlMeasure::Status ControlMeasure::SetCubeSerialNumber(QString newSerialNumber) {
188 if (IsEditLocked())
189 return MeasureLocked;
190 *p_serialNumber = newSerialNumber;
191 return Success;
192 }
193
194
196 ControlMeasure::Status ControlMeasure::SetChooserName() {
197 if (IsEditLocked())
198 return MeasureLocked;
199 *p_chooserName = "";
200 return Success;
201 }
202
203
205 ControlMeasure::Status ControlMeasure::SetChooserName(QString name) {
206 if (IsEditLocked())
207 return MeasureLocked;
208 *p_chooserName = name;
209 return Success;
210 }
211
212
219 ControlMeasure::Status ControlMeasure::SetCoordinate(double sample,
220 double line) {
221 return SetCoordinate(sample, line, GetType());
222 }
223
224
232 ControlMeasure::Status ControlMeasure::SetCoordinate(double sample,
233 double line, MeasureType type) {
234 if (IsEditLocked())
235 return MeasureLocked;
236 MeasureModified();
237
238 p_sample = sample;
239 p_line = line;
240
241 SetType(type);
242 return Success;
243 }
244
245
247 ControlMeasure::Status ControlMeasure::SetDateTime() {
248 if (IsEditLocked())
249 return MeasureLocked;
250 *p_dateTime = Application::DateTime();
251 return Success;
252 }
253
254
256 ControlMeasure::Status ControlMeasure::SetDateTime(QString datetime) {
257 if (IsEditLocked())
258 return MeasureLocked;
259 *p_dateTime = datetime;
260 return Success;
261 }
262
263
272 ControlMeasure::Status ControlMeasure::SetDiameter(double diameter) {
273 if (IsEditLocked())
274 return MeasureLocked;
275 MeasureModified();
276 p_diameter = diameter;
277 return Success;
278 }
279
280
281 ControlMeasure::Status ControlMeasure::SetEditLock(bool editLock) {
282 p_editLock = editLock;
283 return Success;
284 }
285
286
299 ControlMeasure::Status ControlMeasure::SetFocalPlaneMeasured(double x,
300 double y) {
301 p_focalPlaneMeasuredX = x;
302 p_focalPlaneMeasuredY = y;
303 return Success;
304 }
305
306
319 ControlMeasure::Status ControlMeasure::SetFocalPlaneComputed(double x,
320 double y) {
321 p_focalPlaneComputedX = x;
322 p_focalPlaneComputedY = y;
323 return Success;
324 }
325
326
327
328
343 ControlMeasure::Status ControlMeasure::SetRejected(bool reject) {
344 MeasureModified();
345 p_jigsawRejected = reject;
346 return Success;
347 }
348
349
350 ControlMeasure::Status ControlMeasure::SetIgnored(bool newIgnoreStatus) {
351 if (IsEditLocked())
352 return MeasureLocked;
353
354
355 bool oldStatus = p_ignore;
356 p_ignore = newIgnoreStatus;
357
358 if (Parent()) {
359 Parent()->emitMeasureModified(this, IgnoredModified, oldStatus, p_ignore);
360 }
361
362 // only update if there was a change in status
363 if (oldStatus != p_ignore) {
364 MeasureModified();
365 if (parentPoint && !parentPoint->IsIgnored() && parentPoint->Parent()) {
366 ControlNet * cnet = parentPoint->Parent();
367 p_ignore ? cnet->measureIgnored(this) : cnet->measureUnIgnored(this);
368 cnet->emitNetworkStructureModified();
369 }
370 }
371
372
373 return Success;
374 }
375
376
377 ControlMeasure::Status ControlMeasure::SetLineSigma(double lineSigma) {
378 if (IsEditLocked())
379 return MeasureLocked;
380 MeasureModified();
381 p_lineSigma = lineSigma;
382 return Success;
383 }
384
385
399 ControlMeasure::Status ControlMeasure::SetResidual(double sampResidual,
400 double lineResidual) {
401
402 MeasureModified();
403
404 p_sampleResidual = sampResidual;
405 p_lineResidual = lineResidual;
406 return Success;
407 }
408
409
410 ControlMeasure::Status ControlMeasure::SetSampleSigma(double sampleSigma) {
411 if (IsEditLocked())
412 return MeasureLocked;
413 MeasureModified();
414 p_sampleSigma = sampleSigma;
415 return Success;
416 }
417
418
420 ControlMeasure::Status ControlMeasure::SetType(MeasureType type) {
421 if (IsEditLocked())
422 return MeasureLocked;
423 MeasureModified();
424
425 p_measureType = type;
426 return Success;
427 }
428
429
436 if (!data.IsValid()) {
437 QString msg = "Cannot set log data with invalid information stored in "
438 "the ControlMeasureLogData";
439 throw IException(IException::Programmer, msg, _FILEINFO_);
440 }
441
442 if (HasLogData(data.GetDataType()))
443 UpdateLogData(data);
444 else
445 p_loggedData->append(data);
446 }
447
448
455 void ControlMeasure::DeleteLogData(long dataType) {
456 for (int i = p_loggedData->size()-1; i >= 0; i--) {
457 ControlMeasureLogData logDataEntry = p_loggedData->at(i);
458
459 if (logDataEntry.GetDataType() == dataType)
460 p_loggedData->remove(i);
461 }
462 }
463
464
469 QVariant ControlMeasure::GetLogValue(long dataType) const {
470 for (int i = 0; i < p_loggedData->size(); i++) {
471 const ControlMeasureLogData &logDataEntry = p_loggedData->at(i);
472
473 if (logDataEntry.GetDataType() == dataType)
474 return logDataEntry.GetValue();
475 }
476
477 return QVariant();
478 }
479
480
486 bool ControlMeasure::HasLogData(long dataType) const {
487 for (int i = 0; i < p_loggedData->size(); i++) {
488 const ControlMeasureLogData &logDataEntry = p_loggedData->at(i);
489
490 if (logDataEntry.GetDataType() == dataType)
491 return true;
492 }
493
494 return false;
495 }
496
497
505 bool updated = false;
506
507 for (int i = 0; i < p_loggedData->size(); i++) {
508 ControlMeasureLogData logDataEntry = p_loggedData->at(i);
509
510 if (logDataEntry.GetDataType() == newLogData.GetDataType()) {
511 (*p_loggedData)[i] = newLogData;
512 updated = true;
513 }
514 }
515
516 if (!updated) {
517 QString msg = "Unable to update the log data for ["
518 + newLogData.DataTypeToName(newLogData.GetDataType()) + "] because this"
519 " control measure does not have log data for this value. Please use "
520 "SetLogData instead";
521 throw IException(IException::Programmer, msg, _FILEINFO_);
522 }
523 }
524
525
526 double ControlMeasure::GetAprioriLine() const {
527 return p_aprioriLine;
528 }
529
530
531 double ControlMeasure::GetAprioriSample() const {
532 return p_aprioriSample;
533 }
534
535
536 Isis::Camera *ControlMeasure::Camera() const {
537 return p_camera;
538 }
539
540
543 if (*p_chooserName != "") {
544 return *p_chooserName;
545 }
546 else {
547 return FileName(Application::Name()).name();
548 }
549 }
550
553 return !p_chooserName->isEmpty();
554 }
555
558 return *p_serialNumber;
559 }
560
561
564 if (*p_dateTime != "") {
565 return *p_dateTime;
566 }
567 else {
568 return Application::DateTime();
569 }
570 }
571
574 return !p_dateTime->isEmpty();
575 }
576
577
578
581 return p_diameter;
582 }
583
584
602 // Check to see if this measure is the reference measure of the parent
603 if (parentPoint != NULL && parentPoint->IsEditLocked() &&
604 this == parentPoint->GetRefMeasure())
605 return true;
606 return p_editLock;
607 }
608
609
610 double ControlMeasure::GetFocalPlaneComputedX() const {
611 return p_focalPlaneComputedX;
612 }
613
614
615 double ControlMeasure::GetFocalPlaneComputedY() const {
616 return p_focalPlaneComputedY;
617 }
618
619
620 double ControlMeasure::GetFocalPlaneMeasuredX() const {
621 return p_focalPlaneMeasuredX;
622 }
623
624
625 double ControlMeasure::GetFocalPlaneMeasuredY() const {
626 return p_focalPlaneMeasuredY;
627 }
628
629
630 bool ControlMeasure::IsIgnored() const {
631 return p_ignore;
632 }
633
634
635 bool ControlMeasure::IsRejected() const {
636 return p_jigsawRejected;
637 }
638
639
640 bool ControlMeasure::IsMeasured() const {
641 return p_measureType != Candidate;
642 }
643
644
645 bool ControlMeasure::IsRegistered() const {
646 return (p_measureType == RegisteredPixel ||
647 p_measureType == RegisteredSubPixel);
648 }
649
650 bool ControlMeasure::IsStatisticallyRelevant(DataField field) const {
651 bool relevant = false;
652 bool validField = false;
653
654 switch (field) {
655 case AprioriLine:
656 case AprioriSample:
657 case ChooserName:
658 case CubeSerialNumber:
659 case Coordinate:
660 case Diameter:
661 case FocalPlaneMeasured:
662 case FocalPlaneComputed:
663 case SampleResidual:
664 case LineResidual:
665 case SampleSigma:
666 case LineSigma:
667 relevant = true;
668 validField = true;
669 break;
670
671 case DateTime:
672 case EditLock:
673 case Ignore:
674 case Rejected:
675 case Type:
676 validField = true;
677 break;
678 }
679
680 if (!validField) {
681 QString msg = "Cannot test IsStatisticallyRelevant on Measure Data ["
682 + QString(field) + "]";
683 throw IException(IException::Programmer, msg, _FILEINFO_);
684 }
685
686 return relevant;
687 }
688
689
690 double ControlMeasure::GetLine() const {
691 return p_line;
692 }
693
694
695 double ControlMeasure::GetLineResidual() const {
696 return p_lineResidual;
697 }
698
699
700 double ControlMeasure::GetLineSigma() const {
701 return p_lineSigma;
702 }
703
704
714 return Null;
715
716 double dist = (p_lineResidual * p_lineResidual) +
718
719 return sqrt(dist);
720 }
721
722
723 double ControlMeasure::GetSample() const {
724 return p_sample;
725 }
726
727
728 double ControlMeasure::GetSampleResidual() const {
729 return p_sampleResidual;
730 }
731
732
733 double ControlMeasure::GetSampleSigma() const {
734 return p_sampleSigma;
735 }
736
737
738 ControlMeasure::MeasureType ControlMeasure::GetType() const {
739 return p_measureType;
740 }
741
742
743 QString ControlMeasure::GetPointId() const {
744 if (parentPoint == NULL) {
745 QString msg = "Measure has no containing point";
746 throw IException(IException::User, msg, _FILEINFO_);
747 }
748
749 return parentPoint->GetId();
750 }
751
752
753 double ControlMeasure::GetSampleShift() const {
754 return (p_sample != Null && p_aprioriSample != Null) ?
756 }
757
758
759 double ControlMeasure::GetLineShift() const {
760 return (p_line != Null && p_aprioriLine != Null) ?
762 }
763
764
765 double ControlMeasure::GetPixelShift() const {
766 double sampleShift = GetSampleShift();
767 double lineShift = GetLineShift();
768 return (sampleShift != Null && lineShift != Null) ?
769 sqrt(pow(GetSampleShift(), 2) + pow(GetLineShift(), 2)) : Null;
770 }
771
772
773 ControlMeasureLogData ControlMeasure::GetLogData(long dataType) const {
774 int foundIndex = 0;
777
778 while (foundIndex < p_loggedData->size()) {
779 const ControlMeasureLogData &logData = p_loggedData->at(foundIndex);
780 if (logData.GetDataType() == typedDataType) {
781 return logData;
782 }
783
784 foundIndex ++;
785 }
786
787 return ControlMeasureLogData(typedDataType);
788 }
789
790
796 QVector<ControlMeasureLogData> ControlMeasure::GetLogDataEntries() const {
797 QVector<ControlMeasureLogData> logs;
798 if (p_loggedData) {
799 logs = *p_loggedData;
800 }
801 return logs;
802 }
803
804
806 double ControlMeasure::GetMeasureData(QString data) const {
807 if (data == "SampleResidual") {
808 return p_sampleResidual;
809 }
810 else if (data == "LineResidual") {
811 return p_lineResidual;
812 }
813 else if (data == "Type") {
814 return p_measureType;
815 }
816 else if (data == "IsMeasured") {
817 return IsMeasured();
818 }
819 else if (data == "IsRegistered") {
820 return IsRegistered();
821 }
822 else if (data == "Ignore") {
823 return p_ignore;
824 }
825 else {
826 QString msg = data + " passed to GetMeasureData but is invalid";
827 throw IException(IException::Programmer, msg, _FILEINFO_);
828 }
829 }
830
831
834 QVector< QString > names;
835
836 names.push_back("SampleResidual");
837 names.push_back("LineResidual");
838 names.push_back("Type");
839 names.push_back("IsMeasured");
840 names.push_back("IsRegistered");
841 names.push_back("Ignore");
842
843 return names;
844 }
845
854 QList< QStringList > ControlMeasure::PrintableClassData() const {
855 QList< QStringList > data;
856 QStringList qsl;
857
858 qsl << "AprioriLine" << QString::number(p_aprioriLine);
859 data.append(qsl);
860 qsl.clear();
861
862 qsl << "AprioriSample" << QString::number(p_aprioriSample);
863 data.append(qsl);
864 qsl.clear();
865
866 qsl << "ChooserName" << *p_chooserName;
867 data.append(qsl);
868 qsl.clear();
869
870 qsl << "CubeSerialNumber" << *p_serialNumber;
871 data.append(qsl);
872 qsl.clear();
873
874 qsl << "DateTime" << *p_dateTime;
875 data.append(qsl);
876 qsl.clear();
877
878 qsl << "Line" << QString::number(p_line);
879 data.append(qsl);
880 qsl.clear();
881
882 qsl << "LineResidual" << QString::number(p_lineResidual);
883 data.append(qsl);
884 qsl.clear();
885
886 qsl << "LineSigma" << QString::number(p_lineSigma);
887 data.append(qsl);
888 qsl.clear();
889
890 qsl << "Sample" << QString::number(p_sample);
891 data.append(qsl);
892 qsl.clear();
893
894 qsl << "SampleResidual" << QString::number(p_sampleResidual);
895 data.append(qsl);
896 qsl.clear();
897
898 qsl << "SampleSigma" << QString::number(p_sampleSigma);
899 data.append(qsl);
900 qsl.clear();
901
902 qsl << "ResidualMagnitude" << QString::number(GetResidualMagnitude());
903 data.append(qsl);
904 qsl.clear();
905
906 qsl << "MeasureType" << GetMeasureTypeString();
907 data.append(qsl);
908 qsl.clear();
909
910 return data;
911 }
912
913
920
921 QString err = "String [" + str + "] can not be converted to a MeasureType";
922
923 str = str.toLower();
924 MeasureType measureType;
925 if (str == "candidate")
926 measureType = ControlMeasure::Candidate;
927 else if (str == "manual")
928 measureType = ControlMeasure::Manual;
929 else if (str == "registeredpixel")
931 else if (str == "registeredsubpixel")
933 else
934 throw IException(IException::Programmer, err, _FILEINFO_);
935
936 return measureType;
937 }
938
939
952 QString sPrintable;
953
954 switch (type) {
956 sPrintable = "Candidate";
957 break;
958
960 sPrintable = "Manual";
961 break;
962
964 sPrintable = "RegisteredPixel";
965 break;
966
968 sPrintable = "RegisteredSubPixel";
969 break;
970 }
971
972 if (sPrintable == "") {
973 QString msg = "Measure type [" + toString(type) + "] cannot be converted "
974 "to a string";
975 throw IException(IException::Programmer, msg, _FILEINFO_);
976 }
977
978 return sPrintable;
979 }
980
981
988 return MeasureTypeToString(p_measureType);
989 }
990
991
1002 if (this == &other)
1003 return *this;
1004
1005 if (p_serialNumber) {
1006 delete p_serialNumber;
1007 p_serialNumber = NULL;
1008 }
1009 if (p_chooserName) {
1010 delete p_chooserName;
1011 p_chooserName = NULL;
1012 }
1013 if (p_dateTime) {
1014 delete p_dateTime;
1015 p_dateTime = NULL;
1016 }
1017 if (p_loggedData) {
1018 delete p_loggedData;
1019 p_loggedData = NULL;
1020 }
1021
1022 p_serialNumber = new QString;
1023 p_chooserName = new QString;
1024 p_dateTime = new QString;
1025 p_loggedData = new QVector<ControlMeasureLogData>();
1026
1027 bool oldLock = p_editLock;
1028 p_editLock = false;
1029
1030 p_sample = other.p_sample;
1031 p_line = other.p_line;
1032 *p_loggedData = *other.p_loggedData;
1033
1034 SetCubeSerialNumber(*other.p_serialNumber);
1035 SetChooserName(*other.p_chooserName);
1036 SetDateTime(*other.p_dateTime);
1037 SetType(other.p_measureType);
1038 // Call SetIgnored to update the ControlGraphNode. However, SetIgnored
1039 // will return if EditLock is true, so set to false temporarily.
1040 SetIgnored(other.p_ignore);
1041 SetDiameter(other.p_diameter);
1042 SetAprioriSample(other.p_aprioriSample);
1043 SetAprioriLine(other.p_aprioriLine);
1044 SetSampleSigma(other.p_sampleSigma);
1045 SetLineSigma(other.p_lineSigma);
1046 SetResidual(other.p_sampleResidual, other.p_lineResidual);
1047 SetCamera(other.p_camera);
1048 SetFocalPlaneMeasured(other.p_focalPlaneMeasuredX, other.p_focalPlaneMeasuredY);
1049 SetFocalPlaneComputed(other.p_focalPlaneComputedX, other.p_focalPlaneComputedY);
1050 p_editLock = oldLock;
1051 SetEditLock(other.p_editLock);
1052
1053 return *this;
1054 }
1055
1056
1067 return !(*this == pMeasure);
1068 }
1069
1070
1088 return pMeasure.p_measureType == p_measureType &&
1089 *pMeasure.p_serialNumber == *p_serialNumber &&
1090 *pMeasure.p_chooserName == *p_chooserName &&
1091 *pMeasure.p_dateTime == *p_dateTime &&
1092 pMeasure.p_editLock == p_editLock &&
1093 pMeasure.p_ignore == p_ignore &&
1094 pMeasure.p_jigsawRejected == p_jigsawRejected &&
1095 pMeasure.p_sample == p_sample &&
1096 pMeasure.p_line == p_line &&
1097 pMeasure.p_diameter == p_diameter &&
1098 pMeasure.p_aprioriSample == p_aprioriSample &&
1099 pMeasure.p_aprioriLine == p_aprioriLine &&
1100 pMeasure.p_computedEphemerisTime == p_computedEphemerisTime &&
1101 pMeasure.p_sampleSigma == p_sampleSigma &&
1102 pMeasure.p_lineSigma == p_lineSigma &&
1103 pMeasure.p_sampleResidual == p_sampleResidual &&
1104 pMeasure.p_lineResidual == p_lineResidual &&
1105 pMeasure.p_focalPlaneMeasuredX == p_focalPlaneMeasuredX &&
1106 pMeasure.p_focalPlaneMeasuredY == p_focalPlaneMeasuredY &&
1107 pMeasure.p_focalPlaneComputedX == p_focalPlaneComputedX &&
1108 pMeasure.p_focalPlaneComputedY == p_focalPlaneComputedY &&
1109 pMeasure.p_measuredEphemerisTime == p_measuredEphemerisTime;
1110 }
1111
1112 void ControlMeasure::MeasureModified() {
1113 *p_dateTime = "";
1114 *p_chooserName = "";
1115 }
1116}
static QString DateTime(time_t *curtime=0)
Returns the date and time as a QString.
static QString Name()
Returns the name of the application.
a control measurement
bool IsEditLocked() const
Return value for p_editLock or implicit lock on reference measure.
Status SetCubeSerialNumber(QString newSerialNumber)
Set cube serial number.
QString GetDateTime() const
Return the date/time the coordinate was last changed.
double p_sampleResidual
Jigsaw information - Solution error - replaces p_sampleError.
static QString MeasureTypeToString(MeasureType type)
Return the String Control Measure type.
bool operator!=(const Isis::ControlMeasure &pMeasure) const
Compare 2 Control Measures for inequality.
double p_aprioriLine
measure by autoseed. Pointreg/Interest always use this location to start it's search....
bool HasLogData(long dataType) const
Test if we have a valid log data value of the specified type.
QList< QStringList > PrintableClassData() const
Data accessor method, provides access to string representations of all variable values and names.
Status SetCoordinate(double sample, double line)
Set the coordinate of the measurement.
double p_sample
Current sample/line measurement.
static MeasureType StringToMeasureType(QString str)
void DeleteLogData(long dataType)
This deletes log data of the specified type.
QString GetChooserName() const
Return the chooser name.
QString GetCubeSerialNumber() const
Return the serial number of the cube containing the coordinate.
QString * p_chooserName
list the program used and the definition file or include the user name for qnet
Status SetFocalPlaneComputed(double x, double y)
Set the computed focal plane x/y for the apriori lat/lon.
double GetMeasureData(QString) const
One Getter to rule them all.
void InitializeToNull()
initialize pointers and other data to NULL
MeasureType
Control network measurement types.
@ Manual
Hand Measured (e.g., qnet)
@ Candidate
(e.g., autoseed, interest) AKA predicted, unmeasured, unverified
@ RegisteredSubPixel
Registered to sub-pixel (e.g., pointreg)
@ RegisteredPixel
Registered to whole pixel (e.g.,pointreg)
double p_line
Jigsaw uses this measure.
double p_sampleSigma
Uncertainty/sigma in pixels of the measurement (current sample/line)
bool operator==(const Isis::ControlMeasure &pMeasure) const
Check for Control Measures equality.
double p_lineSigma
Not sure how we determine this for automated or manual picking.
Status SetFocalPlaneMeasured(double x, double y)
Set the focal plane x/y for the measured line/sample.
Status SetType(MeasureType type)
Set how the coordinate was obtained.
Status SetDiameter(double diameter)
Set the crater diameter at the coordinate.
void SetLogData(ControlMeasureLogData)
This adds or updates the log data information associated with data's type.
bool HasDateTime() const
Returns true if the datetime is not empty.
QVariant GetLogValue(long dataType) const
Get the value of the log data with the specified type as a variant.
const ControlMeasure & operator=(const ControlMeasure &other)
Assignment operator.
double p_lineResidual
Jigsaw information - Solution error - replaces p_lineError.
void UpdateLogData(ControlMeasureLogData)
This updates existing log data information associated with data's type.
Status SetDateTime()
Date Time - Creation Time.
ControlPoint * parentPoint
Pointer to parent ControlPoint, may be null.
Status SetResidual(double sampResidual, double lineResidual)
Set the BundleAdjust Residual of the coordinate.
QString GetMeasureTypeString() const
Obtain a string representation of the MeasureType.
~ControlMeasure()
Free the memory allocated by a control.
Status SetCamera(Isis::Camera *camera)
Set pointer to camera associated with a measure.
double p_aprioriSample
The first identified location of the.
Status SetRejected(bool rejected)
Set "jigsaw" rejected flag for a measure.
static QVector< QString > GetMeasureDataNames()
Returns a list of all valid options to pass to GetMeasureData.
bool HasChooserName() const
Returns true if the choosername is not empty.
double GetDiameter() const
Return the diameter of the crater in pixels (0 implies no crater)
Status SetChooserName()
Set chooser name to a user who last changed the coordinate.
bool p_jigsawRejected
Status of measure for last bundle adjust iteration.
ControlMeasure()
Create a new control measure and initialize it to nulls and zeros.
bool p_editLock
If true do not edit anything in measure.
double GetResidualMagnitude() const
Return Residual magnitude.
QVector< ControlMeasureLogData > GetLogDataEntries() const
Return all of the log data for the measure.
Statistical and similar ControlMeasure associated information.
NumericLogDataType GetDataType() const
Get the data type associated with this log data.
NumericLogDataType
Please do not change existing values in this list except the size - it will break backwards compadibi...
bool IsValid() const
This tests if the log data is complete and valid.
const ControlMeasure * GetRefMeasure() const
Get the reference control measure.
QString GetId() const
Return the Id of the control point.
void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType modType, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the measureModified() signal in the parent network is called wheneve...
File name manipulation and expansion.
Definition FileName.h:100
QString name() const
Returns the name of the file excluding the path and the attributes in the file name.
Definition FileName.cpp:162
Isis exception class.
Definition IException.h:91
@ User
A type of error that could only have occurred due to a mistake on the user's part (e....
Definition IException.h:126
@ Programmer
This error is for when a programmer made an API call that was illegal.
Definition IException.h:146
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition IString.cpp:211
const double Null
Value for an Isis Null pixel.
bool IsSpecial(const double d)
Returns if the input pixel is special.
Namespace for the standard library.