26 #include <QStringList>
36 #include "ControlNetFileV0002.pb.h"
45 ControlMeasure::ControlMeasure() {
47 p_serialNumber =
new QString;
48 p_chooserName =
new QString;
49 p_dateTime =
new QString;
52 p_measureType = Candidate;
54 p_jigsawRejected =
false;
68 ControlMeasure::ControlMeasure(
72 p_serialNumber =
new QString(protoBuf.serialnumber().c_str());
73 p_chooserName =
new QString(protoBuf.choosername().c_str());
74 p_dateTime =
new QString(protoBuf.datetime().c_str());
77 switch (protoBuf.type()) {
78 case ControlPointFileEntryV0002_Measure::Candidate:
79 p_measureType = ControlMeasure::Candidate;
81 case ControlPointFileEntryV0002_Measure::Manual:
82 p_measureType = ControlMeasure::Manual;
84 case ControlPointFileEntryV0002_Measure::RegisteredPixel:
85 p_measureType = ControlMeasure::RegisteredPixel;
87 case ControlPointFileEntryV0002_Measure::RegisteredSubPixel:
88 p_measureType = ControlMeasure::RegisteredSubPixel;
92 p_editLock = protoBuf.editlock();
93 p_jigsawRejected = protoBuf.jigsawrejected();
94 p_ignore = protoBuf.ignore();
95 p_sample = protoBuf.sample();
96 p_line = protoBuf.line();
99 if (protoBuf.has_diameter())
100 p_diameter = protoBuf.diameter();
102 if (protoBuf.has_apriorisample())
103 p_aprioriSample = protoBuf.apriorisample();
105 if (protoBuf.has_aprioriline())
106 p_aprioriLine = protoBuf.aprioriline();
108 if (protoBuf.has_samplesigma())
109 p_sampleSigma = protoBuf.samplesigma();
111 if (protoBuf.has_linesigma())
112 p_lineSigma = protoBuf.linesigma();
114 if (protoBuf.has_sampleresidual())
115 p_sampleResidual = protoBuf.sampleresidual();
117 if (protoBuf.has_lineresidual())
118 p_lineResidual = protoBuf.lineresidual();
120 for (
int dataEntry = 0;
121 dataEntry < protoBuf.log_size();
124 p_loggedData->push_back(logEntry);
137 p_serialNumber =
new QString(*other.p_serialNumber);
139 p_dateTime =
new QString(*other.p_dateTime);
143 p_measureType = other.p_measureType;
146 p_ignore = other.p_ignore;
149 p_diameter = other.p_diameter;
156 p_camera = other.p_camera;
162 void ControlMeasure::InitializeToNull() {
163 p_serialNumber = NULL;
164 p_chooserName = NULL;
169 p_aprioriSample =
Null;
170 p_aprioriLine =
Null;
171 p_computedEphemerisTime =
Null;
172 p_sampleSigma =
Null;
174 p_sampleResidual =
Null;
175 p_lineResidual =
Null;
178 p_focalPlaneMeasuredX =
Null;
179 p_focalPlaneMeasuredY =
Null;
180 p_focalPlaneComputedX =
Null;
181 p_focalPlaneComputedY =
Null;
182 p_measuredEphemerisTime =
Null;
185 associatedCSN = NULL;
192 ControlMeasure::~ControlMeasure() {
193 if (p_serialNumber) {
194 delete p_serialNumber;
195 p_serialNumber = NULL;
199 delete p_chooserName;
200 p_chooserName = NULL;
213 associatedCSN = NULL;
217 ControlMeasure::Status ControlMeasure::SetAprioriLine(
double aprioriLine) {
219 return MeasureLocked;
221 p_aprioriLine = aprioriLine;
226 ControlMeasure::Status ControlMeasure::SetAprioriSample(
227 double aprioriSample) {
229 return MeasureLocked;
231 p_aprioriSample = aprioriSample;
250 ControlMeasure::Status ControlMeasure::SetCamera(
Isis::Camera *camera) {
268 ControlMeasure::Status ControlMeasure::SetCubeSerialNumber(QString newSerialNumber) {
270 return MeasureLocked;
271 *p_serialNumber = newSerialNumber;
277 ControlMeasure::Status ControlMeasure::SetChooserName() {
279 return MeasureLocked;
286 ControlMeasure::Status ControlMeasure::SetChooserName(QString name) {
288 return MeasureLocked;
289 *p_chooserName = name;
300 ControlMeasure::Status ControlMeasure::SetCoordinate(
double sample,
302 return SetCoordinate(sample, line, GetType());
313 ControlMeasure::Status ControlMeasure::SetCoordinate(
double sample,
316 return MeasureLocked;
326 ControlMeasure::Status ControlMeasure::SetDateTime() {
328 return MeasureLocked;
329 *p_dateTime = Application::DateTime();
335 ControlMeasure::Status ControlMeasure::SetDateTime(QString datetime) {
337 return MeasureLocked;
338 *p_dateTime = datetime;
351 ControlMeasure::Status ControlMeasure::SetDiameter(
double diameter) {
353 return MeasureLocked;
355 p_diameter = diameter;
360 ControlMeasure::Status ControlMeasure::SetEditLock(
bool editLock) {
361 p_editLock = editLock;
378 ControlMeasure::Status ControlMeasure::SetFocalPlaneMeasured(
double x,
380 p_focalPlaneMeasuredX = x;
381 p_focalPlaneMeasuredY = y;
398 ControlMeasure::Status ControlMeasure::SetFocalPlaneComputed(
double x,
400 p_focalPlaneComputedX = x;
401 p_focalPlaneComputedY = y;
422 ControlMeasure::Status ControlMeasure::SetRejected(
bool reject) {
424 p_jigsawRejected = reject;
429 ControlMeasure::Status ControlMeasure::SetIgnored(
bool newIgnoreStatus) {
431 return MeasureLocked;
433 bool oldStatus = p_ignore;
434 p_ignore = newIgnoreStatus;
437 if (oldStatus != p_ignore) {
439 if (parentPoint && !parentPoint->IsIgnored() && parentPoint->Parent()) {
442 cnet->emitNetworkStructureModified();
450 ControlMeasure::Status ControlMeasure::SetLineSigma(
double lineSigma) {
452 return MeasureLocked;
454 p_lineSigma = lineSigma;
472 ControlMeasure::Status ControlMeasure::SetResidual(
double sampResidual,
473 double lineResidual) {
475 p_sampleResidual = sampResidual;
476 p_lineResidual = lineResidual;
481 ControlMeasure::Status ControlMeasure::SetSampleSigma(
double sampleSigma) {
483 return MeasureLocked;
485 p_sampleSigma = sampleSigma;
491 ControlMeasure::Status ControlMeasure::SetType(
MeasureType type) {
493 return MeasureLocked;
495 p_measureType = type;
507 IString msg =
"Cannot set log data with invalid information stored in "
508 "the ControlMeasureLogData";
515 p_loggedData->append(data);
525 void ControlMeasure::DeleteLogData(
long dataType) {
526 for (
int i = p_loggedData->size()-1; i >= 0; i--) {
530 p_loggedData->remove(i);
539 QVariant ControlMeasure::GetLogValue(
long dataType)
const {
540 for (
int i = 0; i < p_loggedData->size(); i++) {
556 bool ControlMeasure::HasLogData(
long dataType)
const {
557 for (
int i = 0; i < p_loggedData->size(); i++) {
575 bool updated =
false;
577 for (
int i = 0; i < p_loggedData->size(); i++) {
581 (*p_loggedData)[i] = newLogData;
587 IString msg =
"Unable to update the log data for [" +
589 " control measure does not have log data for this value. Please use "
590 "SetLogData instead";
596 double ControlMeasure::GetAprioriLine()
const {
597 return p_aprioriLine;
601 double ControlMeasure::GetAprioriSample()
const {
602 return p_aprioriSample;
612 QString ControlMeasure::GetChooserName()
const {
613 if (*p_chooserName !=
"") {
614 return *p_chooserName;
617 return FileName(Application::Name()).name();
623 QString ControlMeasure::GetCubeSerialNumber()
const {
624 return *p_serialNumber;
629 QString ControlMeasure::GetDateTime()
const {
630 if (*p_dateTime !=
"") {
634 return Application::DateTime();
640 double ControlMeasure::GetDiameter()
const {
661 bool ControlMeasure::IsEditLocked()
const {
663 if (parentPoint != NULL && parentPoint->IsEditLocked() &&
664 this == parentPoint->GetRefMeasure())
670 double ControlMeasure::GetFocalPlaneComputedX()
const {
671 return p_focalPlaneComputedX;
675 double ControlMeasure::GetFocalPlaneComputedY()
const {
676 return p_focalPlaneComputedY;
680 double ControlMeasure::GetFocalPlaneMeasuredX()
const {
681 return p_focalPlaneMeasuredX;
685 double ControlMeasure::GetFocalPlaneMeasuredY()
const {
686 return p_focalPlaneMeasuredY;
690 bool ControlMeasure::IsIgnored()
const {
695 bool ControlMeasure::IsRejected()
const {
696 return p_jigsawRejected;
700 bool ControlMeasure::IsMeasured()
const {
701 return p_measureType != Candidate;
705 bool ControlMeasure::IsRegistered()
const {
706 return (p_measureType == RegisteredPixel ||
707 p_measureType == RegisteredSubPixel);
710 bool ControlMeasure::IsStatisticallyRelevant(DataField field)
const {
711 bool relevant =
false;
712 bool validField =
false;
718 case CubeSerialNumber:
721 case FocalPlaneMeasured:
722 case FocalPlaneComputed:
741 IString msg =
"Cannot test IsStatisticallyRelevant on Measure Data ["
742 + IString(field) +
"]";
743 throw IException(IException::Programmer, msg,
_FILEINFO_);
750 double ControlMeasure::GetLine()
const {
755 double ControlMeasure::GetLineResidual()
const {
756 return p_lineResidual;
760 double ControlMeasure::GetLineSigma()
const {
766 double ControlMeasure::GetResidualMagnitude()
const {
770 double dist = (p_lineResidual * p_lineResidual) +
771 (p_sampleResidual * p_sampleResidual);
777 double ControlMeasure::GetSample()
const {
782 double ControlMeasure::GetSampleResidual()
const {
783 return p_sampleResidual;
787 double ControlMeasure::GetSampleSigma()
const {
788 return p_sampleSigma;
792 ControlMeasure::MeasureType ControlMeasure::GetType()
const {
793 return p_measureType;
797 QString ControlMeasure::GetPointId()
const {
798 if (parentPoint == NULL) {
799 IString msg =
"Measure has no containing point";
800 throw IException(IException::User, msg,
_FILEINFO_);
803 return parentPoint->GetId();
807 double ControlMeasure::GetSampleShift()
const {
808 return (p_sample !=
Null && p_aprioriSample !=
Null) ?
809 p_sample - p_aprioriSample :
Null;
813 double ControlMeasure::GetLineShift()
const {
814 return (p_line !=
Null && p_aprioriLine !=
Null) ?
815 p_line - p_aprioriLine :
Null;
819 double ControlMeasure::GetPixelShift()
const {
820 double sampleShift = GetSampleShift();
821 double lineShift = GetLineShift();
822 return (sampleShift !=
Null && lineShift !=
Null) ?
823 sqrt(pow(GetSampleShift(), 2) + pow(GetLineShift(), 2)) :
Null;
827 ControlMeasureLogData ControlMeasure::GetLogData(
long dataType)
const {
829 ControlMeasureLogData::NumericLogDataType typedDataType =
830 (ControlMeasureLogData::NumericLogDataType)dataType;
832 while (foundIndex < p_loggedData->size()) {
833 const ControlMeasureLogData &logData = p_loggedData->at(foundIndex);
834 if (logData.GetDataType() == typedDataType) {
841 return ControlMeasureLogData(typedDataType);
846 double ControlMeasure::GetMeasureData(QString data)
const {
847 if (data ==
"SampleResidual")
848 return p_sampleResidual;
849 else if (data ==
"LineResidual")
850 return p_lineResidual;
851 else if (data ==
"Type")
852 return p_measureType;
853 else if (data ==
"IsMeasured")
855 else if (data ==
"IsRegistered")
856 return IsRegistered();
857 else if (data ==
"Ignore")
860 IString msg = data +
" passed to GetMeasureData but is invalid";
870 names.push_back(
"SampleResidual");
871 names.push_back(
"LineResidual");
872 names.push_back(
"Type");
873 names.push_back(
"IsMeasured");
874 names.push_back(
"IsRegistered");
875 names.push_back(
"Ignore");
892 qsl <<
"AprioriLine" << QString::number(p_aprioriLine);
896 qsl <<
"AprioriSample" << QString::number(p_aprioriSample);
900 qsl <<
"ChooserName" << *p_chooserName;
904 qsl <<
"CubeSerialNumber" << *p_serialNumber;
908 qsl <<
"DateTime" << *p_dateTime;
912 qsl <<
"Line" << QString::number(p_line);
916 qsl <<
"LineResidual" << QString::number(p_lineResidual);
920 qsl <<
"LineSigma" << QString::number(p_lineSigma);
924 qsl <<
"Sample" << QString::number(p_sample);
928 qsl <<
"SampleResidual" << QString::number(p_sampleResidual);
932 qsl <<
"SampleSigma" << QString::number(p_sampleSigma);
936 qsl <<
"ResidualMagnitude" << QString::number(GetResidualMagnitude());
940 qsl <<
"MeasureType" << GetMeasureTypeString();
956 err +=
IString(str) +
"] can not be converted to a MeasureType";
960 if (str ==
"candidate")
961 measureType = ControlMeasure::Candidate;
962 else if (str ==
"manual")
963 measureType = ControlMeasure::Manual;
964 else if (str ==
"registeredpixel")
965 measureType = ControlMeasure::RegisteredPixel;
966 else if (str ==
"registeredsubpixel")
967 measureType = ControlMeasure::RegisteredSubPixel;
990 case ControlMeasure::Candidate:
991 sPrintable =
"Candidate";
994 case ControlMeasure::Manual:
995 sPrintable =
"Manual";
998 case ControlMeasure::RegisteredPixel:
999 sPrintable =
"RegisteredPixel";
1002 case ControlMeasure::RegisteredSubPixel:
1003 sPrintable =
"RegisteredSubPixel";
1007 if (sPrintable ==
"") {
1008 QString msg =
"Measure type [" +
toString(type) +
"] cannot be converted "
1021 QString ControlMeasure::GetMeasureTypeString()
const {
1022 return MeasureTypeToString(p_measureType);
1039 if (p_serialNumber) {
1040 delete p_serialNumber;
1041 p_serialNumber = NULL;
1043 if (p_chooserName) {
1044 delete p_chooserName;
1045 p_chooserName = NULL;
1052 delete p_loggedData;
1053 p_loggedData = NULL;
1056 p_serialNumber =
new QString;
1057 p_chooserName =
new QString;
1058 p_dateTime =
new QString;
1061 *p_serialNumber = *other.p_serialNumber;
1063 *p_dateTime = *other.p_dateTime;
1064 *p_loggedData = *other.p_loggedData;
1066 p_measureType = other.p_measureType;
1070 SetIgnored(other.p_ignore);
1074 p_diameter = other.p_diameter;
1081 p_camera = other.p_camera;
1082 p_focalPlaneMeasuredX = other.p_focalPlaneMeasuredX;
1083 p_focalPlaneMeasuredY = other.p_focalPlaneMeasuredY;
1084 p_focalPlaneComputedX = other.p_focalPlaneComputedX;
1085 p_focalPlaneComputedY = other.p_focalPlaneComputedY;
1102 return !(*
this == pMeasure);
1123 return pMeasure.p_measureType == p_measureType &&
1124 *pMeasure.p_serialNumber == *p_serialNumber &&
1126 *pMeasure.p_dateTime == *p_dateTime &&
1128 pMeasure.p_ignore == p_ignore &&
1131 pMeasure.
p_line == p_line &&
1132 pMeasure.p_diameter == p_diameter &&
1135 pMeasure.p_computedEphemerisTime == p_computedEphemerisTime &&
1140 pMeasure.p_focalPlaneMeasuredX == p_focalPlaneMeasuredX &&
1141 pMeasure.p_focalPlaneMeasuredY == p_focalPlaneMeasuredY &&
1142 pMeasure.p_focalPlaneComputedX == p_focalPlaneComputedX &&
1143 pMeasure.p_focalPlaneComputedY == p_focalPlaneComputedY &&
1144 pMeasure.p_measuredEphemerisTime == p_measuredEphemerisTime;
1151 protoBufMeasure.set_serialnumber(GetCubeSerialNumber().toAscii().data());
1152 switch (GetType()) {
1153 case ControlMeasure::Candidate:
1154 protoBufMeasure.set_type(ControlPointFileEntryV0002_Measure::Candidate);
1156 case ControlMeasure::Manual:
1157 protoBufMeasure.set_type(ControlPointFileEntryV0002_Measure::Manual);
1159 case ControlMeasure::RegisteredPixel:
1160 protoBufMeasure.set_type(ControlPointFileEntryV0002_Measure::RegisteredPixel);
1162 case ControlMeasure::RegisteredSubPixel:
1163 protoBufMeasure.set_type(ControlPointFileEntryV0002_Measure::RegisteredSubPixel);
1167 if (GetChooserName() !=
"") {
1168 protoBufMeasure.set_choosername(GetChooserName().toAscii().data());
1170 if (GetDateTime() !=
"") {
1171 protoBufMeasure.set_datetime(GetDateTime().toAscii().data());
1174 protoBufMeasure.set_editlock(
true);
1177 protoBufMeasure.set_ignore(
true);
1180 protoBufMeasure.set_jigsawrejected(
true);
1182 if (GetSample() != 0.)
1183 protoBufMeasure.set_sample(GetSample());
1186 protoBufMeasure.set_line(GetLine());
1189 protoBufMeasure.set_sampleresidual(GetSampleResidual());
1192 protoBufMeasure.set_lineresidual(GetLineResidual());
1195 protoBufMeasure.set_diameter(GetDiameter());
1198 protoBufMeasure.set_apriorisample(GetAprioriSample());
1201 protoBufMeasure.set_aprioriline(GetAprioriLine());
1204 protoBufMeasure.set_samplesigma(GetSampleSigma());
1207 protoBufMeasure.set_linesigma(GetLineSigma());
1209 ControlMeasureLogData logEntry;
1210 foreach(logEntry, *p_loggedData) {
1211 *protoBufMeasure.add_log() = logEntry.ToProtocolBuffer();
1214 return protoBufMeasure;
1218 void ControlMeasure::MeasureModified() {
1220 *p_chooserName =
"";