1 #include "JigsawSetupDialog.h"
8 #include <QStandardItemModel>
18 #include "ui_JigsawSetupDialog.h"
58 JigsawSetupDialog::JigsawSetupDialog(
Project *project,
bool useLastSettings,
bool readOnly,
80 m_ui->JigsawSetup->setCurrentIndex(0);
89 for (
int i = 0; i < project->controls().size(); i++) {
91 for (
int j = 0; j < conlist->size(); j++) {
92 Control *control = conlist->at(j);
94 QVariant v = qVariantFromValue((
void*)control);
101 if (useLastSettings && bundleSolutionInfo.size() > 0) {
102 BundleSettingsQsp lastBundleSettings = (bundleSolutionInfo.last())->bundleSettings();
103 fillFromSettings(lastBundleSettings);
107 m_ui->spkSolveDegreeSpinBox_2->setValue(-1);
110 tableHeaders <<
"coefficients" <<
"a priori sigma" <<
"units";
111 m_ui->positionAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
113 m_ui->positionAprioriSigmaTable->setColumnWidth(0, fontMetrics().width(tableHeaders.at(0)));
114 m_ui->positionAprioriSigmaTable->setColumnWidth(1, fontMetrics().width(tableHeaders.at(1)));
115 m_ui->positionAprioriSigmaTable->setColumnWidth(2, fontMetrics().width(tableHeaders.at(2)));
117 m_ui->pointingAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
124 for (
int i = 0; i < project->targetBodies().size(); i++) {
127 QVariant v = qVariantFromValue((
void*)target.data());
129 QString name = target->displayProperties()->displayName();
132 m_ui->targetBodyComboBox->addItem(QIcon(
":moon"), name, v);
133 else if (name ==
"Enceladus")
134 m_ui->targetBodyComboBox->addItem(QIcon(
":enceladus"), name, v);
135 else if (name ==
"Mars")
136 m_ui->targetBodyComboBox->addItem(QIcon(
":mars"), name, v);
137 else if (name ==
"Titan")
138 m_ui->targetBodyComboBox->addItem(QIcon(
":titan"), name, v);
140 m_ui->targetBodyComboBox->addItem(QIcon(
":moonPhase"), name, v);
143 m_ui->radiiButtonGroup->setId(m_ui->noneRadiiRadioButton,0);
144 m_ui->radiiButtonGroup->setId(m_ui->triaxialRadiiRadioButton,1);
145 m_ui->radiiButtonGroup->setId(m_ui->meanRadiusRadioButton,2);
146 m_ui->noneRadiiRadioButton->setChecked(
true);
149 QDoubleValidator *sigmaValidator =
new QDoubleValidator(0.0, 1.0e+10, 8,
this);
150 sigmaValidator->setNotation(QDoubleValidator::ScientificNotation);
153 QDoubleValidator *raValidator =
new QDoubleValidator(0.0, 360.0, 8,
this);
154 raValidator->setNotation(QDoubleValidator::StandardNotation);
155 m_ui->rightAscensionLineEdit->setValidator(raValidator);
156 m_ui->rightAscensionSigmaLineEdit->setValidator(sigmaValidator);
158 m_ui->rightAscensionVelocityLineEdit->setValidator(raValidator);
159 m_ui->rightAscensionVelocitySigmaLineEdit->setValidator(sigmaValidator);
162 QDoubleValidator *decValidator =
new QDoubleValidator(-90.0, 90.0, 8,
163 m_ui->declinationLineEdit);
164 decValidator->setNotation(QDoubleValidator::StandardNotation);
165 m_ui->declinationLineEdit->setValidator(decValidator);
166 m_ui->declinationSigmaLineEdit->setValidator(sigmaValidator);
168 m_ui->declinationVelocityLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
169 m_ui->declinationVelocityLineEdit));
170 m_ui->declinationVelocitySigmaLineEdit->setValidator(sigmaValidator);
172 m_ui->primeMeridianOffsetLineEdit->setValidator(raValidator);
173 m_ui->primeMeridianOffsetSigmaLineEdit->setValidator(sigmaValidator);
176 m_ui->spinRateLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
177 m_ui->spinRateLineEdit));
178 m_ui->spinRateSigmaLineEdit->setValidator(sigmaValidator);
180 m_ui->aRadiusLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
181 m_ui->aRadiusLineEdit));
182 m_ui->aRadiusSigmaLineEdit->setValidator(sigmaValidator);
184 m_ui->bRadiusLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
185 m_ui->bRadiusLineEdit));
186 m_ui->bRadiusSigmaLineEdit->setValidator(sigmaValidator);
188 m_ui->cRadiusLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
189 m_ui->cRadiusLineEdit));
190 m_ui->cRadiusSigmaLineEdit->setValidator(sigmaValidator);
192 m_ui->meanRadiusLineEdit->setValidator(
new QDoubleValidator(0.0, 1.0e+10, 8,
193 m_ui->meanRadiusLineEdit));
194 m_ui->meanRadiusSigmaLineEdit->setValidator(sigmaValidator);
199 connect(m_ui->radiiButtonGroup, SIGNAL(buttonClicked(
int)),
200 this, SLOT(on_radiiButtonGroupClicked(
int)));
201 connect(m_ui->aRadiusLineEdit, SIGNAL(textChanged(QString)), SLOT(slotTextChanged(QString)));
202 connect(m_ui->aRadiusLineEdit, SIGNAL(returnPressed()), SLOT(checkIsValid()));
203 connect(m_ui->aRadiusLineEdit, SIGNAL(editingFinished()), SLOT(checkIsValid()));
204 connect(m_ui->aRadiusLineEdit, SIGNAL(textChanged(QString)), SLOT(on_aRadiusLineEdit_textChanged(QString)));
208 JigsawSetupDialog::~JigsawSetupDialog() {
218 void JigsawSetupDialog::on_radiusCheckBox_toggled(
bool checked) {
219 m_ui->pointRadiusSigmaLabel->setEnabled(checked);
220 m_ui->pointRadiusSigmaLineEdit->setEnabled(checked);
221 m_ui->pointRadiusSigmaUnitsLabel->setEnabled(checked);
232 void JigsawSetupDialog::on_positionComboBox_currentIndexChanged(
int index) {
236 bool solvePosition = (bool) (index > 0);
237 bool solveVelocity = (bool) (index > 1);
238 bool solveAcceleration = (bool) (index > 2);
241 m_ui->hermiteSplineCheckBox->setEnabled(solvePosition);
242 m_ui->positionSigmaLabel->setEnabled(solvePosition);
243 m_ui->positionSigmaLineEdit->setEnabled(solvePosition);
244 m_ui->positionSigmaUnitsLabel->setEnabled(solvePosition);
246 m_ui->velocitySigmaLabel->setEnabled(solveVelocity);
247 m_ui->velocitySigmaLineEdit->setEnabled(solveVelocity);
248 m_ui->velocitySigmaUnitsLabel->setEnabled(solveVelocity);
250 m_ui->accelerationSigmaLabel->setEnabled(solveAcceleration);
251 m_ui->accelerationSigmaLineEdit->setEnabled(solveAcceleration);
252 m_ui->accelerationSigmaUnitsLabel->setEnabled(solveAcceleration);
262 void JigsawSetupDialog::on_pointingComboBox_currentIndexChanged(
int index) {
266 bool solveAngles = (bool) (index == 0 || index > 1);
267 bool solveAngularVelocity = (bool) (index > 1);
268 bool solveAngularAcceleration = (bool) (index > 2);
271 m_ui->twistCheckBox->setEnabled(solveAngles);
272 m_ui->fitOverPointingCheckBox->setEnabled(solveAngles);
279 m_ui->pointingAnglesSigmaLabel->setEnabled(solveAngles);
280 m_ui->pointingAnglesSigmaLineEdit->setEnabled(solveAngles);
281 m_ui->pointingAnglesSigmaUnitsLabel->setEnabled(solveAngles);
283 m_ui->pointingAngularVelocitySigmaLabel->setEnabled(solveAngularVelocity);
284 m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(solveAngularVelocity);
285 m_ui->pointingAngularVelocitySigmaUnitsLabel->setEnabled(solveAngularVelocity);
287 m_ui->pointingAngularAccelerationSigmaLabel->setEnabled(solveAngularAcceleration);
288 m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(solveAngularAcceleration);
289 m_ui->pointingAngularAccelerationSigmaUnitsLabel->setEnabled(solveAngularAcceleration);
294 void JigsawSetupDialog::on_maximumLikelihoodModel1ComboBox_currentIndexChanged(
int index) {
296 bool model1Selected = (bool) (index > 0);
297 m_ui->maximumLikelihoodModel1QuantileLabel->setEnabled(model1Selected);
298 m_ui->maximumLikelihoodModel1QuantileLineEdit->setEnabled(model1Selected);
299 m_ui->maximumLikelihoodModel2Label->setEnabled(model1Selected);
300 m_ui->maximumLikelihoodModel2ComboBox->setEnabled(model1Selected);
305 void JigsawSetupDialog::on_maximumLikelihoodModel2ComboBox_currentIndexChanged(
int index) {
307 bool model2Selected = (bool)(index > 0);
308 m_ui->maximumLikelihoodModel2QuantileLabel->setEnabled(model2Selected);
309 m_ui->maximumLikelihoodModel2QuantileLineEdit->setEnabled(model2Selected);
310 m_ui->maximumLikelihoodModel3Label->setEnabled(model2Selected);
311 m_ui->maximumLikelihoodModel3ComboBox->setEnabled(model2Selected);
316 void JigsawSetupDialog::on_maximumLikelihoodModel3ComboBox_currentIndexChanged(
int index) {
318 bool model3Selected = (bool)(index > 0);
319 m_ui->maximumLikelihoodModel3QuantileLabel->setEnabled(model3Selected);
320 m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(model3Selected);
330 m_ui->observationModeCheckBox->setChecked(settings->solveObservationMode());
331 m_ui->radiusCheckBox->setChecked(settings->solveRadius());
332 m_ui->updateCubeLabelCheckBox->setChecked(settings->updateCubeLabel());
333 m_ui->errorPropagationCheckBox->setChecked(settings->errorPropagation());
334 m_ui->outlierRejectionCheckBox->setChecked(settings->outlierRejection());
335 m_ui->outlierRejectionMultiplierLineEdit->setText(
toString(settings->outlierRejectionMultiplier()));
336 m_ui->sigma0ThresholdLineEdit->setText(
toString(settings->convergenceCriteriaThreshold()));
337 m_ui->maximumIterationsLineEdit->setText(
toString(settings->convergenceCriteriaMaximumIterations()));
342 m_ui->spkDegreeSpinBox->setValue(observationSolveSettings.
spkDegree());
343 m_ui->spkSolveDegreeSpinBox->setValue(observationSolveSettings.
spkSolveDegree());
347 if (pointingOption == 0) {
350 if (pointingOption == 1) {
354 if ( pointingOption > 0 ) {
355 m_ui->twistCheckBox->setEnabled(
true);
358 m_ui->twistCheckBox->setEnabled(
true);
361 m_ui->pointingComboBox->setCurrentIndex(pointingOption);
365 m_ui->twistCheckBox->setChecked(observationSolveSettings.
solveTwist());
367 m_ui->ckDegreeSpinBox->setValue(observationSolveSettings.
ckDegree());
368 m_ui->ckSolveDegreeSpinBox->setValue(observationSolveSettings.
ckSolveDegree());
371 if ( !
IsNullPixel(settings->globalLatitudeAprioriSigma()) ) {
372 m_ui->pointLatitudeSigmaLineEdit->setText(
toString(settings->globalLatitudeAprioriSigma()));
374 if ( !
IsNullPixel(settings->globalLongitudeAprioriSigma()) ) {
375 m_ui->pointLongitudeSigmaLineEdit->setText(
toString(settings->globalLongitudeAprioriSigma()));
377 if ( !
IsNullPixel(settings->globalRadiusAprioriSigma()) ) {
378 m_ui->pointRadiusSigmaLineEdit->setText(
toString(settings->globalRadiusAprioriSigma()));
383 if ( aprioriPositionSigmas.size() > 0 && !
IsNullPixel(aprioriPositionSigmas[0]) ) {
384 m_ui->positionSigmaLineEdit->setText(
toString(aprioriPositionSigmas[0]));
387 if ( aprioriPositionSigmas.size() > 1 && !
IsNullPixel(aprioriPositionSigmas[1]) ) {
388 m_ui->velocitySigmaLineEdit->setText(
toString(aprioriPositionSigmas[1]));
391 if ( aprioriPositionSigmas.size() > 2 && !
IsNullPixel(aprioriPositionSigmas[2]) ) {
392 m_ui->accelerationSigmaLineEdit->setText(
toString(aprioriPositionSigmas[2]));
397 if ( aprioriPointingSigmas.size() > 0 && !
IsNullPixel(aprioriPointingSigmas[0]) ) {
398 m_ui->pointingAnglesSigmaLineEdit->setText(
toString(aprioriPointingSigmas[0]));
401 if ( aprioriPointingSigmas.size() > 1 && !
IsNullPixel(aprioriPointingSigmas[1]) ) {
402 m_ui->pointingAngularVelocitySigmaLineEdit->setText(
toString(aprioriPointingSigmas[1]));
405 if ( aprioriPointingSigmas.size() > 2 && !
IsNullPixel(aprioriPointingSigmas[2]) ) {
406 m_ui->pointingAngularAccelerationSigmaLineEdit->setText(
toString(aprioriPointingSigmas[2]));
423 settings->setValidateNetwork(
true);
426 double latitudeSigma = -1.0;
427 double longitudeSigma = -1.0;
428 double radiusSigma = -1.0;
429 if (m_ui->pointLatitudeSigmaLineEdit->isModified()) {
430 latitudeSigma = m_ui->pointLatitudeSigmaLineEdit->text().toDouble();
432 if (m_ui->pointLongitudeSigmaLineEdit->isModified()) {
433 longitudeSigma = m_ui->pointLongitudeSigmaLineEdit->text().toDouble();
435 if (m_ui->pointRadiusSigmaLineEdit->isModified()) {
436 radiusSigma = m_ui->pointRadiusSigmaLineEdit->text().toDouble();
438 settings->setSolveOptions(m_ui->observationModeCheckBox->isChecked(),
439 m_ui->updateCubeLabelCheckBox->isChecked(),
440 m_ui->errorPropagationCheckBox->isChecked(),
441 m_ui->radiusCheckBox->isChecked(),
445 settings->setOutlierRejection(m_ui->outlierRejectionCheckBox->isChecked(),
446 m_ui->outlierRejectionMultiplierLineEdit->text().toDouble());
455 double anglesSigma = -1.0;
456 double angularVelocitySigma = -1.0;
457 double angularAccelerationSigma = -1.0;
459 if (m_ui->pointingAnglesSigmaLineEdit->isModified()) {
460 anglesSigma = m_ui->pointingAnglesSigmaLineEdit->text().toDouble();
462 if (m_ui->pointingAngularVelocitySigmaLineEdit->isModified()) {
463 angularVelocitySigma = m_ui->pointingAngularVelocitySigmaLineEdit->text().toDouble();
465 if (m_ui->pointingAngularAccelerationSigmaLineEdit->isModified()) {
466 angularAccelerationSigma = m_ui->pointingAngularAccelerationSigmaLineEdit->text().toDouble();
469 BundleObservationSolveSettings::stringToInstrumentPointingSolveOption(m_ui->pointingComboBox->currentText()),
470 m_ui->twistCheckBox->isChecked(),
471 m_ui->ckDegreeSpinBox->text().toInt(),
472 m_ui->ckSolveDegreeSpinBox->text().toInt(),
473 m_ui->fitOverPointingCheckBox->isChecked(),
474 anglesSigma, angularVelocitySigma, angularAccelerationSigma);
477 double positionSigma = -1.0;
478 double velocitySigma = -1.0;
479 double accelerationSigma = -1.0;
480 if (m_ui->positionSigmaLineEdit->isModified()) {
481 positionSigma = m_ui->positionSigmaLineEdit->text().toDouble();
483 if (m_ui->velocitySigmaLineEdit->isModified()) {
484 velocitySigma = m_ui->velocitySigmaLineEdit->text().toDouble();
486 if (m_ui->accelerationSigmaLineEdit->isModified()) {
487 accelerationSigma = m_ui->accelerationSigmaLineEdit->text().toDouble();
490 BundleObservationSolveSettings::stringToInstrumentPositionSolveOption(m_ui->positionComboBox->currentText()),
491 m_ui->spkDegreeSpinBox->text().toInt(),
492 m_ui->spkSolveDegreeSpinBox->text().toInt(),
493 m_ui->hermiteSplineCheckBox->isChecked(),
494 positionSigma, velocitySigma, accelerationSigma);
496 observationSolveSettingsList.append(observationSolveSettings);
497 settings->setObservationSolveOptions(observationSolveSettingsList);
499 settings->setConvergenceCriteria(BundleSettings::Sigma0,
500 m_ui->sigma0ThresholdLineEdit->text().toDouble(),
501 m_ui->maximumIterationsLineEdit->text().toInt());
504 if (m_ui->maximumLikelihoodModel1ComboBox->currentText().compare(
"NONE") != 0) {
506 settings->addMaximumLikelihoodEstimatorModel(
507 MaximumLikelihoodWFunctions::stringToModel(
508 m_ui->maximumLikelihoodModel1ComboBox->currentText()),
509 m_ui->maximumLikelihoodModel1QuantileLineEdit->text().toDouble());
511 if (m_ui->maximumLikelihoodModel2ComboBox->currentText().compare(
"NONE") != 0) {
513 settings->addMaximumLikelihoodEstimatorModel(
514 MaximumLikelihoodWFunctions::stringToModel(
515 m_ui->maximumLikelihoodModel2ComboBox->currentText()),
516 m_ui->maximumLikelihoodModel2QuantileLineEdit->text().toDouble());
518 if (m_ui->maximumLikelihoodModel3ComboBox->currentText().compare(
"NONE") != 0) {
520 settings->addMaximumLikelihoodEstimatorModel(
521 MaximumLikelihoodWFunctions::stringToModel(
522 m_ui->maximumLikelihoodModel3ComboBox->currentText()),
523 m_ui->maximumLikelihoodModel3QuantileLineEdit->text().toDouble());
530 if (m_ui->poleRaCheckBox->isChecked() ||
531 m_ui->poleRaVelocityCheckBox->isChecked() ||
532 m_ui->poleDecCheckBox->isChecked() ||
533 m_ui->poleDecVelocityCheckBox->isChecked() ||
534 m_ui->primeMeridianOffsetCheckBox->isChecked() ||
535 m_ui->spinRateCheckBox->isChecked() ||
536 !m_ui->noneRadiiRadioButton->isChecked()) {
542 if (m_ui->meanRadiusRadioButton->isChecked())
544 else if (m_ui->triaxialRadiiRadioButton->isChecked())
547 std::set<int> targetParameterSolveCodes;
548 if (m_ui->poleRaCheckBox->isChecked())
549 targetParameterSolveCodes.insert(BundleTargetBody::PoleRA);
550 if (m_ui->poleRaVelocityCheckBox->isChecked())
551 targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleRA);
552 if (m_ui->poleDecCheckBox->isChecked())
553 targetParameterSolveCodes.insert(BundleTargetBody::PoleDec);
554 if (m_ui->poleDecVelocityCheckBox->isChecked())
555 targetParameterSolveCodes.insert(BundleTargetBody::VelocityPoleDec);
556 if (m_ui->primeMeridianOffsetCheckBox->isChecked())
557 targetParameterSolveCodes.insert(BundleTargetBody::PM);
558 if (m_ui->spinRateCheckBox->isChecked())
559 targetParameterSolveCodes.insert(BundleTargetBody::VelocityPM);
560 if (m_ui->triaxialRadiiRadioButton->isChecked()) {
561 targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusA);
562 targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusB);
563 targetParameterSolveCodes.insert(BundleTargetBody::TriaxialRadiusC);
565 else if (m_ui->meanRadiusRadioButton->isChecked())
566 targetParameterSolveCodes.insert(BundleTargetBody::MeanRadius);
568 double poleRASigma = -1.0;
569 double poleRAVelocitySigma = -1.0;
571 double poleDecSigma = -1.0;
572 double poleDecVelocitySigma = -1.0;
574 double pmSigma = -1.0;
575 double pmVelocitySigma = -1.0;
577 double aRadiusSigma = 0.0;
578 double bRadiusSigma = 0.0;
579 double cRadiusSigma = 0.0;
580 double meanRadiusSigma = 0.0;
582 if (m_ui->rightAscensionSigmaLineEdit->isModified())
583 poleRASigma = m_ui->rightAscensionSigmaLineEdit->text().toDouble();
584 if (m_ui->rightAscensionVelocityLineEdit->isModified())
585 poleRAVelocitySigma = m_ui->rightAscensionVelocityLineEdit->text().toDouble();
588 if (m_ui->declinationSigmaLineEdit->isModified())
589 poleDecSigma = m_ui->declinationSigmaLineEdit->text().toDouble();
590 if (m_ui->declinationVelocitySigmaLineEdit->isModified())
591 poleDecVelocitySigma = m_ui->declinationVelocitySigmaLineEdit->text().toDouble();
594 if (m_ui->primeMeridianOffsetSigmaLineEdit->isModified())
595 pmSigma = m_ui->primeMeridianOffsetSigmaLineEdit->text().toDouble();
596 if (m_ui->spinRateSigmaLineEdit->isModified())
597 pmVelocitySigma = m_ui->spinRateSigmaLineEdit->text().toDouble();
600 if (m_ui->aRadiusSigmaLineEdit->isModified())
601 aRadiusSigma = m_ui->aRadiusSigmaLineEdit->text().toDouble();
602 if (m_ui->bRadiusSigmaLineEdit->isModified())
603 bRadiusSigma = m_ui->bRadiusSigmaLineEdit->text().toDouble();
604 if (m_ui->cRadiusSigmaLineEdit->isModified())
605 cRadiusSigma = m_ui->cRadiusSigmaLineEdit->text().toDouble();
606 if (m_ui->meanRadiusSigmaLineEdit->isModified())
607 meanRadiusSigma = m_ui->meanRadiusSigmaLineEdit->text().toDouble();
609 bundleTargetBody->setSolveSettings(targetParameterSolveCodes,
610 Angle(m_ui->rightAscensionLineEdit->text().toDouble(), Angle::Degrees),
611 Angle(poleRASigma, Angle::Degrees),
612 Angle(m_ui->rightAscensionVelocityLineEdit->text().toDouble(), Angle::Degrees),
613 Angle(poleRAVelocitySigma, Angle::Degrees),
614 Angle(m_ui->declinationLineEdit->text().toDouble(), Angle::Degrees),
615 Angle(poleDecSigma, Angle::Degrees),
616 Angle(m_ui->declinationVelocityLineEdit->text().toDouble(), Angle::Degrees),
617 Angle(poleDecVelocitySigma, Angle::Degrees),
618 Angle(m_ui->primeMeridianOffsetLineEdit->text().toDouble(), Angle::Degrees),
619 Angle(pmSigma, Angle::Degrees),
620 Angle(m_ui->spinRateLineEdit->text().toDouble(), Angle::Degrees),
621 Angle(pmVelocitySigma, Angle::Degrees),
623 Distance(m_ui->aRadiusLineEdit->text().toDouble(), Distance::Kilometers),
624 Distance(aRadiusSigma, Distance::Meters),
625 Distance(m_ui->bRadiusLineEdit->text().toDouble(), Distance::Kilometers),
626 Distance(bRadiusSigma, Distance::Meters),
627 Distance(m_ui->cRadiusLineEdit->text().toDouble(), Distance::Kilometers),
628 Distance(cRadiusSigma, Distance::Meters),
629 Distance(m_ui->meanRadiusLineEdit->text().toDouble(), Distance::Kilometers),
630 Distance(meanRadiusSigma, Distance::Meters));
632 settings->setBundleTargetBody(bundleTargetBody);
642 Control *JigsawSetupDialog::selectedControl() {
644 int nIndex = m_ui->controlNetworkComboBox->currentIndex();
646 = (
Control *)(m_ui->controlNetworkComboBox->itemData(nIndex).value<
void * >());
647 return selectedControl;
652 QString *JigsawSetupDialog::selectedControlName() {
654 QString *name =
new QString(m_ui->controlNetworkComboBox->currentText());
660 void JigsawSetupDialog::makeReadOnly() {
661 m_ui->controlNetworkComboBox->setEnabled(
false);
662 m_ui->observationModeCheckBox->setEnabled(
false);
663 m_ui->radiusCheckBox->setEnabled(
false);
664 m_ui->updateCubeLabelCheckBox->setEnabled(
false);
665 m_ui->errorPropagationCheckBox->setEnabled(
false);
666 m_ui->outlierRejectionCheckBox->setEnabled(
false);
667 m_ui->outlierRejectionMultiplierLineEdit->setEnabled(
false);
668 m_ui->sigma0ThresholdLineEdit->setEnabled(
false);
669 m_ui->maximumIterationsLineEdit->setEnabled(
false);
670 m_ui->positionComboBox->setEnabled(
false);
671 m_ui->hermiteSplineCheckBox->setEnabled(
false);
672 m_ui->spkDegreeSpinBox->setEnabled(
false);
673 m_ui->spkSolveDegreeSpinBox->setEnabled(
false);
674 m_ui->twistCheckBox->setEnabled(
false);
675 m_ui->pointingComboBox->setEnabled(
false);
676 m_ui->fitOverPointingCheckBox->setEnabled(
false);
677 m_ui->ckDegreeSpinBox->setEnabled(
false);
678 m_ui->ckSolveDegreeSpinBox->setEnabled(
false);
681 m_ui->pointLatitudeSigmaLineEdit->setEnabled(
false);
682 m_ui->pointLongitudeSigmaLineEdit->setEnabled(
false);
683 m_ui->pointRadiusSigmaLineEdit->setEnabled(
false);
684 m_ui->positionSigmaLineEdit->setEnabled(
false);
685 m_ui->velocitySigmaLineEdit->setEnabled(
false);
686 m_ui->accelerationSigmaLineEdit->setEnabled(
false);
687 m_ui->pointingAnglesSigmaLineEdit->setEnabled(
false);
688 m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(
false);
689 m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(
false);
696 m_ui->targetBodyComboBox->setEnabled(
false);
697 m_ui->poleRaCheckBox->setEnabled(
false);
698 m_ui->rightAscensionLineEdit->setEnabled(
false);
699 m_ui->rightAscensionSigmaLineEdit->setEnabled(
false);
700 m_ui->rightAscensionVelocityLineEdit->setEnabled(
false);
701 m_ui->rightAscensionVelocitySigmaLineEdit->setEnabled(
false);
702 m_ui->poleDecCheckBox->setEnabled(
false);
703 m_ui->declinationLineEdit->setEnabled(
false);
704 m_ui->declinationSigmaLineEdit->setEnabled(
false);
705 m_ui->declinationVelocityLineEdit->setEnabled(
false);
706 m_ui->declinationVelocitySigmaLineEdit->setEnabled(
false);
707 m_ui->primeMeridianOffsetCheckBox->setEnabled(
false);
708 m_ui->primeMeridianOffsetLineEdit->setEnabled(
false);
709 m_ui->primeMeridianOffsetSigmaLineEdit->setEnabled(
false);
710 m_ui->spinRateCheckBox->setEnabled(
false);
711 m_ui->spinRateLineEdit->setEnabled(
false);
712 m_ui->spinRateSigmaLineEdit->setEnabled(
false);
713 m_ui->radiiGroupBox->setEnabled(
false);
714 m_ui->aRadiusLineEdit->setEnabled(
false);
715 m_ui->aRadiusSigmaLineEdit->setEnabled(
false);
716 m_ui->bRadiusLineEdit->setEnabled(
false);
717 m_ui->bRadiusSigmaLineEdit->setEnabled(
false);
718 m_ui->cRadiusLineEdit->setEnabled(
false);
719 m_ui->cRadiusSigmaLineEdit->setEnabled(
false);
720 m_ui->meanRadiusLineEdit->setEnabled(
false);
721 m_ui->meanRadiusSigmaLineEdit->setEnabled(
false);
727 void Isis::JigsawSetupDialog::on_poleRaCheckBox_stateChanged(
int arg1) {
729 m_ui->rightAscensionLineEdit->setEnabled(
true);
730 m_ui->rightAscensionSigmaLineEdit->setEnabled(
true);
733 m_ui->rightAscensionLineEdit->setEnabled(
false);
734 m_ui->rightAscensionSigmaLineEdit->setEnabled(
false);
741 void Isis::JigsawSetupDialog::on_poleRaVelocityCheckBox_stateChanged(
int arg1) {
743 m_ui->rightAscensionVelocityLineEdit->setEnabled(
true);
744 m_ui->rightAscensionVelocitySigmaLineEdit->setEnabled(
true);
747 m_ui->rightAscensionVelocityLineEdit->setEnabled(
false);
748 m_ui->rightAscensionVelocitySigmaLineEdit->setEnabled(
false);
755 void Isis::JigsawSetupDialog::on_poleDecCheckBox_stateChanged(
int arg1) {
757 m_ui->declinationLineEdit->setEnabled(
true);
758 m_ui->declinationSigmaLineEdit->setEnabled(
true);
761 m_ui->declinationLineEdit->setEnabled(
false);
762 m_ui->declinationSigmaLineEdit->setEnabled(
false);
769 void Isis::JigsawSetupDialog::on_poleDecVelocityCheckBox_stateChanged(
int arg1) {
771 m_ui->declinationVelocityLineEdit->setEnabled(
true);
772 m_ui->declinationVelocitySigmaLineEdit->setEnabled(
true);
775 m_ui->declinationVelocityLineEdit->setEnabled(
false);
776 m_ui->declinationVelocitySigmaLineEdit->setEnabled(
false);
783 void Isis::JigsawSetupDialog::on_spinRateCheckBox_stateChanged(
int arg1) {
785 m_ui->spinRateLineEdit->setEnabled(
true);
786 m_ui->spinRateSigmaLineEdit->setEnabled(
true);
789 m_ui->spinRateLineEdit->setEnabled(
false);
790 m_ui->spinRateSigmaLineEdit->setEnabled(
false);
797 void Isis::JigsawSetupDialog::on_primeMeridianOffsetCheckBox_stateChanged(
int arg1) {
799 m_ui->primeMeridianOffsetLineEdit->setEnabled(
true);
800 m_ui->primeMeridianOffsetSigmaLineEdit->setEnabled(
true);
803 m_ui->primeMeridianOffsetLineEdit->setEnabled(
false);
804 m_ui->primeMeridianOffsetSigmaLineEdit->setEnabled(
false);
811 void Isis::JigsawSetupDialog::on_radiiButtonGroupClicked(
int arg1) {
814 m_ui->aRadiusLabel->setEnabled(
false);
815 m_ui->aRadiusLineEdit->setEnabled(
false);
816 m_ui->aRadiusSigmaLineEdit->setEnabled(
false);
817 m_ui->bRadiusLabel->setEnabled(
false);
818 m_ui->bRadiusLineEdit->setEnabled(
false);
819 m_ui->bRadiusSigmaLineEdit->setEnabled(
false);
820 m_ui->cRadiusLabel->setEnabled(
false);
821 m_ui->cRadiusLineEdit->setEnabled(
false);
822 m_ui->cRadiusSigmaLineEdit->setEnabled(
false);
823 m_ui->meanRadiusLineEdit->setEnabled(
false);
824 m_ui->meanRadiusSigmaLineEdit->setEnabled(
false);
828 m_ui->radiusCheckBox->setEnabled(
true);
830 else if (arg1 == 1) {
831 m_ui->aRadiusLabel->setEnabled(
true);
832 m_ui->aRadiusLineEdit->setEnabled(
true);
833 m_ui->aRadiusSigmaLineEdit->setEnabled(
true);
834 m_ui->bRadiusLabel->setEnabled(
true);
835 m_ui->bRadiusLineEdit->setEnabled(
true);
836 m_ui->bRadiusSigmaLineEdit->setEnabled(
true);
837 m_ui->cRadiusLabel->setEnabled(
true);
838 m_ui->cRadiusLineEdit->setEnabled(
true);
839 m_ui->cRadiusSigmaLineEdit->setEnabled(
true);
840 m_ui->meanRadiusLineEdit->setEnabled(
false);
841 m_ui->meanRadiusSigmaLineEdit->setEnabled(
false);
846 m_ui->radiusCheckBox->setChecked(
false);
847 m_ui->radiusCheckBox->setEnabled(
false);
849 QMessageBox *msgBox =
new QMessageBox(QMessageBox::Information,
"Triaxial Radii Reminder!",
850 "Individual point radii and target body triaxial radii can't be solved for"
851 " simultaneously so we've unchecked and disabled the Radius checkbox under the"
852 " General Settings tab.", QMessageBox::Ok,
this);
855 else if (arg1 == 2) {
856 m_ui->aRadiusLabel->setEnabled(
false);
857 m_ui->aRadiusLineEdit->setEnabled(
false);
858 m_ui->aRadiusSigmaLineEdit->setEnabled(
false);
859 m_ui->bRadiusLabel->setEnabled(
false);
860 m_ui->bRadiusLineEdit->setEnabled(
false);
861 m_ui->bRadiusSigmaLineEdit->setEnabled(
false);
862 m_ui->cRadiusLabel->setEnabled(
false);
863 m_ui->cRadiusLineEdit->setEnabled(
false);
864 m_ui->cRadiusSigmaLineEdit->setEnabled(
false);
865 m_ui->meanRadiusLineEdit->setEnabled(
true);
866 m_ui->meanRadiusSigmaLineEdit->setEnabled((
true));
871 m_ui->radiusCheckBox->setChecked(
false);
872 m_ui->radiusCheckBox->setEnabled(
false);
874 QMessageBox *msgBox =
new QMessageBox(QMessageBox::Information,
"Mean Radius Reminder!",
875 "Individual point radii and target body mean radius can't be solved for"
876 " simultaneously so we've unchecked and disabled the Radius checkbox under the"
877 " General Settings tab.", QMessageBox::Ok,
this);
885 void Isis::JigsawSetupDialog::checkIsValid() {
886 if (!m_ui->aRadiusSigmaLineEdit->hasAcceptableInput()) {
887 qDebug() <<
"invalid input";
894 void Isis::JigsawSetupDialog::slotTextChanged(
const QString &text) {
895 qDebug() <<
"Text change to" << text <<
"and value is valid ==" << m_ui->aRadiusSigmaLineEdit->hasAcceptableInput();
899 void Isis::JigsawSetupDialog::on_aRadiusLineEdit_textChanged(
const QString &arg1) {
900 qDebug() <<
"Text change to" << arg1 <<
"and value is valid ==" << m_ui->aRadiusLineEdit->hasAcceptableInput();
904 void Isis::JigsawSetupDialog::on_targetBodyComboBox_currentIndexChanged(
int index) {
910 std::vector<Angle> raCoefs = target->poleRaCoefs();
911 std::vector<Angle> decCoefs = target->poleDecCoefs();
912 std::vector<Angle> pmCoefs = target->pmCoefs();
914 showTargetAngleWidgets();
916 m_ui->rightAscensionLineEdit->setText(
toString(raCoefs[0].degrees()));
917 m_ui->rightAscensionVelocityLineEdit->setText(
toString(raCoefs[1].degrees()));
918 m_ui->declinationLineEdit->setText(
toString(decCoefs[0].degrees()));
919 m_ui->declinationVelocityLineEdit->setText(
toString(decCoefs[1].degrees()));
920 m_ui->primeMeridianOffsetLineEdit->setText(
toString(pmCoefs[0].degrees()));
921 m_ui->spinRateLineEdit->setText(
toString(pmCoefs[1].degrees()));
924 hideTargetAngleWidgets();
927 m_ui->aRadiusLineEdit->setText(
toString(target->radiusA().kilometers()));
930 m_ui->bRadiusLineEdit->setText(
toString(target->radiusB().kilometers()));
933 m_ui->cRadiusLineEdit->setText(
toString(target->radiusC().kilometers()));
936 m_ui->meanRadiusLineEdit->setText(
toString(target->meanRadius().kilometers()));
942 void Isis::JigsawSetupDialog::on_spkSolveDegreeSpinBox_2_valueChanged(
int arg1) {
944 m_ui->spkSolveDegreeSpinBox_2->setSuffix(
"(NONE)");
945 m_ui->positionAprioriSigmaTable->setRowCount(0);
947 m_ui->positionAprioriSigmaTable->setRowCount(arg1+1);
948 m_ui->positionAprioriSigmaTable->resizeColumnsToContents();
951 QTableWidgetItem *twItem =
new QTableWidgetItem();
952 twItem->setText(
"POSITION");
953 m_ui->positionAprioriSigmaTable->setItem(arg1,0, twItem);
954 QTableWidgetItem *twItemunits =
new QTableWidgetItem();
955 twItemunits->setText(
"meters");
958 else if (arg1 == 1) {
959 m_ui->positionAprioriSigmaTable->item(arg1,0)->setText(
"VELOCITY");
960 m_ui->positionAprioriSigmaTable->item(arg1,2)->setText(
"m/sec");
962 else if (arg1 == 2) {
963 m_ui->positionAprioriSigmaTable->item(arg1,0)->setText(
"ACCELERATION");
964 m_ui->positionAprioriSigmaTable->item(arg1,2)->setText(
"m/s^2");
983 void Isis::JigsawSetupDialog::on_rightAscensionLineEdit_textChanged(
const QString &arg1) {
984 if (!m_ui->rightAscensionLineEdit->hasAcceptableInput()) {
985 m_ui->rightAscensionLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
986 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
989 m_ui->rightAscensionLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
990 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
996 void Isis::JigsawSetupDialog::on_declinationLineEdit_textChanged(
const QString &arg1) {
997 if (!m_ui->declinationLineEdit->hasAcceptableInput()) {
998 m_ui->declinationLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
999 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
1002 m_ui->declinationLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
1003 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
1009 void Isis::JigsawSetupDialog::on_rightAscensionVelocityLineEdit_textChanged(
const QString &arg1) {
1010 if (!m_ui->rightAscensionVelocityLineEdit->hasAcceptableInput()) {
1011 m_ui->rightAscensionVelocityLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
1012 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
1015 m_ui->rightAscensionVelocityLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
1016 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
1022 void Isis::JigsawSetupDialog::on_declinationVelocityLineEdit_textChanged(
const QString &arg1) {
1023 if (!m_ui->declinationVelocityLineEdit->hasAcceptableInput()) {
1024 m_ui->declinationVelocityLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
1025 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
1028 m_ui->declinationVelocityLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
1029 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
1035 void Isis::JigsawSetupDialog::on_primeMeridianOffsetLineEdit_textChanged(
const QString &arg1) {
1036 if (!m_ui->primeMeridianOffsetLineEdit->hasAcceptableInput()) {
1037 m_ui->primeMeridianOffsetLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
1038 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
1041 m_ui->primeMeridianOffsetLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
1042 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
1048 void Isis::JigsawSetupDialog::on_spinRateLineEdit_textChanged(
const QString &arg1) {
1049 if (!m_ui->spinRateLineEdit->hasAcceptableInput()) {
1050 m_ui->spinRateLineEdit->setStyleSheet(
"QLineEdit { background-color: red }");
1051 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
false);
1054 m_ui->spinRateLineEdit->setStyleSheet(
"QLineEdit { background-color: white }");
1055 m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(
true);
1060 void JigsawSetupDialog::showTargetAngleWidgets() {
1061 m_ui->rightAscensionLineEdit->show();
1062 m_ui->rightAscensionVelocityLineEdit->show();
1063 m_ui->declinationLineEdit->show();
1064 m_ui->declinationVelocityLineEdit->show();
1065 m_ui->primeMeridianOffsetLineEdit->show();
1066 m_ui->spinRateLineEdit->show();
1068 m_ui->rightAscensionSigmaLineEdit->show();
1069 m_ui->rightAscensionVelocitySigmaLineEdit->show();
1070 m_ui->declinationSigmaLineEdit->show();
1071 m_ui->declinationVelocitySigmaLineEdit->show();
1072 m_ui->primeMeridianOffsetSigmaLineEdit->show();
1073 m_ui->spinRateSigmaLineEdit->show();
1075 m_ui->poleRaCheckBox->show();
1076 m_ui->poleRaVelocityCheckBox->show();
1077 m_ui->poleDecCheckBox->show();
1078 m_ui->poleDecVelocityCheckBox->show();
1079 m_ui->primeMeridianOffsetCheckBox->show();
1080 m_ui->spinRateCheckBox->show();
1082 m_ui->parameterLabel->show();
1083 m_ui->valueLabel->show();
1084 m_ui->sigmaLabel->show();
1088 void JigsawSetupDialog::hideTargetAngleWidgets() {
1089 m_ui->rightAscensionLineEdit->hide();
1090 m_ui->rightAscensionVelocityLineEdit->hide();
1091 m_ui->declinationLineEdit->hide();
1092 m_ui->declinationVelocityLineEdit->hide();
1093 m_ui->primeMeridianOffsetLineEdit->hide();
1094 m_ui->spinRateLineEdit->hide();
1096 m_ui->rightAscensionSigmaLineEdit->hide();
1097 m_ui->rightAscensionVelocitySigmaLineEdit->hide();
1098 m_ui->declinationSigmaLineEdit->hide();
1099 m_ui->declinationVelocitySigmaLineEdit->hide();
1100 m_ui->primeMeridianOffsetSigmaLineEdit->hide();
1101 m_ui->spinRateSigmaLineEdit->hide();
1103 m_ui->poleRaCheckBox->hide();
1104 m_ui->poleRaVelocityCheckBox->hide();
1105 m_ui->poleDecCheckBox->hide();
1106 m_ui->poleDecVelocityCheckBox->hide();
1107 m_ui->primeMeridianOffsetCheckBox->hide();
1108 m_ui->spinRateCheckBox->hide();
1110 m_ui->parameterLabel->hide();
1111 m_ui->valueLabel->hide();
1112 m_ui->sigmaLabel->hide();
This represents an ISIS control net in a project-based GUI interface.
This class is used to represent a target body in a bundle and how to solve for it.
void setInstrumentPositionSettings(InstrumentPositionSolveOption option, int spkDegree=2, int spkSolveDegree=2, bool positionOverHermite=false, double positionAprioriSigma=-1.0, double velocityAprioriSigma=-1.0, double accelerationAprioriSigma=-1.0)
Sets the instrument pointing settings.
Isis specific code for binary pck.
QSharedPointer< BundleSettings > BundleSettingsQsp
Definition for a BundleSettingsQsp, a shared pointer to a BundleSettings object.
The main project for cnetsuite.
QList< double > aprioriPointingSigmas() const
Accesses the a priori pointing sigmas.
int spkSolveDegree() const
Accesses the degree of thecamera position polynomial being fit to in the bundle adjustment (spkSolveD...
Maintains a list of Controls so that control nets can easily be copied from one Project to another...
QSharedPointer< BundleTargetBody > BundleTargetBodyQsp
Definition for BundleTargetBodyQsp, a QSharedPointer to a BundleTargetBody.
InstrumentPositionSolveOption instrumentPositionSolveOption() const
Accesses the instrument position solve option.
bool solvePositionOverHermite() const
Whether or not the polynomial for solving will be fit over an existing Hermite spline.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
bool solveTwist() const
Accesses the flag for solving for twist.
Distance measurement, usually in meters.
QString displayName() const
Returns the display name.
QSharedPointer< TargetBody > TargetBodyQsp
Defines A smart pointer to a TargetBody obj.
TargetRadiiSolveMethod
Enumeration that defines how to solve for target radii.
Container class for BundleAdjustment settings.
int ckSolveDegree() const
Accesses the degree of the camera angles polynomial being fit to in the bundle adjustment (ckSolveDeg...
InstrumentPointingSolveOption instrumentPointingSolveOption() const
Accesses the instrument pointing solve option.
QList< double > aprioriPositionSigmas() const
Accesses the a priori position sigmas.
This class is used to modify and manage solve settings for 1 to many BundleObservations.
Defines an angle and provides unit conversions.
ControlDisplayProperties * displayProperties()
Access a pointer to the display properties for the control network.
bool IsNullPixel(const double d)
Returns if the input pixel is null.
bool solvePolyOverPointing() const
Whether or not the solve polynomial will be fit over the existing pointing polynomial.
void setInstrumentPointingSettings(InstrumentPointingSolveOption option, bool solveTwist, int ckDegree=2, int ckSolveDegree=2, bool solvePolynomialOverExisting=false, double anglesAprioriSigma=-1.0, double angularVelocityAprioriSigma=-1.0, double angularAccelerationAprioriSigma=-1.0)
Sets the instrument pointing settings.
int spkDegree() const
Accesses the degree of the polynomial fit to the original camera position (spkDegree).
int ckDegree() const
Accesses the degree of polynomial fit to original camera angles (ckDegree).