Isis 3.0 Programmer Reference
Back | Home
JigsawSetupDialog.cpp
1 #include "JigsawSetupDialog.h"
2 
3 #include <vector>
4 
5 #include <QDebug>
6 #include <QMessageBox>
7 #include <QPushButton>
8 #include <QStandardItemModel>
9 
10 #include "BundleSolutionInfo.h"
11 #include "BundleSettings.h"
12 #include "BundleTargetBody.h"
13 #include "Control.h"
14 #include "IString.h"
16 #include "Project.h"
17 #include "SpecialPixel.h"
18 #include "ui_JigsawSetupDialog.h"
19 
20 namespace Isis {
21 // JigsawSetupDialog::JigsawSetupDialog(Project *project, QWidget *parent) :
22 // QDialog(parent), m_ui(new Ui::JigsawSetupDialog) {
23 // //
24 // // Note: When the ui is set up, all intializations to enabled/disabled
25 // // are taken care of. Also connections between some widgets will be taken
26 // // care of in the ui setup.
27 
28 // // For example:
29 // // radiusCheckBox is connected to pointRadiusSigmaLabel and pointRadiusSigmaLineEdit
30 // // outlierRejectionCheckBox is connected
31 // // to outlierRejectionMultiplierLabel and outlierRejectionMultiplierLineEdit
32 // //
33 // // These connections and settings can be found in the JigsawSetupDialog.ui file
34 // // created by QtDesigner and may be edited by opening the ui file in QtDesigner.
35 // //
36 // // More complex connections such as the relationship between positionSolveOption and
37 // // spkDegree are handled in this file by the on_widgetName_signal methods.
38 // m_ui->setupUi(this);
39 
40 // m_project = project;
41 
42 // // fill control net combo box from project
43 // for (int i = 0; i < project->controls().size(); i++) {
44 // ControlList* conlist = project->controls().at(i);
45 // for (int j = 0; j < conlist->size(); j++) {
46 // Control *control = conlist->at(j);
47 
48 // QVariant v = qVariantFromValue((void*)control);
49 
50 // m_ui->controlNetworkComboBox->addItem(control->displayProperties()->displayName(), v);
51 // }
52 // }
53 
54 // m_ui->JigsawSetup->setCurrentIndex(0);
55 // }
56 
57 
58  JigsawSetupDialog::JigsawSetupDialog(Project *project, bool useLastSettings, bool readOnly,
59  QWidget *parent) : QDialog(parent),
60  m_ui(new Ui::JigsawSetupDialog) {
61  //
62  // Note: When the ui is set up, all initializations to enabled/disabled
63  // are taken care of. Also connections between some widgets will be taken
64  // care of in the ui setup.
65 
66  // For example:
67  // radiusCheckBox is connected to pointRadiusSigmaLabel and pointRadiusSigmaLineEdit
68  // outlierRejectionCheckBox is connected
69  // to outlierRejectionMultiplierLabel and outlierRejectionMultiplierLineEdit
70  //
71  // These connections and settings can be found in the JigsawSetupDialog.ui file
72  // created by QtDesigner and may be edited by opening the ui file in QtDesigner.
73  //
74  // More complex connections such as the relationship between positionSolveOption and
75  // spkDegree are handled in this file by the on_widgetName_signal methods.
76  m_ui->setupUi(this);
77 
78  m_project = project;
79 
80  m_ui->JigsawSetup->setCurrentIndex(0);
81 
82  if (readOnly) {
83  makeReadOnly();
84  }
85 
86  // initializations for general tab
87 
88  // fill control net combo box from project
89  for (int i = 0; i < project->controls().size(); i++) {
90  ControlList* conlist = project->controls().at(i);
91  for (int j = 0; j < conlist->size(); j++) {
92  Control *control = conlist->at(j);
93 
94  QVariant v = qVariantFromValue((void*)control);
95 
96  m_ui->controlNetworkComboBox->addItem(control->displayProperties()->displayName(), v);
97  }
98  }
99 
100  QList<BundleSolutionInfo *> bundleSolutionInfo = m_project->bundleSolutionInfo();
101  if (useLastSettings && bundleSolutionInfo.size() > 0) {
102  BundleSettingsQsp lastBundleSettings = (bundleSolutionInfo.last())->bundleSettings();
103  fillFromSettings(lastBundleSettings);
104  }
105 
106  // initializations for observation solve settings tab
107  m_ui->spkSolveDegreeSpinBox_2->setValue(-1);
108 
109  QStringList tableHeaders;
110  tableHeaders << "coefficients" << "a priori sigma" << "units";
111  m_ui->positionAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
112 
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)));
116 
117  m_ui->pointingAprioriSigmaTable->setHorizontalHeaderLabels(tableHeaders);
118 
119 
120 
121  // initializations for target body tab
122 
123  // fill target combo box from project
124  for (int i = 0; i < project->targetBodies().size(); i++) {
125  TargetBodyQsp target = project->targetBodies().at(i);
126 
127  QVariant v = qVariantFromValue((void*)target.data());
128 
129  QString name = target->displayProperties()->displayName();
130 
131  if (name == "MOON")
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);
139  else
140  m_ui->targetBodyComboBox->addItem(QIcon(":moonPhase"), name, v);
141  }
142 
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);
147 
148  // validators for target body entries...
149  QDoubleValidator *sigmaValidator = new QDoubleValidator(0.0, 1.0e+10, 8, this);
150  sigmaValidator->setNotation(QDoubleValidator::ScientificNotation);
151 
152  // right ascension valid range is from 0 to 360 degrees
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);
157 
158  m_ui->rightAscensionVelocityLineEdit->setValidator(raValidator);
159  m_ui->rightAscensionVelocitySigmaLineEdit->setValidator(sigmaValidator);
160 
161  // declination valid range is from -90 to +90 degrees
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);
167 
168  m_ui->declinationVelocityLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
169  m_ui->declinationVelocityLineEdit));
170  m_ui->declinationVelocitySigmaLineEdit->setValidator(sigmaValidator);
171 
172  m_ui->primeMeridianOffsetLineEdit->setValidator(raValidator);
173  m_ui->primeMeridianOffsetSigmaLineEdit->setValidator(sigmaValidator);
174 
175  // spin rate valid for non-negative values
176  m_ui->spinRateLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
177  m_ui->spinRateLineEdit));
178  m_ui->spinRateSigmaLineEdit->setValidator(sigmaValidator);
179 
180  m_ui->aRadiusLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
181  m_ui->aRadiusLineEdit));
182  m_ui->aRadiusSigmaLineEdit->setValidator(sigmaValidator);
183 
184  m_ui->bRadiusLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
185  m_ui->bRadiusLineEdit));
186  m_ui->bRadiusSigmaLineEdit->setValidator(sigmaValidator);
187 
188  m_ui->cRadiusLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
189  m_ui->cRadiusLineEdit));
190  m_ui->cRadiusSigmaLineEdit->setValidator(sigmaValidator);
191 
192  m_ui->meanRadiusLineEdit->setValidator(new QDoubleValidator(0.0, 1.0e+10, 8,
193  m_ui->meanRadiusLineEdit));
194  m_ui->meanRadiusSigmaLineEdit->setValidator(sigmaValidator);
195 
196  // signals for target body tab
197 // connect(m_ui->radiiButtonGroup, SIGNAL(buttonClicked(int)),
198 // this, SLOT(on_radiiGroupClicked(int)));
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)));
205  }
206 
207 
208  JigsawSetupDialog::~JigsawSetupDialog() {
209  // delete/null m_ui since we did "new" this pointers in the constructor
210  if (m_ui) {
211  delete m_ui;
212  }
213  m_ui = NULL;
214  // do not delete/null m_project since we didn't "new" this pointer
215  }
216 
217 
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);
222  }
223 
224 
225 
226 // void JigsawSetupDialog::on_outlierRejectionCheckBox_toggled(bool checked) {
227 // m_ui->outlierRejectionMultiplierLabel->setEnabled(checked);
228 // m_ui->outlierRejectionMultiplierLineEdit->setEnabled(checked);
229 // }
230 
231 
232  void JigsawSetupDialog::on_positionComboBox_currentIndexChanged(int index) {
233 
234  // indices:
235  // 0 = none, 1 = position, 2 = velocity, 3 = acceleration, 4 = all
236  bool solvePosition = (bool) (index > 0);
237  bool solveVelocity = (bool) (index > 1);
238  bool solveAcceleration = (bool) (index > 2);
239 // bool solveAllPolynomialCoefficients = (bool) (index > 3);
240 
241  m_ui->hermiteSplineCheckBox->setEnabled(solvePosition);
242  m_ui->positionSigmaLabel->setEnabled(solvePosition);
243  m_ui->positionSigmaLineEdit->setEnabled(solvePosition);
244  m_ui->positionSigmaUnitsLabel->setEnabled(solvePosition);
245 
246  m_ui->velocitySigmaLabel->setEnabled(solveVelocity);
247  m_ui->velocitySigmaLineEdit->setEnabled(solveVelocity);
248  m_ui->velocitySigmaUnitsLabel->setEnabled(solveVelocity);
249 
250  m_ui->accelerationSigmaLabel->setEnabled(solveAcceleration);
251  m_ui->accelerationSigmaLineEdit->setEnabled(solveAcceleration);
252  m_ui->accelerationSigmaUnitsLabel->setEnabled(solveAcceleration);
253 
254 // m_ui->spkDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
255 // m_ui->spkDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
256 // m_ui->spkSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
257 // m_ui->spkSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
258 
259  }
260 
261 
262  void JigsawSetupDialog::on_pointingComboBox_currentIndexChanged(int index) {
263 
264  // indices:
265  // 0 = angles, 1 = none, 2 = velocity, 3 = acceleration, 4 = all
266  bool solveAngles = (bool) (index == 0 || index > 1);
267  bool solveAngularVelocity = (bool) (index > 1);
268  bool solveAngularAcceleration = (bool) (index > 2);
269 // bool solveAllPolynomialCoefficients = (bool) (index > 3);
270 
271  m_ui->twistCheckBox->setEnabled(solveAngles);
272  m_ui->fitOverPointingCheckBox->setEnabled(solveAngles);
273 
274 // m_ui->ckDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
275 // m_ui->ckDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
276 // m_ui->ckSolveDegreeSpinBox->setEnabled(solveAllPolynomialCoefficients);
277 // m_ui->ckSolveDegreeLabel->setEnabled(solveAllPolynomialCoefficients);
278 
279  m_ui->pointingAnglesSigmaLabel->setEnabled(solveAngles);
280  m_ui->pointingAnglesSigmaLineEdit->setEnabled(solveAngles);
281  m_ui->pointingAnglesSigmaUnitsLabel->setEnabled(solveAngles);
282 
283  m_ui->pointingAngularVelocitySigmaLabel->setEnabled(solveAngularVelocity);
284  m_ui->pointingAngularVelocitySigmaLineEdit->setEnabled(solveAngularVelocity);
285  m_ui->pointingAngularVelocitySigmaUnitsLabel->setEnabled(solveAngularVelocity);
286 
287  m_ui->pointingAngularAccelerationSigmaLabel->setEnabled(solveAngularAcceleration);
288  m_ui->pointingAngularAccelerationSigmaLineEdit->setEnabled(solveAngularAcceleration);
289  m_ui->pointingAngularAccelerationSigmaUnitsLabel->setEnabled(solveAngularAcceleration);
290 
291  }
292 
293 
294  void JigsawSetupDialog::on_maximumLikelihoodModel1ComboBox_currentIndexChanged(int index) {
295 
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);
301 
302  }
303 
304 
305  void JigsawSetupDialog::on_maximumLikelihoodModel2ComboBox_currentIndexChanged(int index) {
306 
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);
312 
313  }
314 
315 
316  void JigsawSetupDialog::on_maximumLikelihoodModel3ComboBox_currentIndexChanged(int index) {
317 
318  bool model3Selected = (bool)(index > 0);
319  m_ui->maximumLikelihoodModel3QuantileLabel->setEnabled(model3Selected);
320  m_ui->maximumLikelihoodModel3QuantileLineEdit->setEnabled(model3Selected);
321 
322  }
323 
324 
325  void JigsawSetupDialog::fillFromSettings(BundleSettingsQsp settings) {
326 
327  BundleObservationSolveSettings observationSolveSettings = settings->observationSolveSettings(0);
328 
329  // general tab
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()));
338 
339 
340  m_ui->positionComboBox->setCurrentIndex(observationSolveSettings.instrumentPositionSolveOption());
341  m_ui->hermiteSplineCheckBox->setChecked(observationSolveSettings.solvePositionOverHermite());
342  m_ui->spkDegreeSpinBox->setValue(observationSolveSettings.spkDegree());
343  m_ui->spkSolveDegreeSpinBox->setValue(observationSolveSettings.spkSolveDegree());
344 
345 
346  int pointingOption = observationSolveSettings.instrumentPointingSolveOption();
347  if (pointingOption == 0) {
348  pointingOption = 1;
349  }
350  if (pointingOption == 1) {
351  pointingOption = 0;
352  }
353 
354  if ( pointingOption > 0 ) {
355  m_ui->twistCheckBox->setEnabled(true);
356  }
357  else {
358  m_ui->twistCheckBox->setEnabled(true);
359  }
360 
361  m_ui->pointingComboBox->setCurrentIndex(pointingOption);
362 // m_ui->pointingComboBox->setCurrentIndex(observationSolveSettings.instrumentPointingSolveOption());
363 
364 
365  m_ui->twistCheckBox->setChecked(observationSolveSettings.solveTwist());
366  m_ui->fitOverPointingCheckBox->setChecked(observationSolveSettings.solvePolyOverPointing());
367  m_ui->ckDegreeSpinBox->setValue(observationSolveSettings.ckDegree());
368  m_ui->ckSolveDegreeSpinBox->setValue(observationSolveSettings.ckSolveDegree());
369 
370  // weighting tab
371  if ( !IsNullPixel(settings->globalLatitudeAprioriSigma()) ) {
372  m_ui->pointLatitudeSigmaLineEdit->setText(toString(settings->globalLatitudeAprioriSigma()));
373  }
374  if ( !IsNullPixel(settings->globalLongitudeAprioriSigma()) ) {
375  m_ui->pointLongitudeSigmaLineEdit->setText(toString(settings->globalLongitudeAprioriSigma()));
376  }
377  if ( !IsNullPixel(settings->globalRadiusAprioriSigma()) ) {
378  m_ui->pointRadiusSigmaLineEdit->setText(toString(settings->globalRadiusAprioriSigma()));
379  }
380 
381  QList<double> aprioriPositionSigmas = observationSolveSettings.aprioriPositionSigmas();
382 
383  if ( aprioriPositionSigmas.size() > 0 && !IsNullPixel(aprioriPositionSigmas[0]) ) {
384  m_ui->positionSigmaLineEdit->setText(toString(aprioriPositionSigmas[0]));
385  }
386 
387  if ( aprioriPositionSigmas.size() > 1 && !IsNullPixel(aprioriPositionSigmas[1]) ) {
388  m_ui->velocitySigmaLineEdit->setText(toString(aprioriPositionSigmas[1]));
389  }
390 
391  if ( aprioriPositionSigmas.size() > 2 && !IsNullPixel(aprioriPositionSigmas[2]) ) {
392  m_ui->accelerationSigmaLineEdit->setText(toString(aprioriPositionSigmas[2]));
393  }
394 
395  QList<double> aprioriPointingSigmas = observationSolveSettings.aprioriPointingSigmas();
396 
397  if ( aprioriPointingSigmas.size() > 0 && !IsNullPixel(aprioriPointingSigmas[0]) ) {
398  m_ui->pointingAnglesSigmaLineEdit->setText(toString(aprioriPointingSigmas[0]));
399  }
400 
401  if ( aprioriPointingSigmas.size() > 1 && !IsNullPixel(aprioriPointingSigmas[1]) ) {
402  m_ui->pointingAngularVelocitySigmaLineEdit->setText(toString(aprioriPointingSigmas[1]));
403  }
404 
405  if ( aprioriPointingSigmas.size() > 2 && !IsNullPixel(aprioriPointingSigmas[2]) ) {
406  m_ui->pointingAngularAccelerationSigmaLineEdit->setText(toString(aprioriPointingSigmas[2]));
407  }
408 
409  // maximum liklihood tab
410 
411  // self-calibration tab
412 
413  // target body tab
414 
415  update();
416 
417  }
418 
419 
420  BundleSettingsQsp JigsawSetupDialog::bundleSettings() {
421 
423  settings->setValidateNetwork(true);
424 
425  // solve options
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();
431  }
432  if (m_ui->pointLongitudeSigmaLineEdit->isModified()) {
433  longitudeSigma = m_ui->pointLongitudeSigmaLineEdit->text().toDouble();
434  }
435  if (m_ui->pointRadiusSigmaLineEdit->isModified()) {
436  radiusSigma = m_ui->pointRadiusSigmaLineEdit->text().toDouble();
437  }
438  settings->setSolveOptions(m_ui->observationModeCheckBox->isChecked(),
439  m_ui->updateCubeLabelCheckBox->isChecked(),
440  m_ui->errorPropagationCheckBox->isChecked(),
441  m_ui->radiusCheckBox->isChecked(),
442  latitudeSigma,
443  longitudeSigma,
444  radiusSigma);
445  settings->setOutlierRejection(m_ui->outlierRejectionCheckBox->isChecked(),
446  m_ui->outlierRejectionMultiplierLineEdit->text().toDouble());
447 
448 
449 
450 
451  QList<BundleObservationSolveSettings> observationSolveSettingsList;
452  BundleObservationSolveSettings observationSolveSettings;
453 
454  // pointing settings
455  double anglesSigma = -1.0;
456  double angularVelocitySigma = -1.0;
457  double angularAccelerationSigma = -1.0;
458 
459  if (m_ui->pointingAnglesSigmaLineEdit->isModified()) {
460  anglesSigma = m_ui->pointingAnglesSigmaLineEdit->text().toDouble();
461  }
462  if (m_ui->pointingAngularVelocitySigmaLineEdit->isModified()) {
463  angularVelocitySigma = m_ui->pointingAngularVelocitySigmaLineEdit->text().toDouble();
464  }
465  if (m_ui->pointingAngularAccelerationSigmaLineEdit->isModified()) {
466  angularAccelerationSigma = m_ui->pointingAngularAccelerationSigmaLineEdit->text().toDouble();
467  }
468  observationSolveSettings.setInstrumentPointingSettings(
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);
475 
476  // position option
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();
482  }
483  if (m_ui->velocitySigmaLineEdit->isModified()) {
484  velocitySigma = m_ui->velocitySigmaLineEdit->text().toDouble();
485  }
486  if (m_ui->accelerationSigmaLineEdit->isModified()) {
487  accelerationSigma = m_ui->accelerationSigmaLineEdit->text().toDouble();
488  }
489  observationSolveSettings.setInstrumentPositionSettings(
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);
495 
496  observationSolveSettingsList.append(observationSolveSettings);
497  settings->setObservationSolveOptions(observationSolveSettingsList);
498  // convergence criteria
499  settings->setConvergenceCriteria(BundleSettings::Sigma0,
500  m_ui->sigma0ThresholdLineEdit->text().toDouble(),
501  m_ui->maximumIterationsLineEdit->text().toInt()); // TODO: change this to give user a choice between sigma0 and param corrections???
502 
503  // max likelihood estimation
504  if (m_ui->maximumLikelihoodModel1ComboBox->currentText().compare("NONE") != 0) {
505  // if model1 is not "NONE", add to the models list with its quantile
506  settings->addMaximumLikelihoodEstimatorModel(
507  MaximumLikelihoodWFunctions::stringToModel(
508  m_ui->maximumLikelihoodModel1ComboBox->currentText()),
509  m_ui->maximumLikelihoodModel1QuantileLineEdit->text().toDouble());
510 
511  if (m_ui->maximumLikelihoodModel2ComboBox->currentText().compare("NONE") != 0) {
512  // if model2 is not "NONE", add to the models list with its quantile
513  settings->addMaximumLikelihoodEstimatorModel(
514  MaximumLikelihoodWFunctions::stringToModel(
515  m_ui->maximumLikelihoodModel2ComboBox->currentText()),
516  m_ui->maximumLikelihoodModel2QuantileLineEdit->text().toDouble());
517 
518  if (m_ui->maximumLikelihoodModel3ComboBox->currentText().compare("NONE") != 0) {
519  // if model3 is not "NONE", add to the models list with its quantile
520  settings->addMaximumLikelihoodEstimatorModel(
521  MaximumLikelihoodWFunctions::stringToModel(
522  m_ui->maximumLikelihoodModel3ComboBox->currentText()),
523  m_ui->maximumLikelihoodModel3QuantileLineEdit->text().toDouble());
524  }
525  }
526  }
527 
528  // target body
529  // ensure user entered something to adjust
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()) {
537 
538  // create BundleTargetBody utility object
540 
541  int radiiOption = 0;
542  if (m_ui->meanRadiusRadioButton->isChecked())
543  radiiOption = 1;
544  else if (m_ui->triaxialRadiiRadioButton->isChecked())
545  radiiOption = 2;
546 
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);
564  }
565  else if (m_ui->meanRadiusRadioButton->isChecked())
566  targetParameterSolveCodes.insert(BundleTargetBody::MeanRadius);
567 
568  double poleRASigma = -1.0;
569  double poleRAVelocitySigma = -1.0;
570 // double poleRAAccelerationSigma = -1.0;
571  double poleDecSigma = -1.0;
572  double poleDecVelocitySigma = -1.0;
573 // double poleDecAccelerationSigma = -1.0;
574  double pmSigma = -1.0;
575  double pmVelocitySigma = -1.0;
576 // double pmAccelerationSigma = -1.0;
577  double aRadiusSigma = 0.0;
578  double bRadiusSigma = 0.0;
579  double cRadiusSigma = 0.0;
580  double meanRadiusSigma = 0.0;
581 
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();
586 // if (m_ui->rightAscensionAccelerationLineEdit->isModified())
587 // poleRAAccelerationSigma = m_ui->rightAscensionAccelerationLineEdit->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();
592 // if (m_ui->declinationAccelerationSigmaLineEdit->isModified())
593 // poleDecAccelerationSigma = m_ui->declinationAccelerationSigmaLineEdit->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();
598 // if (m_ui->pmAccelerationSigmaLineEdit->isModified())
599 // pmAccelerationSigma = m_ui->pmAccelerationSigmaLineEdit->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();
608 
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));
631 
632  settings->setBundleTargetBody(bundleTargetBody);
633  }
634 
635  // output options
636 //??? settings->setOutputFilePrefix("");
637 
638  return settings;
639  }
640 
641 
642  Control *JigsawSetupDialog::selectedControl() {
643 
644  int nIndex = m_ui->controlNetworkComboBox->currentIndex();
645  Control *selectedControl
646  = (Control *)(m_ui->controlNetworkComboBox->itemData(nIndex).value< void * >());
647  return selectedControl;
648 
649  }
650 
651 
652  QString *JigsawSetupDialog::selectedControlName() {
653 
654  QString *name = new QString(m_ui->controlNetworkComboBox->currentText());
655  return name;
656 
657  }
658 
659 
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);
679 
680  // weighting tab
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);
690 
691  // maximum liklihood tab
692 
693  // self-calibration tab
694 
695  // target body tab
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);
722 
723  update();
724  }
725 
726 
727  void Isis::JigsawSetupDialog::on_poleRaCheckBox_stateChanged(int arg1) {
728  if (arg1) {
729  m_ui->rightAscensionLineEdit->setEnabled(true);
730  m_ui->rightAscensionSigmaLineEdit->setEnabled(true);
731  }
732  else {
733  m_ui->rightAscensionLineEdit->setEnabled(false);
734  m_ui->rightAscensionSigmaLineEdit->setEnabled(false);
735  }
736 
737  update();
738  }
739 
740 
741  void Isis::JigsawSetupDialog::on_poleRaVelocityCheckBox_stateChanged(int arg1) {
742  if (arg1) {
743  m_ui->rightAscensionVelocityLineEdit->setEnabled(true);
744  m_ui->rightAscensionVelocitySigmaLineEdit->setEnabled(true);
745  }
746  else {
747  m_ui->rightAscensionVelocityLineEdit->setEnabled(false);
748  m_ui->rightAscensionVelocitySigmaLineEdit->setEnabled(false);
749  }
750 
751  update();
752  }
753 
754 
755  void Isis::JigsawSetupDialog::on_poleDecCheckBox_stateChanged(int arg1) {
756  if (arg1) {
757  m_ui->declinationLineEdit->setEnabled(true);
758  m_ui->declinationSigmaLineEdit->setEnabled(true);
759  }
760  else {
761  m_ui->declinationLineEdit->setEnabled(false);
762  m_ui->declinationSigmaLineEdit->setEnabled(false);
763  }
764 
765  update();
766  }
767 
768 
769  void Isis::JigsawSetupDialog::on_poleDecVelocityCheckBox_stateChanged(int arg1) {
770  if (arg1) {
771  m_ui->declinationVelocityLineEdit->setEnabled(true);
772  m_ui->declinationVelocitySigmaLineEdit->setEnabled(true);
773  }
774  else {
775  m_ui->declinationVelocityLineEdit->setEnabled(false);
776  m_ui->declinationVelocitySigmaLineEdit->setEnabled(false);
777  }
778 
779  update();
780  }
781 
782 
783  void Isis::JigsawSetupDialog::on_spinRateCheckBox_stateChanged(int arg1) {
784  if (arg1) {
785  m_ui->spinRateLineEdit->setEnabled(true);
786  m_ui->spinRateSigmaLineEdit->setEnabled(true);
787  }
788  else {
789  m_ui->spinRateLineEdit->setEnabled(false);
790  m_ui->spinRateSigmaLineEdit->setEnabled(false);
791  }
792 
793  update();
794  }
795 
796 
797  void Isis::JigsawSetupDialog::on_primeMeridianOffsetCheckBox_stateChanged(int arg1) {
798  if (arg1) {
799  m_ui->primeMeridianOffsetLineEdit->setEnabled(true);
800  m_ui->primeMeridianOffsetSigmaLineEdit->setEnabled(true);
801  }
802  else {
803  m_ui->primeMeridianOffsetLineEdit->setEnabled(false);
804  m_ui->primeMeridianOffsetSigmaLineEdit->setEnabled(false);
805  }
806 
807  update();
808  }
809 
810 
811  void Isis::JigsawSetupDialog::on_radiiButtonGroupClicked(int arg1) {
812 
813  if (arg1 == 0) {
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);
825 
826  // if we're not solving for target body triaxial radii or mean radius, we CAN solve for point
827  // radii so we ensure the point radius checkbox under the general settings tab is enabled
828  m_ui->radiusCheckBox->setEnabled(true);
829  }
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);
842 
843  // if we're solving for target body mean radius, we can't solve for point radii
844  // so we uncheck and disable the point radius checkbox under the general settings tab
845  // and remind the user
846  m_ui->radiusCheckBox->setChecked(false);
847  m_ui->radiusCheckBox->setEnabled(false);
848 
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);
853  msgBox->exec();
854  }
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));
867 
868  // if we're solving for target body triaxial radii, we can't solve for point radii
869  // so we uncheck and disable the point radius checkbox under the general settings tab
870  // and remind the user
871  m_ui->radiusCheckBox->setChecked(false);
872  m_ui->radiusCheckBox->setEnabled(false);
873 
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);
878  msgBox->exec();
879  }
880 
881  update();
882  }
883 
884 
885  void Isis::JigsawSetupDialog::checkIsValid() {
886  if (!m_ui->aRadiusSigmaLineEdit->hasAcceptableInput()) {
887  qDebug() << "invalid input";
888  }
889 
890 
891  }
892 
893 
894  void Isis::JigsawSetupDialog::slotTextChanged(const QString &text) {
895  qDebug() << "Text change to" << text << "and value is valid ==" << m_ui->aRadiusSigmaLineEdit->hasAcceptableInput();
896  }
897 
898 
899  void Isis::JigsawSetupDialog::on_aRadiusLineEdit_textChanged(const QString &arg1) {
900  qDebug() << "Text change to" << arg1 << "and value is valid ==" << m_ui->aRadiusLineEdit->hasAcceptableInput();
901  }
902 
903 
904  void Isis::JigsawSetupDialog::on_targetBodyComboBox_currentIndexChanged(int index) {
905 
906  TargetBodyQsp target = m_project->targetBodies().at(index);
907  if (target) {
908 
909  if (target->frameType() != Isis::SpiceRotation::BPC) {
910  std::vector<Angle> raCoefs = target->poleRaCoefs();
911  std::vector<Angle> decCoefs = target->poleDecCoefs();
912  std::vector<Angle> pmCoefs = target->pmCoefs();
913 
914  showTargetAngleWidgets();
915 
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()));
922  }
923  else {
924  hideTargetAngleWidgets();
925  }
926 
927  m_ui->aRadiusLineEdit->setText(toString(target->radiusA().kilometers()));
928  //m_ui->aRadiusSigmaLineEdit->setText(toString(target->sigmaRadiusA().kilometers()));
929 
930  m_ui->bRadiusLineEdit->setText(toString(target->radiusB().kilometers()));
931  //m_ui->bRadiusSigmaLineEdit->setText(toString(target->sigmaRadiusB().kilometers()));
932 
933  m_ui->cRadiusLineEdit->setText(toString(target->radiusC().kilometers()));
934  //m_ui->cRadiusSigmaLineEdit->setText(toString(target->sigmaRadiusC().kilometers()));
935 
936  m_ui->meanRadiusLineEdit->setText(toString(target->meanRadius().kilometers()));
937  //m_ui->meanRadiusSigmaLineEdit->setText(toString(target->sigmaMeanRadius().kilometers()));
938  }
939  }
940 
941 
942  void Isis::JigsawSetupDialog::on_spkSolveDegreeSpinBox_2_valueChanged(int arg1) {
943  if (arg1 == -1) {
944  m_ui->spkSolveDegreeSpinBox_2->setSuffix("(NONE)");
945  m_ui->positionAprioriSigmaTable->setRowCount(0);
946  }
947  m_ui->positionAprioriSigmaTable->setRowCount(arg1+1);
948  m_ui->positionAprioriSigmaTable->resizeColumnsToContents();
949 
950  if (arg1 == 0) {
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");
956  //m_ui->positionAprioriSigmaTable->item(arg1,2)->setText("meters");
957  }
958  else if (arg1 == 1) {
959  m_ui->positionAprioriSigmaTable->item(arg1,0)->setText("VELOCITY");
960  m_ui->positionAprioriSigmaTable->item(arg1,2)->setText("m/sec");
961  }
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");
965  }
966  /*
967  else if (arg1 == 0) {
968  m_ui->spkSolveDegreeSpinBox_2->setSuffix("(POSITION)");
969  int nRows = m_ui->positionAprioriSigmaTable->rowCount();
970 
971  m_ui->positionAprioriSigmaTable->insertRow(nRows);
972  }
973  else if (arg1 == 1)
974  m_ui->spkSolveDegreeSpinBox_2->setSuffix("(VELOCITY)");
975  else if (arg1 == 2)
976  m_ui->spkSolveDegreeSpinBox_2->setSuffix("(ACCELERATION)");
977  else
978  m_ui->spkSolveDegreeSpinBox_2->setSuffix("");
979  */
980  }
981 
982 
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);
987  }
988  else {
989  m_ui->rightAscensionLineEdit->setStyleSheet("QLineEdit { background-color: white }");
990  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
991  }
992  update();
993  }
994 
995 
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);
1000  }
1001  else {
1002  m_ui->declinationLineEdit->setStyleSheet("QLineEdit { background-color: white }");
1003  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
1004  }
1005  update();
1006  }
1007 
1008 
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);
1013  }
1014  else {
1015  m_ui->rightAscensionVelocityLineEdit->setStyleSheet("QLineEdit { background-color: white }");
1016  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
1017  }
1018  update();
1019  }
1020 
1021 
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);
1026  }
1027  else {
1028  m_ui->declinationVelocityLineEdit->setStyleSheet("QLineEdit { background-color: white }");
1029  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
1030  }
1031  update();
1032  }
1033 
1034 
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);
1039  }
1040  else {
1041  m_ui->primeMeridianOffsetLineEdit->setStyleSheet("QLineEdit { background-color: white }");
1042  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
1043  }
1044  update();
1045  }
1046 
1047 
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);
1052  }
1053  else {
1054  m_ui->spinRateLineEdit->setStyleSheet("QLineEdit { background-color: white }");
1055  m_ui->okCloseButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
1056  }
1057  update();
1058  }
1059 
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();
1067 
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();
1074 
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();
1081 
1082  m_ui->parameterLabel->show();
1083  m_ui->valueLabel->show();
1084  m_ui->sigmaLabel->show();
1085  }
1086 
1087 
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();
1095 
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();
1102 
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();
1109 
1110  m_ui->parameterLabel->hide();
1111  m_ui->valueLabel->hide();
1112  m_ui->sigmaLabel->hide();
1113  }
1114 }
This represents an ISIS control net in a project-based GUI interface.
Definition: Control.h:57
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.
Definition: Project.h:105
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...
Definition: ControlList.h:34
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.
Definition: IString.cpp:226
bool solveTwist() const
Accesses the flag for solving for twist.
Distance measurement, usually in meters.
Definition: Distance.h:47
QString displayName() const
Returns the display name.
QSharedPointer< TargetBody > TargetBodyQsp
Defines A smart pointer to a TargetBody obj.
Definition: TargetBody.h:224
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.
Definition: Angle.h:58
ControlDisplayProperties * displayProperties()
Access a pointer to the display properties for the control network.
Definition: Control.cpp:151
bool IsNullPixel(const double d)
Returns if the input pixel is null.
Definition: SpecialPixel.h:237
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).

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:21:29