diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d7d7e1b87..03a89fc83b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,7 +36,8 @@ release. ## [Unreleased] ### Changed -- Cnetedit has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5322](https://github.com/USGS-Astrogeology/ISIS3/issues/5322), +- Cnetedit has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5346](https://github.com/USGS-Astrogeology/ISIS3/issues/5346), +- Cnetdiff has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5322](https://github.com/USGS-Astrogeology/ISIS3/issues/5322), - Removed the `.py` extention from the _isisdataeval_ tool `isisdata_mockup` for consistency and install it in $ISISROOT/bin; added the `--tojson` and `--hasher` option to _isisdata_mockup_ tool improve utility; updated the tool `README.md` documentation to reflect this change, removed help output and trimmed example results; fixed paths to test data in `make_isisdata_mockup.sh`. [#5163](https://github.com/DOI-USGS/ISIS3/pull/5163) - Significantly refactored FASTGEOM processing in findfeatures to accommodate stability and functionality. The scope of the algorithm was taken out of the ImageSource class and isolated to support this feature. [#4772](https://github.com/DOI-USGS/ISIS3/issues/4772) - Report better information regarding the behavior of findfeatures, FASTGEOM algorithms, and creation of the output network. [#4772](https://github.com/DOI-USGS/ISIS3/issues/4772) diff --git a/isis/src/control/apps/cnetedit/cnetedit.cpp b/isis/src/control/apps/cnetedit/cnetedit.cpp new file mode 100644 index 0000000000..2e290ddafd --- /dev/null +++ b/isis/src/control/apps/cnetedit/cnetedit.cpp @@ -0,0 +1,1127 @@ +/** This is free and unencumbered software released into the public domain. +The authors of ISIS do not claim copyright on the contents of this file. +For more details about the LICENSE terms and the AUTHORS, you will +find files of those names at the top level of this repository. **/ + +/* SPDX-License-Identifier: CC0-1.0 */ + +#include "cnetedit.h" + +#include +#include +#include +#include +#include +#include + +#include "ControlMeasure.h" +#include "ControlNet.h" +#include "ControlNetValidMeasure.h" +#include "ControlPoint.h" +#include "ControlPointList.h" +#include "Cube.h" +#include "FileName.h" +#include "MeasureValidationResults.h" +#include "Progress.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "PvlKeyword.h" +#include "PvlObject.h" +#include "SerialNumber.h" +#include "SerialNumberList.h" +#include "IException.h" + +using namespace std; + +namespace Isis { + + // Deletion test + bool shouldDelete(ControlPoint *point); + + // Mutator methods + void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause); + void ignoreMeasure(ControlNet &cnet, ControlPoint *point, + ControlMeasure *measure, QString cause); + void deletePoint(ControlNet &cnet, int cp); + void deleteMeasure(ControlPoint *point, int cm); + + // Edit passes + void populateLog(ControlNet &cnet, bool ignore); + + void unlockPoints(ControlNet &cnet, ControlPointList &cpList); + void ignorePoints(ControlNet &cnet, ControlPointList &cpList); + void lockPoints(ControlNet &cnet, ControlPointList &cpList); + + void unlockCubes(ControlNet &cnet, SerialNumberList &snl); + void ignoreCubes(ControlNet &cnet, SerialNumberList &snl); + void lockCubes(ControlNet &cnet, SerialNumberList &snl); + + void unlockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + void ignoreMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + void lockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures); + + void checkAllMeasureValidity(ControlNet &cnet, SerialNumberList *serialNumbers); + + // Validity test + MeasureValidationResults validateMeasure(const ControlMeasure *measure, + Cube *cube, Camera *camera); + + // Logging helpers + void logResult(QMap *pointsLog, QString pointId, QString cause); + void logResult(QMap *measuresLog, + QString pointId, QString serial, QString cause); + PvlObject createLog(QString label, QMap *pointsMap); + PvlObject createLog(QString label, + QMap *pointsMap, QMap *measuresMap); + + // Global variables + static int numPointsDeleted; + static int numMeasuresDeleted; + + static bool deleteIgnored; + static bool preservePoints; + static bool retainRef; + static bool keepLog; + static bool ignoreAll; + + static QMap *ignoredPoints; + static QMap *ignoredMeasures; + static QMap *retainedReferences; + static QMap *editLockedPoints; + static QMap *editLockedMeasures; + + static ControlNetValidMeasure *cneteditValidator; + + /** + * Edit a control network + * + * @param ui UserInterface object containing parameters + * @return Pvl results log file + * + * @throws IException::User "Unable to open MEASURELIST [FILENAME]" + * @throws IException::User "Line ___ in the MEASURELIST does not contain a Point ID and a cube filename separated by a comma" + */ + Pvl cnetedit(UserInterface &ui) { + + // Construct control net + ControlNet cnet(ui.GetFileName("CNET")); + + // List of IDs mapping to points to be edited + ControlPointList *cpList = nullptr; + if (ui.WasEntered("POINTLIST") && cnet.GetNumPoints() > 0) { + cpList = new ControlPointList(ui.GetFileName("POINTLIST")); + } + + // Serial number list of cubes to be edited + SerialNumberList *cubeSnList = nullptr; + if (ui.WasEntered("CUBELIST") && cnet.GetNumPoints() > 0) { + cubeSnList = new SerialNumberList(ui.GetFileName("CUBELIST")); + } + + // List of paired Point IDs and cube filenames + QMap< QString, QSet * > *editMeasuresList = nullptr; + if (ui.WasEntered("MEASURELIST") && cnet.GetNumPoints() > 0) { + + QFile file(ui.GetFileName("MEASURELIST")); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + QString msg = "Unable to open MEASURELIST [" + + file.fileName() + "]"; + throw IException(IException::User, msg, _FILEINFO_); + } + + editMeasuresList = new QMap< QString, QSet * >; + + QTextStream in(&file); + int lineNumber = 1; + while (!in.atEnd()) { + QString line = in.readLine(); + QStringList results = line.split(","); + if (results.size() < 2) { + QString msg = "Line " + QString::number(lineNumber) + " in the MEASURELIST does " + "not contain a Point ID and a cube filename separated by a comma"; + throw IException(IException::User, msg, _FILEINFO_); + } + + if (!editMeasuresList->contains(results[0])) + editMeasuresList->insert(results[0], new QSet); + + FileName cubeName(results[1]); + QString sn = SerialNumber::Compose(cubeName.expanded()); + (*editMeasuresList)[results[0]]->insert(sn); + + lineNumber++; + } + } + + // DefFile and cube serial number list for Validity check + Pvl *defFile = nullptr; + SerialNumberList *snValidationList = nullptr; + if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { + cneteditValidator = nullptr; + + // Open DefFile and validate its' keywords and value type + defFile = new Pvl(ui.GetFileName("DEFFILE")); + + // create cube serial number validation list + snValidationList = new SerialNumberList(ui.GetFileName("FROMLIST")); + } + + + // call cnetedit with ControlNet plus list files and/or definition files (if any) + Pvl results = cnetedit(cnet, ui, cpList, cubeSnList, editMeasuresList, defFile, snValidationList); + + // clean up + delete cpList; + cpList = nullptr; + + delete cubeSnList; + cubeSnList = nullptr; + + if (editMeasuresList != nullptr) { + QList points = editMeasuresList->keys(); + for (int i = 0; i < points.size(); i++) delete (*editMeasuresList)[points[i]]; + delete editMeasuresList; + editMeasuresList = nullptr; + } + + delete defFile; + defFile = nullptr; + + delete snValidationList; + snValidationList = nullptr; + + return results; + } + + + /** + * Edit a control network + * + * @param ControlNet cnet + * @param UserInterface ui + * @param ControlPointList cpList + * @param SerialNumberList cubeSnl + * @param QMap< QString, QSet * > editMeasuresList + * @param Pvl defFile + * @param SerialNumberList snValidationList + * + * @return Pvl results log file + * + * @throws IException::User "Invalid Deffile" + */ + Pvl cnetedit(ControlNet &cnet, UserInterface &ui, + ControlPointList *cpList, + SerialNumberList *cubeSnl, + QMap< QString, QSet * > *editMeasuresList, + Pvl *defFile, + SerialNumberList *snValidationList) { + + Pvl results; + + // 2016-12-08 Ian Humphrey - Set the QHash seed, otherwise output is ALWAYS slightly + // different. Note that in Qt4, the seed was constant, but in Qt5, the seed is + // created differently for each process. Fixes #4206. + qSetGlobalQHashSeed(0); + + // Reset the counts of points and measures deleted + numPointsDeleted = 0; + numMeasuresDeleted = 0; + + // Get global user parameters + bool ignore = ui.GetBoolean("IGNORE"); + deleteIgnored = ui.GetBoolean("DELETE"); + preservePoints = ui.GetBoolean("PRESERVE"); + retainRef = ui.GetBoolean("RETAIN_REFERENCE"); + ignoreAll = ui.GetBoolean("IGNOREALL"); + + // Data needed to keep track of ignored/deleted points and measures + keepLog = ui.WasEntered("LOG"); + ignoredPoints = NULL; + ignoredMeasures = NULL; + retainedReferences = NULL; + editLockedPoints = NULL; + editLockedMeasures = NULL; + + // If the user wants to keep a log, go ahead and populate it with all the + // existing ignored points and measures + if (keepLog && cnet.GetNumPoints() > 0) + populateLog(cnet, ignore); + + // List has Points Ids + bool processPoints = false; + if (cpList != nullptr) { + processPoints = true; + } + + // List has Cube file names + bool processCubes = false; + if (cubeSnl != nullptr) { + processCubes = true; + } + + // List has measurelist file names + bool processMeasures = false; + if (editMeasuresList != nullptr) { + processMeasures = true; + } + + if (ui.GetBoolean("UNLOCK")) { + if (processPoints) unlockPoints(cnet, *cpList); + if (processCubes) unlockCubes(cnet, *cubeSnl); + if (processMeasures) unlockMeasures(cnet, *editMeasuresList); + } + + /* + * As a first pass, just try and delete anything that's already ignored + * in the Control Network, if the user wants to delete ignored points and + * measures. Originally, this check was performed last, only if the user + * didn't specify any other deletion methods. However, performing this + * check first will actually improve the running time in cases where there + * are already ignored points and measures in the input network. The added + * cost of doing this check here actually doesn't add to the running time at + * all, because these same checks would need to have been done later + * regardless. + */ + if (deleteIgnored && cnet.GetNumPoints() > 0) { + Progress progress; + progress.SetText("Deleting Ignored in Input"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (point->IsIgnored()) { + deletePoint(cnet, cp); + } + else { + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + if (point->GetMeasure(cm)->IsIgnored()) { + if (cm == point->IndexOfRefMeasure() && ignoreAll) { + // If the reference is ignored and IgnoreAll is set, the point must ignored too + ignorePoint(cnet, point, "Reference measure ignored"); + } + else { + deleteMeasure(point, cm); + } + } + } + + // Check if the number of measures in the point is zero or there are too + // few measures in the point and we don't want to preserve them. + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + + progress.CheckStatus(); + } + } + + if (ignore) { + if (processPoints) ignorePoints(cnet, *cpList); + if (processCubes) ignoreCubes(cnet, *cubeSnl); + if (processMeasures) ignoreMeasures(cnet, *editMeasuresList); + + // Perform validity check + if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { + cneteditValidator = NULL; + + // First validate DefFile's keywords and value type + Pvl defFile(ui.GetFileName("DEFFILE")); + Pvl pvlTemplate("$ISISROOT/appdata/templates/cnet_validmeasure/validmeasure.def"); + Pvl pvlResults; + pvlTemplate.validatePvl(defFile, pvlResults); + if (pvlResults.groups() > 0 || pvlResults.keywords() > 0) { + results.addLogGroup(pvlResults.group(0)); + + QString sErrMsg = "Invalid Deffile\n"; + throw IException(IException::User, sErrMsg, _FILEINFO_); + } + + // Construct the validator from the user-specified definition file + cneteditValidator = new ControlNetValidMeasure(defFile); + + // User also provided a list of all serial numbers corresponding to every + // cube in the control network + checkAllMeasureValidity(cnet, snValidationList); + + // Delete the validator + if (cneteditValidator != NULL) { + delete cneteditValidator; + cneteditValidator = NULL; + } + + // Log the DEFFILE to the print file + results.addLogGroup(defFile.findGroup("ValidMeasure", Pvl::Traverse)); + } + } + + if (ui.GetBoolean("LOCK")) { + if (processPoints) lockPoints(cnet, *cpList); + if (processCubes) lockCubes(cnet, *cubeSnl); + if (processMeasures) lockMeasures(cnet, *editMeasuresList); + } + + // Log statistics + if (keepLog) { + Pvl outputLog; + + outputLog.addKeyword(PvlKeyword("PointsDeleted", toString(numPointsDeleted))); + outputLog.addKeyword(PvlKeyword("MeasuresDeleted", toString(numMeasuresDeleted))); + + PvlObject lockedLog = createLog( + "EditLocked", editLockedPoints, editLockedMeasures); + outputLog.addObject(lockedLog); + + outputLog.addObject(createLog("RetainedReferences", retainedReferences)); + + // Depending on whether the user chose to delete ignored points and + // measures, the log will either contain reasons for being ignored, or + // reasons for being deleted + PvlObject ignoredLog = createLog( + deleteIgnored ? "Deleted" : "Ignored", ignoredPoints, ignoredMeasures); + outputLog.addObject(ignoredLog); + + // Write the log + QString logFileName = ui.GetFileName("LOG"); + outputLog.write(logFileName); + + // Delete the structures keeping track of the ignored points and measures + delete ignoredPoints; + ignoredPoints = NULL; + + delete ignoredMeasures; + ignoredMeasures = NULL; + + delete retainedReferences; + retainedReferences = NULL; + + delete editLockedPoints; + editLockedPoints = NULL; + + delete editLockedMeasures; + editLockedMeasures = NULL; + } + + // Write the network + cnet.Write(ui.GetFileName("ONET")); + + return results; + } + + + /** + * After any modification to a point's measures or ignored status, this check + * should be performed to determine if the changes should result in the point's + * deletion. + * + * @param point The Control Point recently modified + * + * @return Whether or not the point should be deleted + */ + bool shouldDelete(ControlPoint *point){ + + if(!deleteIgnored) + return false; + + else{ + + if ( point->GetNumMeasures() == 0 && !preservePoints) + return true; + + + if (point->GetType() != ControlPoint::Fixed && point->GetNumMeasures()< 2 ){ + + if(preservePoints && point->GetNumMeasures() == 1) + return false; + + return true; //deleteIgnore = TRUE or else we would not be here + } + + + if( point->IsIgnored() ) + return true; + + return false; + } + } + + + /** + * Set the point at the given index in the control network to ignored, and add + * a new keyword to the list of ignored points with a cause for the ignoring, + * if the user wished to keep a log. + * + * @param cnet The Control Network being modified + * @param point The Control Point we wish to ignore + * @param cause A prose description of why the point was ignored (for logging) + */ + void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause) { + ControlPoint::Status result = point->SetIgnored(true); + + logResult(result == ControlPoint::Success ? ignoredPoints : editLockedPoints, + point->GetId(), cause); + } + + + /** + * Set the measure to be ignored, and add a new keyword to the list of ignored + * measures if the user wished to keep a log. + * + * @param cnet The Control Network being modified + * @param point The Control Point of the Control Measure we wish to ignore + * @param measure The Control Measure we wish to ignore + * @param cause A prose description of why the measure was ignored (for + * logging) + */ + void ignoreMeasure(ControlNet &cnet, ControlPoint *point, + ControlMeasure *measure, QString cause) { + ControlMeasure::Status result = measure->SetIgnored(true); + + logResult( + result == ControlMeasure::Success ? ignoredMeasures : editLockedMeasures, + point->GetId(), measure->GetCubeSerialNumber(), cause); + + if (ignoreAll && measure->Parent()->GetRefMeasure() == measure) { + foreach (ControlMeasure *cm, measure->Parent()->getMeasures()) { + if (!cm->IsIgnored()) + ignoreMeasure(cnet, measure->Parent(), cm, "Reference ignored"); + } + } + } + + + /** + * Delete the point, record how many points and measures have been deleted. + * + * @param cnet The Control Network being modified + * @param cp Index into the Control Network for the point we wish to delete + */ + void deletePoint(ControlNet &cnet, int cp) { + ControlPoint *point = cnet.GetPoint(cp); + + // Do the edit lock check up front so we don't accidentally log that a point + // was deleted when in fact it was not + if (!point->IsEditLocked()) { + numMeasuresDeleted += point->GetNumMeasures(); + numPointsDeleted++; + + if (keepLog) { + // If the point's being deleted but it wasn't set to ignore, it can only + // be because the point has two few measures remaining + if (!point->IsIgnored()) + ignorePoint(cnet, point, "Too few measures"); + + // For any measures not ignored, mark their cause for deletion as being + // caused by the point's deletion + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + ControlMeasure *measure = point->GetMeasure(cm); + if (!measure->IsIgnored()) + ignoreMeasure(cnet, point, measure, "Point deleted"); + } + } + + cnet.DeletePoint(cp); + } + else { + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + if (point->GetMeasure(cm)->IsEditLocked()) { + ignorePoint(cnet, point, "EditLocked point skipped"); + } + } + } + } + + + /** + * Delete the measure, increment the count of measures deleted. + * + * @param point The Control Point of the Control Measure we wish to delete + * @param cm Index into the Control Network for the measure we wish to delete + */ + void deleteMeasure(ControlPoint *point, int cm) { + if (point->Delete(cm) == ControlMeasure::Success) numMeasuresDeleted++; + } + + + /** + * Seed the log with points and measures already ignored. + * + * @param cnet The Control Network being modified + */ + void populateLog(ControlNet &cnet, bool ignore) { + ignoredPoints = new QMap; + ignoredMeasures = new QMap; + + retainedReferences = new QMap; + + editLockedPoints = new QMap; + editLockedMeasures = new QMap; + + Progress progress; + progress.SetText("Initializing Log File"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = 0; cp < cnet.GetNumPoints(); cp++) { + ControlPoint *point = cnet.GetPoint(cp); + + if (point->IsIgnored()) { + ignorePoint(cnet, point, "Ignored from input"); + } + + for (int cm = 0; cm < point->GetNumMeasures(); cm++) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (measure->IsIgnored()) { + if (cm == point->IndexOfRefMeasure() && ignoreAll) { + if (ignore && !point->IsIgnored()) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + + ignoreMeasure(cnet, point, measure, "Ignored from input"); + } + } + + progress.CheckStatus(); + } + } + + + void unlockPoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Unlocking Points"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { + point->SetEditLock(false); + } + progress.CheckStatus(); + } + } + + + /** + * Iterates over the points in the Control Network looking for a match in the + * list of Control Points to be ignored. If a match is found, ignore the + * point, and if the DELETE option was selected, the point will then be deleted + * from the network. + * + * @param cnet The Control Network being modified + * @param cpList List of Control Points + */ + void ignorePoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Comparing Points to POINTLIST"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + // Compare each Point Id listed with the Point in the + // Control Network for according exclusion + if (!point->IsIgnored() && cpList.HasControlPoint(point->GetId())) { + ignorePoint(cnet, point, "Point ID in POINTLIST"); + } + + if (deleteIgnored) { + //look for previously ignored control points + if (point->IsIgnored()) { + deletePoint(cnet, cp); + } + else { + //look for previously ignored control measures + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + if (point->GetMeasure(cm)->IsIgnored() && deleteIgnored) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + } + + progress.CheckStatus(); + } + } + + + /** + * Lock points. + * + * @param ControlNet Input ControlNet + * @param ControlPointList List of points to lock + */ + void lockPoints(ControlNet &cnet, ControlPointList &cpList) { + Progress progress; + progress.SetText("Locking Points"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + if (!point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { + point->SetEditLock(true); + } + progress.CheckStatus(); + } + } + + + /** + * Unlock cubes. + * + * @param ControlNet Input ControlNet + * @param SerialNumberList List of cubes to unlock + */ + void unlockCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Unlocking Cubes"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { + measure->SetEditLock(false); + } + } + progress.CheckStatus(); + } + } + + + /** + * Iterates over the list of Control Measures in the Control Network and + * compares measure serial numbers with those in the input list of serial + * numbers to be ignored. If a match is found, ignore the measure. If the + * DELETE option was selected, the measure will then be deleted from the + * network. + * + * @param cnet The Control Network being modified + * @param snl List of Serial Numbers to be ignored + */ + void ignoreCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Comparing Measures to CUBELIST"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + // Compare each Serial Number listed with the serial number in the + // Control Measure for according exclusion + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { + ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); + } + + QString serialNumber = measure->GetCubeSerialNumber(); + + if (snl.hasSerialNumber(serialNumber)) { + QString cause = "Serial Number in CUBELIST"; + if (cm == point->IndexOfRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { + ignoreMeasure(cnet, point, measure, cause); + + if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + + // also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + + progress.CheckStatus(); + } + } + + + /** + * Lock cubes. + * + * @param ControlNet Input ControlNet + * @param SerialNumberList List of cubes to Lock + */ + void lockCubes(ControlNet &cnet, SerialNumberList &snl) { + Progress progress; + progress.SetText("Locking Cubes"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (!measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { + measure->SetEditLock(true); + } + } + progress.CheckStatus(); + } + } + + + /** + * Unlock measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to unlock + */ + void unlockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Unlocking Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measure->IsEditLocked() && measureSet->contains(serialNumber)) { + measure->SetEditLock(false); + } + } + } + progress.CheckStatus(); + } + } + + + /** + * Ignore measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to ignore + */ + void ignoreMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Ignoring Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + // Compare each Serial Number listed with the serial number in the + // Control Measure for according exclusion + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { + ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); + } + + QString serialNumber = measure->GetCubeSerialNumber(); + if (measureSet->contains(serialNumber)) { + QString cause = "Measure in MEASURELIST"; + if (cm == point->IndexOfRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { + ignoreMeasure(cnet, point, measure, cause); + + if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + + // also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) { + deletePoint(cnet, cp); + } + } + + progress.CheckStatus(); + } + } + + + /** + * Lock measures. + * + * @param ControlNet Input ControlNet + * @param QMap< QString, QSet * > Measures to lock + */ + void lockMeasures(ControlNet &cnet, + QMap< QString, QSet * > &editMeasures) { + + Progress progress; + progress.SetText("Locking Measures"); + progress.SetMaximumSteps(cnet.GetNumPoints()); + progress.CheckStatus(); + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + QString id = point->GetId(); + if (editMeasures.contains(id)) { + QSet *measureSet = editMeasures[id]; + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + QString serialNumber = measure->GetCubeSerialNumber(); + if (!measure->IsEditLocked() && measureSet->contains(serialNumber)) { + measure->SetEditLock(true); + } + } + } + progress.CheckStatus(); + } + } + + + /** + * Compare each measure in the Control Network against tolerances specified in + * the input DEFFILE. Ignore any measure whose values fall outside the valid + * tolerances, and delete it if the user specified to do so. + * + * @param cnet The Control Network being modified + * @param serialNumbers List of all Serial Numbers in the network + */ + void checkAllMeasureValidity(ControlNet &cnet, SerialNumberList *serialNumbers) { + + QList cnetSerials = cnet.GetCubeSerials(); + Progress progress; + progress.SetText("Checking Measure Validity"); + progress.SetMaximumSteps(cnetSerials.size()); + progress.CheckStatus(); + + foreach (QString serialNumber, cnetSerials) { + + Cube *cube = NULL; + Camera *camera = NULL; + if (cneteditValidator->IsCubeRequired()) { + if (!serialNumbers->hasSerialNumber(serialNumber)) { + QString msg = "Serial Number [" + serialNumber + "] contains no "; + msg += "matching cube in FROMLIST"; + throw IException(IException::User, msg, _FILEINFO_); + } + + cube = new Cube; + cube->open(serialNumbers->fileName(serialNumber)); + + if (cneteditValidator->IsCameraRequired()) { + try { + camera = cube->camera(); + } + catch (IException &e) { + QString msg = "Cannot Create Camera for Image:" + cube->fileName(); + throw IException(e, IException::User, msg, _FILEINFO_); + } + } + } + + QList measures = cnet.GetMeasuresInCube(serialNumber); + for (int cm = 0; cm < measures.size(); cm++) { + ControlMeasure *measure = measures[cm]; + ControlPoint *point = measure->Parent(); + + if (!measure->IsIgnored()) { + MeasureValidationResults results = + validateMeasure(measure, cube, camera); + + if (!results.isValid()) { + QString failure = results.toString(); + QString cause = "Validity Check " + failure; + + if (measure == point->GetRefMeasure() && retainRef) { + logResult(retainedReferences, point->GetId(), cause); + } + else { + ignoreMeasure(cnet, point, measure, cause); + + if (measure == point->GetRefMeasure() && ignoreAll) { + ignorePoint(cnet, point, "Reference measure ignored"); + } + } + } + } + } + + delete cube; + progress.CheckStatus(); + } + + for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { + ControlPoint *point = cnet.GetPoint(cp); + + for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { + ControlMeasure *measure = point->GetMeasure(cm); + + // Also look for previously ignored control measures + if (deleteIgnored && measure->IsIgnored()) { + deleteMeasure(point, cm); + } + } + + // Check if there are too few measures in the point or the point was + // previously ignored + if (shouldDelete(point)) + deletePoint(cnet, cp); + } + } + + + /** + * Test an individual measure against the user-specified tolerances and return + * the result. + * + * @param measure Measure to be tested + * @param cube Cube with serial number matching that of the current measure + * @param camera Camera associated with cube + * + * @return The results of validating the measure as an object containing the + * validity and a formatted error (or success) message + */ + MeasureValidationResults validateMeasure(const ControlMeasure *measure, + Cube *cube, Camera *camera) { + + MeasureValidationResults results = + cneteditValidator->ValidStandardOptions(measure, cube, camera); + + return results; + } + + + void logResult(QMap *pointsLog, QString pointId, QString cause) { + if (keepLog) { + // Label the keyword as the Point ID, and make the cause into the value + (*pointsLog)[pointId] = cause; + } + } + + + void logResult(QMap *measuresLog, + QString pointId, QString serial, QString cause) { + + if (keepLog) { + // Make the keyword label the measure Serial Number, and the cause into the + // value + PvlKeyword measureMessage(PvlKeyword(serial, cause)); + + // Using a map to make accessing by Point ID a O(1) to O(lg n) operation + if (measuresLog->contains(pointId)) { + // If the map already has a group for the given Point ID, simply add the + // new measure to it + PvlGroup &pointGroup = (*measuresLog)[pointId]; + pointGroup.addKeyword(measureMessage); + } + else { + // Else there is no group for the Point ID of the measure being ignored, + // so make a new group, add the measure, and insert it into the map + PvlGroup pointGroup(pointId); + pointGroup.addKeyword(measureMessage); + (*measuresLog)[pointId] = pointGroup; + } + } + } + + + /** + * Create points log. + * + * @param QString Label for points log + * @param QMap Points map + * + * @return PvlObject Points log + */ + PvlObject createLog(QString label, QMap *pointsMap) { + PvlObject pointsLog(label); + + QList pointIds = pointsMap->keys(); + for (int i = 0; i < pointIds.size(); i++) { + QString pointId = pointIds.at(i); + pointsLog.addKeyword(PvlKeyword(pointId, (*pointsMap)[pointId])); + } + + return pointsLog; + } + + + /** + * Create measures log. + * + * @param QString Label for measures log + * @param QMap Points map + * @param QMap Measures map + * + * @return PvlObject Measures log + */ + PvlObject createLog(QString label, + QMap *pointsMap, QMap *measuresMap) { + + PvlObject editLog(label); + + PvlObject pointsLog = createLog("Points", pointsMap); + editLog.addObject(pointsLog); + + // Get all the groups of measures from the map + PvlObject measuresLog("Measures"); + QList measureGroups = measuresMap->values(); + + for (int i = 0; i < measureGroups.size(); i++) + measuresLog.addGroup(measureGroups.at(i)); + + editLog.addObject(measuresLog); + return editLog; + } +} + + diff --git a/isis/src/control/apps/cnetedit/cnetedit.h b/isis/src/control/apps/cnetedit/cnetedit.h new file mode 100644 index 0000000000..d8d054b974 --- /dev/null +++ b/isis/src/control/apps/cnetedit/cnetedit.h @@ -0,0 +1,27 @@ +/** This is free and unencumbered software released into the public domain. + +The authors of ISIS do not claim copyright on the contents of this file. +For more details about the LICENSE terms and the AUTHORS, you will +find files of those names at the top level of this repository. **/ + +/* SPDX-License-Identifier: CC0-1.0 */ +#ifndef cnetedit_h +#define cnetedit_h + +#include "UserInterface.h" + +namespace Isis{ + class ControlNet; + class ControlPointList; + class SerialNumberList; + + extern Pvl cnetedit(UserInterface &ui); + extern Pvl cnetedit(ControlNet &cnet, UserInterface &ui, + ControlPointList *cpList=nullptr, + SerialNumberList *cubeSnl=nullptr, + QMap< QString, QSet * > *editMeasuresList=nullptr, + Pvl *defFile=nullptr, + SerialNumberList *validationSnl=nullptr); +} + +#endif diff --git a/isis/src/control/apps/cnetedit/main.cpp b/isis/src/control/apps/cnetedit/main.cpp index efb4e3aec2..0eab06ab54 100644 --- a/isis/src/control/apps/cnetedit/main.cpp +++ b/isis/src/control/apps/cnetedit/main.cpp @@ -5,1059 +5,40 @@ For more details about the LICENSE terms and the AUTHORS, you will find files of those names at the top level of this repository. **/ /* SPDX-License-Identifier: CC0-1.0 */ - #define GUIHELPERS #include "Isis.h" -#include -#include -#include -#include -#include - -#include "ControlMeasure.h" -#include "ControlNet.h" -#include "ControlNetValidMeasure.h" -#include "ControlPoint.h" -#include "ControlPointList.h" -#include "Cube.h" -#include "FileName.h" -#include "MeasureValidationResults.h" -#include "Progress.h" +#include "Application.h" #include "Pvl.h" -#include "PvlGroup.h" -#include "PvlKeyword.h" -#include "PvlObject.h" -#include "SerialNumber.h" -#include "SerialNumberList.h" -#include "IException.h" +#include "UserInterface.h" +#include "cnetedit.h" #include "GuiEditFile.h" + using namespace std; using namespace Isis; -// Deletion test -bool shouldDelete(ControlPoint *point); - -// Mutator methods -void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause); -void ignoreMeasure(ControlNet &cnet, ControlPoint *point, - ControlMeasure *measure, QString cause); -void deletePoint(ControlNet &cnet, int cp); -void deleteMeasure(ControlPoint *point, int cm); - -// Edit passes -void populateLog(ControlNet &cnet, bool ignore); - -void unlockPoints(ControlNet &cnet, ControlPointList &cpList); -void ignorePoints(ControlNet &cnet, ControlPointList &cpList); -void lockPoints(ControlNet &cnet, ControlPointList &cpList); - -void unlockCubes(ControlNet &cnet, SerialNumberList &snl); -void ignoreCubes(ControlNet &cnet, SerialNumberList &snl); -void lockCubes(ControlNet &cnet, SerialNumberList &snl); - -void unlockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); -void ignoreMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); -void lockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures); - -void checkAllMeasureValidity(ControlNet &cnet, QString cubeList); - -// Validity test -MeasureValidationResults validateMeasure(const ControlMeasure *measure, - Cube *cube, Camera *camera); - -// Logging helpers -void logResult(QMap *pointsLog, QString pointId, QString cause); -void logResult(QMap *measuresLog, - QString pointId, QString serial, QString cause); -PvlObject createLog(QString label, QMap *pointsMap); -PvlObject createLog(QString label, - QMap *pointsMap, QMap *measuresMap); - void PrintTemp(); void EditDefFile(); map GuiHelpers() { - map helper; - helper["PrintTemp"] = (void *) PrintTemp; - helper["EditDefFile"] = (void *) EditDefFile; - return helper; + map helper; + helper["PrintTemp"] = (void *) PrintTemp; + helper["EditDefFile"] = (void *) EditDefFile; + return helper; } -// Global variables -int numPointsDeleted; -int numMeasuresDeleted; - -bool deleteIgnored; -bool preservePoints; -bool retainRef; -bool keepLog; -bool ignoreAll; - -QMap *ignoredPoints; -QMap *ignoredMeasures; -QMap *retainedReferences; -QMap *editLockedPoints; -QMap *editLockedMeasures; - -ControlNetValidMeasure *validator; - -// Main program void IsisMain() { - // 2016-12-08 Ian Humphrey - Set the QHash seed, otherwise output is ALWAYS slightly - // different. Note that in Qt4, the seed was constant, but in Qt5, the seed is - // created differently for each process. Fixes #4206. - qSetGlobalQHashSeed(0); - - // Reset the counts of points and measures deleted - numPointsDeleted = 0; - numMeasuresDeleted = 0; - - // Interface for getting user parameters UserInterface &ui = Application::GetUserInterface(); - - // Get global user parameters - bool ignore = ui.GetBoolean("IGNORE"); - deleteIgnored = ui.GetBoolean("DELETE"); - preservePoints = ui.GetBoolean("PRESERVE"); - retainRef = ui.GetBoolean("RETAIN_REFERENCE"); - ignoreAll = ui.GetBoolean("IGNOREALL"); - - // Data needed to keep track of ignored/deleted points and measures - keepLog = ui.WasEntered("LOG"); - ignoredPoints = NULL; - ignoredMeasures = NULL; - retainedReferences = NULL; - editLockedPoints = NULL; - editLockedMeasures = NULL; - - // Test if file exists, throw exception if it does not, continue otherwise. - FileName cnetInput(ui.GetFileName("CNET")); - if (!cnetInput.fileExists()) { - QString msg = "The control network [" + cnetInput.expanded() + "] entered for CNET does not exist."; - throw IException(IException::User, msg, _FILEINFO_); - } - - // If the user wants to keep a log, go ahead and populate it with all the - // existing ignored points and measures - ControlNet cnet(ui.GetFileName("CNET")); - if (keepLog && cnet.GetNumPoints() > 0) - populateLog(cnet, ignore); - - // List has Points Ids - bool processPoints = false; - ControlPointList *cpList = NULL; - if (ui.WasEntered("POINTLIST") && cnet.GetNumPoints() > 0) { - processPoints = true; - QString pointlistFileName = ui.GetFileName("POINTLIST"); - cpList = new ControlPointList((FileName) pointlistFileName); - } - - // List has Cube file names - bool processCubes = false; - SerialNumberList *cubeSnl = NULL; - if (ui.WasEntered("CUBELIST") && cnet.GetNumPoints() > 0) { - processCubes = true; - QString ignorelistFileName = ui.GetFileName("CUBELIST"); - cubeSnl = new SerialNumberList(ignorelistFileName); - } - - // List has measurelist file names - bool processMeasures = false; - QMap< QString, QSet * > *editMeasures = NULL; - if (ui.WasEntered("MEASURELIST") && cnet.GetNumPoints() > 0) { - processMeasures = true; - editMeasures = new QMap< QString, QSet * >; - - QFile file(ui.GetFileName("MEASURELIST")); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QString msg = "Unable to open MEASURELIST [" + - file.fileName() + "]"; - throw IException(IException::User, msg, _FILEINFO_); - } - - QTextStream in(&file); - int lineNumber = 1; - while (!in.atEnd()) { - QString line = in.readLine(); - QStringList results = line.split(","); - if (results.size() < 2) { - QString msg = "Line " + QString::number(lineNumber) + " in the MEASURELIST does " - "not contain a Point ID and a cube filename separated by a comma"; - throw IException(IException::User, msg, _FILEINFO_); - } - - if (!editMeasures->contains(results[0])) - editMeasures->insert(results[0], new QSet); - - FileName cubeName(results[1]); - QString sn = SerialNumber::Compose(cubeName.expanded()); - (*editMeasures)[results[0]]->insert(sn); - - lineNumber++; - } - } - - if (ui.GetBoolean("UNLOCK")) { - if (processPoints) unlockPoints(cnet, *cpList); - if (processCubes) unlockCubes(cnet, *cubeSnl); - if (processMeasures) unlockMeasures(cnet, *editMeasures); - } - - /* - * As a first pass, just try and delete anything that's already ignored - * in the Control Network, if the user wants to delete ignored points and - * measures. Originally, this check was performed last, only if the user - * didn't specify any other deletion methods. However, performing this - * check first will actually improve the running time in cases where there - * are already ignored points and measures in the input network. The added - * cost of doing this check here actually doesn't add to the running time at - * all, because these same checks would need to have been done later - * regardless. - */ - if (deleteIgnored && cnet.GetNumPoints() > 0) { - Progress progress; - progress.SetText("Deleting Ignored in Input"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (point->IsIgnored()) { - deletePoint(cnet, cp); - } - else { - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - if (point->GetMeasure(cm)->IsIgnored()) { - if (cm == point->IndexOfRefMeasure() && ignoreAll) { - // If the reference is ignored and IgnoreAll is set, the point must ignored too - ignorePoint(cnet, point, "Reference measure ignored"); - } - else { - deleteMeasure(point, cm); - } - } - } - - // Check if the number of measures in the point is zero or there are too - // few measures in the point and we don't want to preserve them. - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - - progress.CheckStatus(); - } - } - - if (ignore) { - if (processPoints) ignorePoints(cnet, *cpList); - if (processCubes) ignoreCubes(cnet, *cubeSnl); - if (processMeasures) ignoreMeasures(cnet, *editMeasures); - - // Perform validity check - if (ui.GetBoolean("CHECKVALID") && cnet.GetNumPoints() > 0) { - validator = NULL; - - // First validate DefFile's keywords and value type - Pvl defFile(ui.GetFileName("DEFFILE")); - Pvl pvlTemplate("$ISISROOT/appdata/templates/cnet_validmeasure/validmeasure.def"); - Pvl pvlResults; - pvlTemplate.validatePvl(defFile, pvlResults); - if (pvlResults.groups() > 0 || pvlResults.keywords() > 0) { - Application::Log(pvlResults.group(0)); - QString sErrMsg = "Invalid Deffile\n"; - throw IException(IException::User, sErrMsg, _FILEINFO_); - } - - // Construct the validator from the user-specified definition file - validator = new ControlNetValidMeasure(&defFile); - - // User also provided a list of all serial numbers corresponding to every - // cube in the control network - QString cubeList = ui.GetFileName("FROMLIST"); - checkAllMeasureValidity(cnet, cubeList); - - // Delete the validator - if (validator != NULL) { - delete validator; - validator = NULL; - } - - // Log the DEFFILE to the print file - Application::Log(defFile.findGroup("ValidMeasure", Pvl::Traverse)); - } - } - - if (ui.GetBoolean("LOCK")) { - if (processPoints) lockPoints(cnet, *cpList); - if (processCubes) lockCubes(cnet, *cubeSnl); - if (processMeasures) lockMeasures(cnet, *editMeasures); - } - - // Log statistics - if (keepLog) { - Pvl outputLog; - - outputLog.addKeyword(PvlKeyword("PointsDeleted", toString(numPointsDeleted))); - outputLog.addKeyword(PvlKeyword("MeasuresDeleted", toString(numMeasuresDeleted))); - - PvlObject lockedLog = createLog( - "EditLocked", editLockedPoints, editLockedMeasures); - outputLog.addObject(lockedLog); - - outputLog.addObject(createLog("RetainedReferences", retainedReferences)); - - // Depending on whether the user chose to delete ignored points and - // measures, the log will either contain reasons for being ignored, or - // reasons for being deleted - PvlObject ignoredLog = createLog( - deleteIgnored ? "Deleted" : "Ignored", ignoredPoints, ignoredMeasures); - outputLog.addObject(ignoredLog); - - // Write the log - QString logFileName = ui.GetFileName("LOG"); - outputLog.write(logFileName); - - // Delete the structures keeping track of the ignored points and measures - delete ignoredPoints; - ignoredPoints = NULL; - - delete ignoredMeasures; - ignoredMeasures = NULL; - - delete retainedReferences; - retainedReferences = NULL; - - delete editLockedPoints; - editLockedPoints = NULL; - - delete editLockedMeasures; - editLockedMeasures = NULL; - } - - delete cpList; - cpList = NULL; - - delete cubeSnl; - cubeSnl = NULL; - - if (editMeasures != NULL) { - QList points = editMeasures->keys(); - for (int i = 0; i < points.size(); i++) delete (*editMeasures)[points[i]]; - delete editMeasures; - editMeasures = NULL; - } - - // Write the network - cnet.Write(ui.GetFileName("ONET")); -} - - -/** - * After any modification to a point's measures or ignored status, this check - * should be performed to determine if the changes should result in the point's - * deletion. - * - * @param point The Control Point recently modified - * - * @return Whether or not the point should be deleted - */ - -bool shouldDelete(ControlPoint *point){ - - if(!deleteIgnored) - return false; - - - else{ - - if ( point->GetNumMeasures() == 0 && !preservePoints) - return true; - - - if (point->GetType() != ControlPoint::Fixed && point->GetNumMeasures()< 2 ){ - - if(preservePoints && point->GetNumMeasures() == 1) - return false; - - return true; //deleteIgnore = TRUE or else we would not be here - } - - - if( point->IsIgnored() ) - return true; - - return false; - - } - - -} - - - - - -/* -bool shouldDelete(ControlPoint *point) { - // If the point only has one measure, then unless it's a fixed point or the - // user wishes to preserve such points, it should be deleted. As a side - // effect, this check will also delete empty points that satisfy this - // condition without having to do the next check - if ((point->GetNumMeasures() < 2 && !preservePoints) && - point->GetType() != ControlPoint::Fixed) - return true; - - // A point without any measures should always be deleted - if (point->GetNumMeasures() == 0) - return true; - - // If the user wants to delete ignored points, and this point is ignored, - // then it follows that it should be deleted - if (point->IsIgnored() && deleteIgnored) - return true; - - // Otherwise, the point looks good - return false; -} -*/ - -/** - * Set the point at the given index in the control network to ignored, and add - * a new keyword to the list of ignored points with a cause for the ignoring, - * if the user wished to keep a log. - * - * @param cnet The Control Network being modified - * @param point The Control Point we wish to ignore - * @param cause A prose description of why the point was ignored (for logging) - */ -void ignorePoint(ControlNet &cnet, ControlPoint *point, QString cause) { - ControlPoint::Status result = point->SetIgnored(true); - - logResult(result == ControlPoint::Success ? ignoredPoints : editLockedPoints, - point->GetId(), cause); -} - - -/** - * Set the measure to be ignored, and add a new keyword to the list of ignored - * measures if the user wished to keep a log. - * - * @param cnet The Control Network being modified - * @param point The Control Point of the Control Measure we wish to ignore - * @param measure The Control Measure we wish to ignore - * @param cause A prose description of why the measure was ignored (for - * logging) - */ -void ignoreMeasure(ControlNet &cnet, ControlPoint *point, - ControlMeasure *measure, QString cause) { - ControlMeasure::Status result = measure->SetIgnored(true); - - logResult( - result == ControlMeasure::Success ? ignoredMeasures : editLockedMeasures, - point->GetId(), measure->GetCubeSerialNumber(), cause); - - if (ignoreAll && measure->Parent()->GetRefMeasure() == measure) { - foreach (ControlMeasure *cm, measure->Parent()->getMeasures()) { - if (!cm->IsIgnored()) - ignoreMeasure(cnet, measure->Parent(), cm, "Reference ignored"); - } - } -} - - -/** - * Delete the point, record how many points and measures have been deleted. - * - * @param cnet The Control Network being modified - * @param cp Index into the Control Network for the point we wish to delete - */ -void deletePoint(ControlNet &cnet, int cp) { - ControlPoint *point = cnet.GetPoint(cp); - - // Do the edit lock check up front so we don't accidentally log that a point - // was deleted when in fact it was not - if (!point->IsEditLocked()) { - numMeasuresDeleted += point->GetNumMeasures(); - numPointsDeleted++; - - if (keepLog) { - // If the point's being deleted but it wasn't set to ignore, it can only - // be because the point has two few measures remaining - if (!point->IsIgnored()) - ignorePoint(cnet, point, "Too few measures"); - - // For any measures not ignored, mark their cause for deletion as being - // caused by the point's deletion - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - ControlMeasure *measure = point->GetMeasure(cm); - if (!measure->IsIgnored()) - ignoreMeasure(cnet, point, measure, "Point deleted"); - } - } - - cnet.DeletePoint(cp); - } - else { - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - if (point->GetMeasure(cm)->IsEditLocked()) { - ignorePoint(cnet, point, "EditLocked point skipped"); - } - } - } -} - - -/** - * Delete the measure, increment the count of measures deleted. - * - * @param cnet The Control Network being modified - * @param point The Control Point of the Control Measure we wish to delete - * @param cm Index into the Control Network for the measure we wish to delete - */ -void deleteMeasure(ControlPoint *point, int cm) { - if (point->Delete(cm) == ControlMeasure::Success) numMeasuresDeleted++; -} - - -/** - * Seed the log with points and measures already ignored. - * - * @param cnet The Control Network being modified - */ -void populateLog(ControlNet &cnet, bool ignore) { - ignoredPoints = new QMap; - ignoredMeasures = new QMap; - - retainedReferences = new QMap; - - editLockedPoints = new QMap; - editLockedMeasures = new QMap; - - Progress progress; - progress.SetText("Initializing Log File"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = 0; cp < cnet.GetNumPoints(); cp++) { - ControlPoint *point = cnet.GetPoint(cp); - - if (point->IsIgnored()) { - ignorePoint(cnet, point, "Ignored from input"); - } - - for (int cm = 0; cm < point->GetNumMeasures(); cm++) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (measure->IsIgnored()) { - if (cm == point->IndexOfRefMeasure() && ignoreAll) { - if (ignore && !point->IsIgnored()) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - - ignoreMeasure(cnet, point, measure, "Ignored from input"); - } - } - - progress.CheckStatus(); - } -} - - -void unlockPoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Unlocking Points"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { - point->SetEditLock(false); - } - progress.CheckStatus(); - } -} - - -/** - * Iterates over the points in the Control Network looking for a match in the - * list of Control Points to be ignored. If a match is found, ignore the - * point, and if the DELETE option was selected, the point will then be deleted - * from the network. - * - * @param fileName Name of the file containing the list of Control Points - * @param cnet The Control Network being modified - */ -void ignorePoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Comparing Points to POINTLIST"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - // Compare each Point Id listed with the Point in the - // Control Network for according exclusion - if (!point->IsIgnored() && cpList.HasControlPoint(point->GetId())) { - ignorePoint(cnet, point, "Point ID in POINTLIST"); - } - - if (deleteIgnored) { - //look for previously ignored control points - if (point->IsIgnored()) { - deletePoint(cnet, cp); - } - else { - //look for previously ignored control measures - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - if (point->GetMeasure(cm)->IsIgnored() && deleteIgnored) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - } - - progress.CheckStatus(); - } -} - - -void lockPoints(ControlNet &cnet, ControlPointList &cpList) { - Progress progress; - progress.SetText("Locking Points"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - if (!point->IsEditLocked() && cpList.HasControlPoint(point->GetId())) { - point->SetEditLock(true); - } - progress.CheckStatus(); - } -} - - -void unlockCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Unlocking Cubes"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { - measure->SetEditLock(false); - } - } - progress.CheckStatus(); - } -} - - -/** - * Iterates over the list of Control Measures in the Control Network and - * compares measure serial numbers with those in the input list of serial - * numbers to be ignored. If a match is found, ignore the measure. If the - * DELETE option was selected, the measure will then be deleted from the - * network. - * - * @param fileName Name of the file containing the list of Serial Numbers to be - * ignored - * @param cnet The Control Network being modified - */ -void ignoreCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Comparing Measures to CUBELIST"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - // Compare each Serial Number listed with the serial number in the - // Control Measure for according exclusion - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { - ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); - } - - QString serialNumber = measure->GetCubeSerialNumber(); - - if (snl.hasSerialNumber(serialNumber)) { - QString cause = "Serial Number in CUBELIST"; - if (cm == point->IndexOfRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { - ignoreMeasure(cnet, point, measure, cause); - - if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - - //also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - - progress.CheckStatus(); - } -} - - -void lockCubes(ControlNet &cnet, SerialNumberList &snl) { - Progress progress; - progress.SetText("Locking Cubes"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (!measure->IsEditLocked() && snl.hasSerialNumber(serialNumber)) { - measure->SetEditLock(true); - } - } - progress.CheckStatus(); - } -} - - -void unlockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Unlocking Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measure->IsEditLocked() && measureSet->contains(serialNumber)) { - measure->SetEditLock(false); - } - } - } - progress.CheckStatus(); - } -} - - -void ignoreMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Ignoring Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - // Compare each Serial Number listed with the serial number in the - // Control Measure for according exclusion - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - if (!point->IsIgnored() && point->GetMeasure(cm)->IsEditLocked()) { - ignoreMeasure(cnet, point, measure, "EditLocked measure skipped"); - } - - QString serialNumber = measure->GetCubeSerialNumber(); - if (measureSet->contains(serialNumber)) { - QString cause = "Measure in MEASURELIST"; - if (cm == point->IndexOfRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else if (!measure->IsIgnored() || cm == point->IndexOfRefMeasure()) { - ignoreMeasure(cnet, point, measure, cause); - - if (cm == point->IndexOfRefMeasure() && !point->IsIgnored() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - - //also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) { - deletePoint(cnet, cp); - } - } - - progress.CheckStatus(); - } -} - - -void lockMeasures(ControlNet &cnet, - QMap< QString, QSet * > &editMeasures) { - - Progress progress; - progress.SetText("Locking Measures"); - progress.SetMaximumSteps(cnet.GetNumPoints()); - progress.CheckStatus(); - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - QString id = point->GetId(); - if (editMeasures.contains(id)) { - QSet *measureSet = editMeasures[id]; - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - QString serialNumber = measure->GetCubeSerialNumber(); - if (!measure->IsEditLocked() && measureSet->contains(serialNumber)) { - measure->SetEditLock(true); - } - } - } - progress.CheckStatus(); - } -} - - -/** - * Compare each measure in the Control Network against tolerances specified in - * the input DEFFILE. Ignore any measure whose values fall outside the valid - * tolerances, and delete it if the user specified to do so. - * - * @param cnet The Control Network being modified - * @param cubeList Name of the file containing the list of all Serial Numbers - * in the network - */ -void checkAllMeasureValidity(ControlNet &cnet, QString cubeList) { - SerialNumberList serialNumbers(cubeList); - - QList cnetSerials = cnet.GetCubeSerials(); - Progress progress; - progress.SetText("Checking Measure Validity"); - progress.SetMaximumSteps(cnetSerials.size()); - progress.CheckStatus(); - - foreach (QString serialNumber, cnetSerials) { - - Cube *cube = NULL; - Camera *camera = NULL; - if (validator->IsCubeRequired()) { - if (!serialNumbers.hasSerialNumber(serialNumber)) { - QString msg = "Serial Number [" + serialNumber + "] contains no "; - msg += "matching cube in FROMLIST"; - throw IException(IException::User, msg, _FILEINFO_); - } - - cube = new Cube; - cube->open(serialNumbers.fileName(serialNumber)); - - if (validator->IsCameraRequired()) { - try { - camera = cube->camera(); - } - catch (IException &e) { - QString msg = "Cannot Create Camera for Image:" + cube->fileName(); - throw IException(e, IException::User, msg, _FILEINFO_); - } - } - } - - QList measures = cnet.GetMeasuresInCube(serialNumber); - for (int cm = 0; cm < measures.size(); cm++) { - ControlMeasure *measure = measures[cm]; - ControlPoint *point = measure->Parent(); - - if (!measure->IsIgnored()) { - MeasureValidationResults results = - validateMeasure(measure, cube, camera); - - if (!results.isValid()) { - QString failure = results.toString(); - QString cause = "Validity Check " + failure; - - if (measure == point->GetRefMeasure() && retainRef) { - logResult(retainedReferences, point->GetId(), cause); - } - else { - ignoreMeasure(cnet, point, measure, cause); - - if (measure == point->GetRefMeasure() && ignoreAll) { - ignorePoint(cnet, point, "Reference measure ignored"); - } - } - } - } - } - - delete cube; - progress.CheckStatus(); - } - - for (int cp = cnet.GetNumPoints() - 1; cp >= 0; cp--) { - ControlPoint *point = cnet.GetPoint(cp); - - for (int cm = point->GetNumMeasures() - 1; cm >= 0; cm--) { - ControlMeasure *measure = point->GetMeasure(cm); - - // Also look for previously ignored control measures - if (deleteIgnored && measure->IsIgnored()) { - deleteMeasure(point, cm); - } - } - - // Check if there are too few measures in the point or the point was - // previously ignored - if (shouldDelete(point)) - deletePoint(cnet, cp); - } -} - - -/** - * Test an individual measure against the user-specified tolerances and return - * the result. - * - * @param curMeasure The measure currently being tested - * @param cubeName Name of the cube whose serial number matches that of the - * current measure - * - * @return The results of validating the measure as an object containing the - * validity and a formatted error (or success) message - */ -MeasureValidationResults validateMeasure(const ControlMeasure *measure, - Cube *cube, Camera *camera) { - - MeasureValidationResults results = - validator->ValidStandardOptions(measure, cube, camera); - - return results; -} - - -void logResult(QMap *pointsLog, QString pointId, QString cause) { - if (keepLog) { - // Label the keyword as the Point ID, and make the cause into the value - (*pointsLog)[pointId] = cause; - } -} - - -void logResult(QMap *measuresLog, - QString pointId, QString serial, QString cause) { - - if (keepLog) { - // Make the keyword label the measure Serial Number, and the cause into the - // value - PvlKeyword measureMessage(PvlKeyword(serial, cause)); - - // Using a map to make accessing by Point ID a O(1) to O(lg n) operation - if (measuresLog->contains(pointId)) { - // If the map already has a group for the given Point ID, simply add the - // new measure to it - PvlGroup &pointGroup = (*measuresLog)[pointId]; - pointGroup.addKeyword(measureMessage); - } - else { - // Else there is no group for the Point ID of the measure being ignored, - // so make a new group, add the measure, and insert it into the map - PvlGroup pointGroup(pointId); - pointGroup.addKeyword(measureMessage); - (*measuresLog)[pointId] = pointGroup; - } - } -} - - -PvlObject createLog(QString label, QMap *pointsMap) { - PvlObject pointsLog(label); - - QList pointIds = pointsMap->keys(); - for (int i = 0; i < pointIds.size(); i++) { - QString pointId = pointIds.at(i); - pointsLog.addKeyword(PvlKeyword(pointId, (*pointsMap)[pointId])); - } - - return pointsLog; + Pvl results = cnetedit(ui); } - -PvlObject createLog(QString label, - QMap *pointsMap, QMap *measuresMap) { - - PvlObject editLog(label); - - PvlObject pointsLog = createLog("Points", pointsMap); - editLog.addObject(pointsLog); - - // Get all the groups of measures from the map - PvlObject measuresLog("Measures"); - QList measureGroups = measuresMap->values(); - - for (int i = 0; i < measureGroups.size(); i++) - measuresLog.addGroup(measureGroups.at(i)); - - editLog.addObject(measuresLog); - return editLog; -} - - /** - * Helper function to print out template to session log. - */ + * Helper function to print out template to session log. + */ void PrintTemp() { UserInterface &ui = Application::GetUserInterface(); @@ -1069,12 +50,13 @@ void PrintTemp() { Isis::Application::GuiLog(userTemp); } + /** - * Helper function to be able to edit the Deffile. - * Opens an editor to edit the file. - * - * @author Sharmila Prasad (5/23/2011) - */ + * Helper function to be able to edit the Deffile. + * Opens an editor to edit the file. + * + * @author Sharmila Prasad (5/23/2011) + */ void EditDefFile(void) { UserInterface &ui = Application::GetUserInterface(); QString sDefFile = ui.GetAsString("DEFFILE"); diff --git a/isis/src/control/apps/cnetedit/tsts/Makefile b/isis/src/control/apps/cnetedit/tsts/Makefile deleted file mode 100644 index 322a6262d1..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree - diff --git a/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile b/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile deleted file mode 100644 index 72ee5aa8c8..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/checkValid/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# normal test - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CHECKVALID=yes \ - FROMLIST=$(OUTPUT)/list.lis \ - DEFFILE=$(INPUT)/deffile.def \ - RETAIN_REFERENCE=yes > /dev/null; - -# test with IGNOREALL=true -# $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet2.net \ - LOG=$(OUTPUT)/log2.txt \ - CHECKVALID=yes \ - IGNOREALL=true \ - FROMLIST=$(OUTPUT)/list.lis \ - DEFFILE=$(INPUT)/deffile.def > /dev/null; - -# Cleanup - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/default/Makefile b/isis/src/control/apps/cnetedit/tsts/default/Makefile deleted file mode 100644 index 39b4d39908..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/default/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) CNET=$(INPUT)/cnet.net ONET=$(OUTPUT)/cnet.net > /dev/null; diff --git a/isis/src/control/apps/cnetedit/tsts/editLock/Makefile b/isis/src/control/apps/cnetedit/tsts/editLock/Makefile deleted file mode 100644 index eb0e6f149c..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/editLock/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/locked.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - IGNORE=no DELETE=no LOCK=yes \ - ONET=$(OUTPUT)/locked.net > /dev/null; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/unlocked.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - UNLOCK=yes IGNORE=no DELETE=no \ - ONET=$(OUTPUT)/unlocked.net > /dev/null; - - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/errors/Makefile b/isis/src/control/apps/cnetedit/tsts/errors/Makefile deleted file mode 100644 index a2630fbc54..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/errors/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# Test with a non-existant file - echo -e "Error Test: Non-existant file" > $(OUTPUT)/error_temp.txt; - if [[ `$(APPNAME) CNET=$(INPUT)/cnet.net \ - ONET=$(OUTPUT)/cnet.net \ - 2>> $(OUTPUT)/error_temp.txt \ - > /dev/null` ]]; \ - then \ - true; \ - fi; - - $(SED) 's+\[/.*/input/+\[input/+' $(OUTPUT)/error_temp.txt > $(OUTPUT)/error.txt; - -# Cleanup - $(RM) $(OUTPUT)/error_temp.txt; diff --git a/isis/src/control/apps/cnetedit/tsts/ignore/Makefile b/isis/src/control/apps/cnetedit/tsts/ignore/Makefile deleted file mode 100644 index c7f763dc8f..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignore/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(CAT) $(INPUT)/measurelist.txt | sed 's#X#$(INPUT)#' \ - > $(OUTPUT)/measurelist.txt; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - CUBELIST=$(OUTPUT)/list.lis \ - MEASURELIST=$(OUTPUT)/measurelist.txt \ - ONET=$(OUTPUT)/cnet.net DELETE=no \ - IGNOREALL=yes \ - log=$(OUTPUT)/log.txt > /dev/null; - $(RM) $(OUTPUT)/list.lis $(OUTPUT)/measurelist.txt; diff --git a/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile b/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile deleted file mode 100644 index d8fd565c07..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignoreMeasuresPoints/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile b/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile deleted file mode 100644 index 77cc4386f2..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/ignorePoints/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: -# original test - $(APPNAME) CNET=$(INPUT)/cnet.net \ - POINTLIST=$(INPUT)/points.lis \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - -# test IGNOREALL=true with ignored input measures / points - $(APPNAME) CNET=$(INPUT)/cnet.net \ - POINTLIST=$(INPUT)/points.lis \ - IGNOREALL = true \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; diff --git a/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile b/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile deleted file mode 100644 index 8dc1357221..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/measurelist/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - -# general test - $(CAT) $(INPUT)/bad_measures.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - MEASURELIST=$(OUTPUT)/list.lis \ - DELETE=no \ - ONET=$(OUTPUT)/cnet.net > /dev/null; - -# test with IGNOREALL = true, DELETE=no measure that is a reference for a non-ignored point - $(CAT) $(INPUT)/bad_measures2.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list2.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log2.txt \ - MEASURELIST=$(OUTPUT)/list2.lis \ - IGNOREALL=true \ - DELETE=no \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - -# test with DELETE=yes - $(CAT) $(INPUT)/bad_measures.lis | $(SED) "s#,#,$(INPUT)/#" \ - > $(OUTPUT)/list.lis; - - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log3.txt \ - MEASURELIST=$(OUTPUT)/list.lis \ - ONET=$(OUTPUT)/cnet3.net > /dev/null; - -# Cleanup - $(RM) $(OUTPUT)/list.lis; - $(RM) $(OUTPUT)/list2.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile b/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile deleted file mode 100644 index 93096a1e09..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/noDelete/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - DELETE = false \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile b/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile deleted file mode 100644 index 779e410259..0000000000 --- a/isis/src/control/apps/cnetedit/tsts/preservePoints/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -APPNAME = cnetedit - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/*.cub > $(OUTPUT)/list.lis; - $(APPNAME) CNET=$(INPUT)/cnet.net \ - LOG=$(OUTPUT)/log.txt \ - CUBELIST=$(OUTPUT)/list.lis \ - POINTLIST=$(INPUT)/points.lis \ - DELETE = true \ - PRESERVE = true \ - ONET=$(OUTPUT)/cnet2.net > /dev/null; - $(RM) $(OUTPUT)/list.lis; diff --git a/isis/tests/FunctionalTestsCnetedit.cpp b/isis/tests/FunctionalTestsCnetedit.cpp new file mode 100644 index 0000000000..a7cca587e7 --- /dev/null +++ b/isis/tests/FunctionalTestsCnetedit.cpp @@ -0,0 +1,2943 @@ +#include +#include +#include + +#include "cnetedit.h" +#include "ControlMeasure.h" +#include "ControlNet.h" +#include "ControlPoint.h" +#include "FileList.h" +#include "Progress.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "PvlObject.h" +#include "LineManager.h" +#include "spiceinit.h" +#include "TempFixtures.h" +#include "TestUtilities.h" + +#include "gtest/gtest.h" + +using namespace Isis; + +static QString APP_XML = FileName("$ISISROOT/bin/xml/cnetedit.xml").expanded(); + +class CneteditCheckValid : public TempTestingFiles { + protected: + QString cnet11File; + QString chkValidCubeListFile; + QString defFile; + + void SetUp() override { + TempTestingFiles::SetUp(); + + chkValidCubeListFile = tempDir.path() + "/chkValidCubeList.lis"; + cnet11File = "data/cnetedit/cnet_11pts.pvl"; + defFile = tempDir.path() + "/defFile.def"; + + std::ifstream label1Strm("data/cnetedit/PSP_002733_1880_RED4.crop.pvl"); + std::ifstream label2Strm("data/cnetedit/PSP_002733_1880_RED5.crop.pvl"); + + Pvl label1; + Pvl label2; + + label1Strm >> label1; + label2Strm >> label2; + + Cube cube1; + Cube cube2; + + cube1.fromLabel(tempDir.path() + "/PSP_002733_1880_RED4.crop.cub", + label1, "rw"); + cube2.fromLabel(tempDir.path() + "/PSP_002733_1880_RED5.crop.cub", + label2, "rw"); + + LineManager line(cube1); + LineManager line2(cube2); + + for(line.begin(); !line.end(); line++) { + for(int i = 0; i < line.size(); i++) { + line[i] = (double)(i+1); + } + cube1.write(line); + } + for(line2.begin(); !line2.end(); line2++) { + for(int i = 0; i < line2.size(); i++) { + line2[i] = (double)(i+1); + } + cube2.write(line2); + } + cube1.reopen("rw"); + cube2.reopen("rw"); + + // set up cube list for checkValid tests + FileList chkValidCubeList; + chkValidCubeList.append(cube1.fileName()); + chkValidCubeList.append(cube2.fileName()); + chkValidCubeList.write(chkValidCubeListFile); + + // set up pvl def file + PvlGroup validMeasureGroup("ValidMeasure"); + validMeasureGroup.addKeyword(PvlKeyword("MinDN", "-1000000")); + validMeasureGroup.addKeyword(PvlKeyword("MaxDN", "1000000")); + validMeasureGroup.addKeyword(PvlKeyword("MinEmission", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxEmission", "135")); + validMeasureGroup.addKeyword(PvlKeyword("MinIncidence", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxIncidence", "135")); + validMeasureGroup.addKeyword(PvlKeyword("MinResolution", "0")); + validMeasureGroup.addKeyword(PvlKeyword("MaxResolution", "1000")); + validMeasureGroup.addKeyword(PvlKeyword("PixelsFromEdge", "5")); + validMeasureGroup.addKeyword(PvlKeyword("SampleResidual", "5")); + validMeasureGroup.addKeyword(PvlKeyword("LineResidual", "5")); + validMeasureGroup.addKeyword(PvlKeyword("SampleShift", "3")); + validMeasureGroup.addKeyword(PvlKeyword("LineShift", "5")); + Pvl p; + p.addGroup(validMeasureGroup); + p.write(defFile); + } +}; + +class CneteditMeasureList : public TempTestingFiles { + protected: + QString cnet35File; + QString badMeasureListFile1; + QString badMeasureListFile2; + + void SetUp() override { + TempTestingFiles::SetUp(); + + cnet35File = "data/cnetedit/cnet_35pts.pvl"; + badMeasureListFile1 = tempDir.path() + "badMeasureList1.lis"; + badMeasureListFile2 = tempDir.path() + "badMeasureList2.lis"; + + // setup badMeasureLists with pvl label files + FileList badMeasureList1; + badMeasureList1.append("I24827003RDR_bndry_32,data/cnetedit/I10101002RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_32,data/cnetedit/I10413004RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I23604003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_35,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_36,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_36,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_50,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_53,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_56,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList1.append("I24827003RDR_bndry_8,data/cnetedit/I07873009RDR.dstr.cub.label.pvl"); + badMeasureList1.write(badMeasureListFile1); + + FileList badMeasureList2(badMeasureList1); + badMeasureList2.append("I24827003RDR_bndry_11,data/cnetedit/I24827003RDR.dstr.cub.label.pvl"); + badMeasureList2.write(badMeasureListFile2); + } +}; + + +class Cnetedit : public TempTestingFiles { + protected: + QString cnet108File; + QString pointListFile; + QString cubeListFile; + QString measureListFile; + + void SetUp() override { + TempTestingFiles::SetUp(); + + cnet108File = "data/cnetedit/cnet_108pts.pvl"; + pointListFile = tempDir.path() + "/pointList.lis"; + cubeListFile = tempDir.path() + "/cubeList.lis"; + measureListFile = tempDir.path() + "measureList.lis"; + + // set up cube list + FileList cubeList; + cubeList.append("data/cnetedit/e0902065.cal.sub.cub"); + cubeList.write(cubeListFile); + + // set up measureList + FileList measureList; + measureList.append("new0001,data/cnetedit/e0902065.cal.sub.cub"); + measureList.write(measureListFile); + + // set up point list + FileList pointList; + pointList.append("new0007"); + pointList.append("new0050"); + pointList.append("new0001"); + pointList.append("new0036"); + pointList.append("new0020"); + pointList.append("new0008"); + pointList.write(pointListFile); + } +}; + + +/** + * FunctionalTestCneteditCheckValid + * + * Cnetedit test of check valid functionality. + * Input ... + * 1) ControlNet with 11 points (data/cnetedit/cnet_11pts.pvl) + * 2) two image cube list file (data/cnetedit/PSP_002733_1880_RED4.crop.cub; + * data/cnetedit/PSP_002733_1880_RED5.crop.cub) + * 3) def file + * 4) CHECKVALID = yes + * 5) RETAIN_REFERENCE=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditCheckValid, FunctionalTestCneteditCheckValid) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet11File, + "log=" + tempDir.path() + "/log.txt", + "checkvalid=yes", + "fromlist=" + chkValidCubeListFile, + "retain_reference=yes", + "deffile=" + defFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 4); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 8); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // check retained references + PvlObject retainedRefs = log.findObject("RetainedReferences"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0001"), + "Validity Check failed: Sample Residual is greater than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0007"), + "Validity Check failed: Sample Residual is greater than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, retainedRefs.findKeyword("pointregTest0008"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0002"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0003"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0004"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0011"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup pointregTest0002 = deletedMeasures.findGroup("pointregTest0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Point deleted"); + PvlGroup pointregTest0003 = deletedMeasures.findGroup("pointregTest0003"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5 Line Residual is greater than tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + PvlGroup pointregTest0004 = deletedMeasures.findGroup("pointregTest0004"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Point deleted"); + PvlGroup pointregTest0011 = deletedMeasures.findGroup("pointregTest0011"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 7); + EXPECT_EQ(outNet.GetNumValidPoints(), 7); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 14); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * FunctionalTestCneteditCheckValidIgnoreAll + * + * Cnetedit test of check valid functionality with IGNOREALL=YES. + * Input ... + * 1) ControlNet with 11 points (data/cnetedit/cnet_11pts.pvl) + * 2) two image cube list file (data/cnetedit/PSP_002733_1880_RED4.crop.cub; + * data/cnetedit/PSP_002733_1880_RED5.crop.cub) + * 3) def file + * 4) CHECKVALID = yes + * 5) IGNOREALL=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditCheckValid, FunctionalTestCneteditCheckValidIgnoreAll) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet11File, + "log=" + tempDir.path() + "/log.txt", + "checkvalid=yes", + "ignoreall=yes", + "fromlist=" + chkValidCubeListFile, + "deffile=" + defFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 7); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 14); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0001"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0002"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0003"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0004"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0007"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0008"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("pointregTest0011"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup pointregTest0001 = deletedMeasures.findGroup("pointregTest0001"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0001. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Sample Residual is greater than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0001. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0002 = deletedMeasures.findGroup("pointregTest0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0002. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0003 = deletedMeasures.findGroup("pointregTest0003"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5 Line Residual is greater than tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0003. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + PvlGroup pointregTest0004 = deletedMeasures.findGroup("pointregTest0004"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0004. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0007 = deletedMeasures.findGroup("pointregTest0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0007. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Sample Residual is greater than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0007. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0008 = deletedMeasures.findGroup("pointregTest0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0008. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Validity Check failed: Pixels From Edge is less than " + "tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0008. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Reference ignored"); + PvlGroup pointregTest0011 = deletedMeasures.findGroup("pointregTest0011"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED5/2"), + "Validity Check failed: Pixels From Edge is less than" + " tolerance 5"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, pointregTest0011. + findKeyword("MRO/HIRISE/856864216:41044/RED4/2"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 4); + EXPECT_EQ(outNet.GetNumValidPoints(), 4); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 8); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditDefault + * + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditDefault) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 8); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 21); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0031. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0031. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0032. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0032. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0038. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0038. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0064. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0065. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 100); + EXPECT_EQ(outNet.GetNumValidPoints(), 100); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 240); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditEditlock + * + * Cnetedit test of edit lock functionality. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) points list file + * 4) ignore=no + * 5) delete=no + * 6) lock=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditEditlock) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "cubelist=" + cubeListFile, + "pointlist=" + pointListFile, + "ignore=no", + "delete=no", + "lock=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").groups(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0065"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 103); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 6); //should be 6 + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 10); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 52); +} + + +/** + * CneteditEditUnlock + * + * Cnetedit test of edit lock functionality with unlock=yes. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) points list file + * 4) ignore=no + * 5) delete=no + * 6) unlock=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, FunctionalTestCneteditEditUnlock) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "cubelist=" + cubeListFile, + "pointlist=" + pointListFile, + "ignore=no", + "delete=no", + "unlock=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditLog; + + try { + cneteditLog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0039. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0065"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0067. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, new0068. + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 103); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 10); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditError + * + * Cnetedit test given a nonexistant input ControlNet. + */ +TEST_F(Cnetedit, FunctionalTestCneteditError) { + + QVector args = {"cnet=cnet.net", + "onet=cnet.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl log; + + try { + log = cnetedit(ui); + FAIL() << "Expected Exception for an invalid control network"; + } + catch(IException &e) { + EXPECT_TRUE(e.toString().toLatin1().contains("Invalid control network")) + << e.toString().toStdString(); + } +} + + +/** + * CneteditIgnore + * + * Cnetedit test with IGNOREALL=YES + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) measure list file (new0001,data/cnetedit/e0902065.cal.sub.cub) + * 4) delete=no + * 5) ignoreall=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnore) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "measurelist=" + measureListFile, + "onet=" + tempDir.path() + "/out.net", +// "onet=/Users/kledmundson/ISISDev/cnetedit/Oct242023cne/ISIS3/isis/tests/data/cnetedit/ignore/truth/gtestCnet1.net", + "delete=no", + "ignoreall=yes", + "log=" + tempDir.path() + "/log.txt" +// "log=/Users/kledmundson/ISISDev/cnetedit/Oct242023cne/ISIS3/isis/tests/data/cnetedit/ignore/truth/gtestLog1.txt", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check ignored points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0001"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0002"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0038"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0039"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0067"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup new0001 = ignoredMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0001.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Measure in MEASURELIST"); + + PvlGroup new0002 = ignoredMeasures.findGroup("new0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0038 = ignoredMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + + new0038.deleteKeyword("MGS/718369703:160/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0064"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0065 = ignoredMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0065.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0065.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0066 = ignoredMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0066.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0066.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + + new0067.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 97); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 61); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnoreMeasuresPoints + * + * Cnetedit test with ignore measures and points lists. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnoreMeasuresPoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 16); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 77); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0002"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0066"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0002 = deletedMeasures.findGroup("new0002"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0002.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 92); + EXPECT_EQ(outNet.GetNumValidPoints(), 92); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 184); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnorePoints + * + * Cnetedit test with ignore points list. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) point list file + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnorePoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 14); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 33); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0064"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0066"). + findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 94); + EXPECT_EQ(outNet.GetNumValidPoints(), 94); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 228); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditIgnoreAllPoints + * + * Cnetedit test with ignore points list and IGNOREALL=YES. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) point list file + * 3) ignoreall=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditIgnoreAllPoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "ignoreall=yes", + "onet=" + tempDir.path() + "/out.net" + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 15); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 35); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0038"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0066"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0067"), + "Reference measure ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED "), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0038 = deletedMeasures.findGroup("new0038"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + + new0038.deleteKeyword("MGS/718369703:160/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0038.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0065.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0065.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + + new0066.deleteKeyword("MGS/688540926:0/MOC-WA/RED"); + new0066.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Reference ignored"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + + new0067.deleteKeyword("MGS/691204200:96/MOC-WA/RED"); + + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 93); + EXPECT_EQ(outNet.GetNumValidPoints(), 93); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 226); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditNoDelete + * + * Cnetedit test with DELETE=NO. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * 4) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditNoDelete) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check ignored points + PvlObject ignoredPoints = log.findObject("Ignored").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredPoints.findKeyword("new0068"), + "Ignored from input"); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0001"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0002"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = ignoredMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0064"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0065 = ignoredMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0066 = ignoredMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0067 = ignoredMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = ignoredMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 108); + EXPECT_EQ(outNet.GetNumValidPoints(), 97); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 261); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 55); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditPreservePoints + * + * Cnetedit test with PRESERVE=YES. + * Input ... + * 1) ControlNet with 108 points (data/cnetedit/cnet_108pts.pvl) + * 2) one image cube list file (data/cnetedit/e0902065.cal.sub.cub) + * 3) point list file + * 4) preserve=yes + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(Cnetedit, CneteditPreservePoints) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet108File, + "cubelist=" + cubeListFile, + "log=" + tempDir.path() + "/log.txt", + "pointlist=" + pointListFile, + "preserve=yes", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 12); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 73); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0001"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0007"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0008"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0020"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0031"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0032"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0036"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0039"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0050"), + "Point ID in POINTLIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0064"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0065"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("new0068"), + "Ignored from input"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup new0001 = deletedMeasures.findGroup("new0001"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0001.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0002"). + findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0007 = deletedMeasures.findGroup("new0007"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0007.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0008 = deletedMeasures.findGroup("new0008"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0008.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0020 = deletedMeasures.findGroup("new0020"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0020.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0031 = deletedMeasures.findGroup("new0031"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0031.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0032 = deletedMeasures.findGroup("new0032"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0032.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0036 = deletedMeasures.findGroup("new0036"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0036.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0038"). + findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0039 = deletedMeasures.findGroup("new0039"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0039.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0050 = deletedMeasures.findGroup("new0050"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0050.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0064 = deletedMeasures.findGroup("new0064"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0064.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0065 = deletedMeasures.findGroup("new0065"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Point deleted"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0065.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Point deleted"); + PvlGroup new0066 = deletedMeasures.findGroup("new0066"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0066.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Serial Number in CUBELIST"); + PvlGroup new0067 = deletedMeasures.findGroup("new0067"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0067.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + PvlGroup new0068 = deletedMeasures.findGroup("new0068"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/718369703:160/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/688540926:0/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + new0068.findKeyword("MGS/691204200:96/MOC-WA/RED"), + "Ignored from input"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0069"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0070"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0071"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0072"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0073"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0074"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0075"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0076"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0077"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0078"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0079"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0080"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0081"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0082"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0083"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0084"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0085"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0086"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0087"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0088"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0089"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0090"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0091"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0092"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0093"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0094"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0095"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0096"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0097"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0098"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0099"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0100"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0101"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0102"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0103"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0104"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0105"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0106"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0107"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedMeasures.findGroup("new0108"). + findKeyword("MGS/688540926:0/MOC-WA/RED "), + "Serial Number in CUBELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 96); + EXPECT_EQ(outNet.GetNumValidPoints(), 96); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 188); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditMeasureListGeneral + * General cnetedit test with bad measures list. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) list file of bad measures + * 3) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListGeneral) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile1, + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // no ignored points + EXPECT_EQ(log.findObject("Ignored").findObject("Points").keywords(), 0); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup bndry_32 = ignoredMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + PvlGroup bndry_35 = ignoredMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = ignoredMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_50"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_53"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_56"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_8"). + findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 35); + EXPECT_EQ(outNet.GetNumValidPoints(), 35); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 91); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 11); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + +/** + * CneteditMeasureListIgnoreAll + * + * Cnetedit test with bad measures list and IGNOREALL=YES; DELETE=NO. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) bad measure list + * 3) ignoreall=yes + * 4) delete=no + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListIgnoreAll) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile2, + "ignoreall=yes", + "delete=no", + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 0); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"), 0); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // no ignored points + EXPECT_EQ(log.findObject("Ignored").findObject("Points").keywords(), 1); + + // check ignored measures + PvlObject ignoredMeasures = log.findObject("Ignored").findObject("Measures"); + PvlGroup bndry_32 = ignoredMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + PvlGroup bndry_35 = ignoredMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = ignoredMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_50"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_53"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_56"). + findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, ignoredMeasures.findGroup("I24827003RDR_bndry_8"). + findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 35); + EXPECT_EQ(outNet.GetNumValidPoints(), 34); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 91); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 13); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} + + +/** + * CneteditMeasureListDelete + * + * Cnetedit test with bad measures list and delete=yes. + * Input ... + * 1) ControlNet with 35 points (data/cnetedit/cnet_35pts.pvl) + * 2) bad measure list + * 4) delete=yes (default) + * + * Output ... + * 1) edited ControlNet + * 2) Pvl log file. + */ +TEST_F(CneteditMeasureList, CneteditMeasureListDelete) { + QTemporaryDir tempDir; + + QVector args = {"cnet=" + cnet35File, + "log=" + tempDir.path() + "/log.txt", + "measurelist=" + badMeasureListFile1, + "onet=" + tempDir.path() + "/out.net", + }; + + UserInterface ui(APP_XML, args); + + Pvl cneteditlog; + + try { + cneteditlog = cnetedit(ui); + } + catch(IException &e) { + FAIL() << e.toString().toStdString().c_str() << std::endl; + } + + // read back log file + Pvl log; + try { + log.read(tempDir.path()+ "/log.txt"); + } + catch (IException &e) { + FAIL() << "Unable to open log file: " << e.what() << std::endl; + } + + // check number of deleted points and measures + EXPECT_EQ((int)log.findKeyword("PointsDeleted"), 5); + EXPECT_EQ((int)log.findKeyword("MeasuresDeleted"),16); + + // no edit locked points or measures + EXPECT_EQ(log.findObject("EditLocked").findObject("Points").keywords(), 0); + EXPECT_EQ(log.findObject("EditLocked").findObject("Measures").keywords(), 0); + + // no retained references + EXPECT_EQ(log.findObject("RetainedReferences").keywords(), 0); + + // check deleted points + PvlObject deletedPoints = log.findObject("Deleted").findObject("Points"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_32"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_50"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_53"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_56"), + "Too few measures"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, deletedPoints.findKeyword("I24827003RDR_bndry_8"), + "Too few measures"); + + // check deleted measures + PvlObject deletedMeasures = log.findObject("Deleted").findObject("Measures"); + PvlGroup bndry_32 = deletedMeasures.findGroup("I24827003RDR_bndry_32"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/766864399.204"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/764644820.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_32.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Point deleted"); + PvlGroup bndry_35 = deletedMeasures.findGroup("I24827003RDR_bndry_35"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/860700556.051"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_35.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_36 = deletedMeasures.findGroup("I24827003RDR_bndry_36"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_36.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + PvlGroup bndry_50 = deletedMeasures.findGroup("I24827003RDR_bndry_50"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_50.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_50.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_53 = deletedMeasures.findGroup("I24827003RDR_bndry_53"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_53.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_53.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_56 = deletedMeasures.findGroup("I24827003RDR_bndry_56"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_56.findKeyword("Odyssey/THEMIS_IR/869400711.102"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_56.findKeyword("Odyssey/THEMIS_IR/823680993.230"), + "Point deleted"); + PvlGroup bndry_8 = deletedMeasures.findGroup("I24827003RDR_bndry_8"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_8.findKeyword("Odyssey/THEMIS_IR/748799078.000"), + "Measure in MEASURELIST"); + EXPECT_PRED_FORMAT2(AssertQStringsEqual, + bndry_8.findKeyword("Odyssey/THEMIS_IR/760206015.230"), + "Point deleted"); + + // check output ControlNetwork + ControlNet outNet(tempDir.path() + "/out.net"); + EXPECT_EQ(outNet.GetNumPoints(), 30); + EXPECT_EQ(outNet.GetNumValidPoints(), 30); + EXPECT_EQ(outNet.GetNumEditLockPoints(), 0); + EXPECT_EQ(outNet.GetNumMeasures(), 75); + EXPECT_EQ(outNet.GetNumIgnoredMeasures(), 0); + EXPECT_EQ(outNet.GetNumEditLockMeasures(), 0); +} \ No newline at end of file diff --git a/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..bea220d69b --- /dev/null +++ b/isis/tests/data/cnetedit/I07873009RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 472 + + Group = Dimensions + Samples = 320 + Lines = 17936 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2003-09-23T15:42:25.400 + StopTime = 2003-09-23T15:52:23.262 + SpacecraftClockCount = 748799078.000 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I07873009RDR + ProductCreationTime = 2004-10-14T00:21:58 + ProductVersionId = 1.1 + OrbitNumber = 07873 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 7873 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 2 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map7.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map7.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 23023617 + Bytes = 8960 + Records = 140 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 117603812.11191 + CkTableEndTime = 117604414.30884 + CkTableOriginalSize = 17937 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map7.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 23032577 + Bytes = 4200 + Records = 75 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 117603812.11191 + SpkTableEndTime = 117604414.30884 + SpkTableOriginalSize = 17937.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map7.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 23036777 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 117603812.11191 + CkTableEndTime = 117604414.30884 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 266.33576028989 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 23036905 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 117603812.11191 + SpkTableEndTime = 117604414.30884 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 23037017 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 23073798 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_748799078.000_COMPUTED = b4105486f7099c41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 23037641 + Bytes = 31880 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 23069521 + Bytes = 4277 +End_Object +End diff --git a/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..84d977c639 --- /dev/null +++ b/isis/tests/data/cnetedit/I09477002RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-02-02T16:17:44.937 + StopTime = 2004-02-02T16:23:43.874 + SpacecraftClockCount = 760206015.230 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I09477002RDR + ProductCreationTime = 2004-10-14T18:27:41 + ProductVersionId = 1.1 + OrbitNumber = 09477 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 9477 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map9.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 129010729.38783 + CkTableEndTime = 129011095.24634 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 13997441 + Bytes = 1736 + Records = 31 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 129010729.38783 + SpkTableEndTime = 129011095.24634 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map9.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 13999177 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 129010729.38783 + CkTableEndTime = 129011095.24634 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 343.59609359065 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 13999305 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 129010729.38783 + SpkTableEndTime = 129011095.24634 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 13999417 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14024477 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_760206015.230_COMPUTED = e2727ca430c29e41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 14000041 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14019623 + Bytes = 4854 +End_Object +End diff --git a/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..3801944460 --- /dev/null +++ b/isis/tests/data/cnetedit/I10101002RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-03-25T01:17:41.845 + StopTime = 2004-03-25T01:23:40.774 + SpacecraftClockCount = 764644820.000 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I10101002RDR + ProductCreationTime = 2004-10-15T00:32:17 + ProductVersionId = 1.1 + OrbitNumber = 10101 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 10101 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map9.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 133449526.29696 + CkTableEndTime = 133449892.15548 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map9.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 13997441 + Bytes = 1568 + Records = 28 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 133449526.29696 + SpkTableEndTime = 133449892.15548 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map9.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 13999009 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 133449526.29696 + CkTableEndTime = 133449892.15548 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 9.5252197504187 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 13999137 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 133449526.29696 + SpkTableEndTime = 133449892.15548 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 13999249 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14024342 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_764644820.000_COMPUTED = 05661fd81cd19f41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 13999873 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14019455 + Bytes = 4887 +End_Object +End diff --git a/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..fa1d80b26f --- /dev/null +++ b/isis/tests/data/cnetedit/I10413004RDR.dstr.cub.label.pvl @@ -0,0 +1,387 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 450 + + Group = Dimensions + Samples = 320 + Lines = 3600 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = MAPPING + StartTime = 2004-04-19T17:50:38.067 + StopTime = 2004-04-19T17:52:38.067 + SpacecraftClockCount = 766864399.204 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I10413004RDR + ProductCreationTime = 2004-09-28T13:50:33 + ProductVersionId = 1.0 + OrbitNumber = 10413 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 10413 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_map10.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_map10.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 4673537 + Bytes = 2048 + Records = 32 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 135669102.51927 + CkTableEndTime = 135669229.77585 + CkTableOriginalSize = 3601 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_map10.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 4675585 + Bytes = 336 + Records = 6 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 135669102.51927 + SpkTableEndTime = 135669229.77585 + SpkTableOriginalSize = 3601.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_map10.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 4675921 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 135669102.51927 + CkTableEndTime = 135669229.77585 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 21.755944220554 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 4676049 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 135669102.51927 + SpkTableEndTime = 135669229.77585 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 4676161 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 4688865 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_766864399.204_COMPUTED = a08581dc4a2ca041 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 4676785 + Bytes = 7198 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 4683983 + Bytes = 4882 +End_Object +End diff --git a/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..3c7096ad62 --- /dev/null +++ b/isis/tests/data/cnetedit/I18400005RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 128 + + Group = Dimensions + Samples = 320 + Lines = 10768 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2006-02-06T08:12:21.766 + StopTime = 2006-02-06T08:18:20.703 + SpacecraftClockCount = 823680993.230 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 1 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I18400005RDR + ProductCreationTime = 2008-06-04T16:19:13 + ProductVersionId = 1.1 + OrbitNumber = 18400 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 18400 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext6.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext6.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 13991937 + Bytes = 9024 + Records = 141 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 192485606.20742 + CkTableEndTime = 192485972.06594 + CkTableOriginalSize = 10769 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext6.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 14000961 + Bytes = 1736 + Records = 31 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 192485606.20742 + SpkTableEndTime = 192485972.06594 + SpkTableOriginalSize = 10769.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext6.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 14002697 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 192485606.20742 + CkTableEndTime = 192485972.06594 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 7.7251945911519 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 14002825 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 192485606.20742 + SpkTableEndTime = 192485972.06594 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 14002937 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 14028182 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_823680993.230_COMPUTED = 68dbe1cb31f2a641 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 14003561 + Bytes = 19582 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 14023143 + Bytes = 5039 +End_Object +End diff --git a/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..b71f721e2f --- /dev/null +++ b/isis/tests/data/cnetedit/I23604003RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 320 + TileLines = 449 + + Group = Dimensions + Samples = 320 + Lines = 7184 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2007-04-10T19:24:04.439 + StopTime = 2007-04-10T19:28:03.903 + SpacecraftClockCount = 860700556.051 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 1 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I23604003RDR + ProductCreationTime = 2007-04-13T15:26:13 + ProductVersionId = 1.0 + OrbitNumber = 23604 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 23604 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 9 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext11.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext11.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 9261057 + Bytes = 3584 + Records = 56 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 229505108.63108 + CkTableEndTime = 229505355.18863 + CkTableOriginalSize = 7185 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext11.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 9264641 + Bytes = 896 + Records = 16 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 229505108.63108 + SpkTableEndTime = 229505355.18863 + SpkTableOriginalSize = 7185.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext11.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 9265537 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 229505108.63108 + CkTableEndTime = 229505355.18863 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 216.68369485425 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 9265665 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 229505108.63108 + SpkTableEndTime = 229505355.18863 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 9265777 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 9284827 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_860700556.051_COMPUTED = 56c4baa8f05bab41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 9266401 + Bytes = 13390 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 9279791 + Bytes = 5036 +End_Object +End diff --git a/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl b/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl new file mode 100644 index 0000000000..82e2439cc6 --- /dev/null +++ b/isis/tests/data/cnetedit/I24827003RDR.dstr.cub.label.pvl @@ -0,0 +1,388 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 160 + TileLines = 128 + + Group = Dimensions + Samples = 160 + Lines = 5384 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = MARS_ODYSSEY + InstrumentId = THEMIS_IR + TargetName = MARS + MissionPhaseName = EXTENDED-1 + StartTime = 2007-07-20T12:06:24.995 + StopTime = 2007-07-20T12:12:23.932 + SpacecraftClockCount = 869400711.102 + GainNumber = 16 + OffsetNumber = 2 + MissingScanLines = 0 + TimeDelayIntegration = ENABLED + SpatialSumming = 2 + SpacecraftClockOffset = 0.0 + End_Group + + Group = Archive + DataSetId = ODY-M-THM-3-IRRDR-V1.0 + ProducerId = ODY_THM_TEAM + ProductId = I24827003RDR + ProductCreationTime = 2008-01-04T17:31:37 + ProductVersionId = 1.0 + OrbitNumber = 24827 + FlightSoftwareVersionId = 1.00 + CommandSequenceNumber = 24827 + Description = "No Description Given" + End_Group + + Group = BandBin + OriginalBand = 7 + Center = 12.57 + Width = 0.81 + FilterNumber = 9 + End_Group + + Group = Kernels + NaifFrameCode = -53031 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, $odyssey/kernels/ck/m01_sc_ext12.bc, + $odyssey/kernels/fk/m01_v29.tf) + Instrument = Null + SpacecraftClock = $odyssey/kernels/sclk/ORB1_SCLKSCET.00184.tsc + InstrumentPosition = (Table, $odyssey/kernels/spk/m01_ext12.bsp) + InstrumentAddendum = $odyssey/kernels/iak/themisAddendum003.ti + ShapeModel = $base/dems/molaMarsPlanetaryRadius0005.cub + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 2 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 3588097 + Bytes = 5504 + Records = 86 + ByteOrder = Lsb + TimeDependentFrames = (-53000, 16, 1) + ConstantFrames = (-53031, -53030, -53000) + ConstantRotation = (0.0013835021734055, 0.011529976186854, + 0.99993257051207, 0.28811330695433, 0.95752799265849, + -0.011439651709814, -0.95759532594806, + 0.28810970640458, -0.0019971975093594) + CkTableStartTime = 238205250.8296 + CkTableEndTime = 238205615.29006 + CkTableOriginalSize = 5385 + Description = "Created by spiceinit" + Kernels = ($odyssey/kernels/ck/m01_sc_ext12.bc, + $odyssey/kernels/fk/m01_v29.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 3593601 + Bytes = 728 + Records = 13 + ByteOrder = Lsb + CacheType = HermiteSpline + SpkTableStartTime = 238205250.8296 + SpkTableEndTime = 238205615.29006 + SpkTableOriginalSize = 5385.0 + Description = "Created by spiceinit" + Kernels = $odyssey/kernels/spk/m01_ext12.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 3594329 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 238205250.8296 + CkTableEndTime = 238205615.29006 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 280.0343296642 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 3594457 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + SpkTableStartTime = 238205250.8296 + SpkTableEndTime = 238205615.29006 + SpkTableOriginalSize = 2.0 + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = CameraStatistics + StartByte = 3594569 + Bytes = 624 + Records = 12 + ByteOrder = Lsb + + Group = Field + Name = Name + Type = Text + Size = 20 + End_Group + + Group = Field + Name = Minimum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Maximum + Type = Double + Size = 1 + End_Group + + Group = Field + Name = Average + Type = Double + Size = 1 + End_Group + + Group = Field + Name = StandardDeviation + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 3609866 + Bytes = 4311 +End_Object + +Object = NaifKeywords + BODY499_RADII = (3396.19, 3396.19, 3376.2) + BODY_FRAME_CODE = 10014 + CLOCK_ET_-53_869400711.102_COMPUTED = b79a54827265ac41 + INS-53031_TRANSX = (0.0, 0.05, 0.0) + INS-53031_TRANSY = (0.0, 0.0, 0.05) + INS-53031_ITRANSS = (0.0, 20.0, 0.0) + INS-53031_ITRANSL = (0.0, 0.0, 20.0) +End_Object + +Object = Polygon + Name = Footprint + StartByte = 3595193 + Bytes = 9864 +End_Object + +Object = OriginalLabel + Name = IsisCube + StartByte = 3605057 + Bytes = 4809 +End_Object +End diff --git a/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl b/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl new file mode 100644 index 0000000000..945a054912 --- /dev/null +++ b/isis/tests/data/cnetedit/PSP_002733_1880_RED4.crop.pvl @@ -0,0 +1,518 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 128 + TileLines = 128 + + Group = Dimensions + Samples = 2048 + Lines = 2000 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = "MARS RECONNAISSANCE ORBITER" + InstrumentId = HIRISE + TargetName = Mars + StartTime = 2007-02-25T09:49:57.917 + StopTime = 2007-02-25T09:50:04.917 + ObservationStartCount = 856864216:41044 + SpacecraftClockStartCount = 856864216:53351 + SpacecraftClockStopCount = 856864223:53351 + ReadoutStartCount = 856864468:00780 + CalibrationStartTime = 2007-02-25T09:49:57.902 + CalibrationStartCount = 856864216:52387 + MissionPhaseName = "PRIMARY SCIENCE PHASE" + LineExposureDuration = 87.5000 + ScanExposureDuration = 87.5000 + DeltaLineTimerCount = 216 + Summing = 1 + Tdi = 128 + FocusPositionCount = 2023 + PoweredCpmmFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + CpmmNumber = 5 + CcdId = RED4 + ChannelNumber = 2 + LookupTableType = Stored + LookupTableNumber = 10 + LookupTableMinimum = -9998 + LookupTableMaximum = -9998 + LookupTableMedian = -9998 + LookupTableKValue = -9998 + StimulationLampFlag = (Off, Off, Off) + HeaterControlFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + OptBnchFlexureTemperature = 20.0215 + OptBnchMirrorTemperature = 20.1082 + OptBnchFoldFlatTemperature = 20.3683 + OptBnchFpaTemperature = 19.7615 + OptBnchFpeTemperature = 19.5881 + OptBnchLivingRmTemperature = 20.0215 + OptBnchBoxBeamTemperature = 20.1949 + OptBnchCoverTemperature = 19.9348 + FieldStopTemperature = 18.4616 + FpaPositiveYTemperature = 19.5881 + FpaNegativeYTemperature = 19.5881 + FpeTemperature = 17.7686 + PrimaryMirrorMntTemperature = 20.1082 + PrimaryMirrorTemperature = 20.455 + PrimaryMirrorBafTemperature = 3.34153 + MsTrussLeg0ATemperature = 19.8482 + MsTrussLeg0BTemperature = 19.9348 + MsTrussLeg120ATemperature = 19.4148 + MsTrussLeg120BTemperature = 20.1949 + MsTrussLeg240ATemperature = 20.5417 + MsTrussLeg240BTemperature = 20.6284 + BarrelBaffleTemperature = -12.4606 + SunShadeTemperature = -14.001 + SpiderLeg30Temperature = 16.1233 + SpiderLeg120Temperature = -9999 + SpiderLeg240Temperature = -9999 + SecMirrorMtrRngTemperature = 19.7615 + SecMirrorTemperature = 20.8885 + SecMirrorBaffleTemperature = -9.71965 + IeaTemperature = 25.9221 + FocusMotorTemperature = 21.3221 + IePwsBoardTemperature = 17.8502 + CpmmPwsBoardTemperature = 21.4948 + MechTlmBoardTemperature = 35.1464 + InstContBoardTemperature = 34.6875 + DllLockedFlag = (YES, YES) + DllResetCount = 0 + DllLockedOnceFlag = (YES, YES) + DllFrequenceCorrectCount = 4 + ADCTimingSetting = -9999 + Unlutted = TRUE + StitchedChannels = (0, 1) + StitchedProductIds = (PSP_002733_1880_RED4_0, + PSP_002733_1880_RED4_1) + End_Group + + Group = Archive + DataSetId = MRO-M-HIRISE-2-EDR-V1.0 + ProducerId = UA + ObservationId = PSP_002733_1880 + ProductId = PSP_002733_1880_RED4_0 + ProductVersionId = 1.0 + EdrProductCreationTime = 2007-02-25T22:21:23 + RationaleDescription = Null + OrbitNumber = 2733 + SoftwareName = "HiRISE_Observation v2.9.1 (2.43 2006/10/0 + 05:41:12)" + ObservationStartTime = 2007-02-25T09:49:57.729 + ReadoutStartTime = 2007-02-25T09:54:09.115 + TrimLines = 1797 + FelicsCompressionFlag = YES + IdFlightSoftwareName = IE_FSW_V4 + End_Group + + Group = BandBin + Name = Red + Center = 700 + Width = 300 + End_Group + + Group = Kernels + NaifIkCode = -74699 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, + $mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + Instrument = $mro/kernels/ik/mro_hirise_v11.ti + SpacecraftClock = $mro/kernels/sclk/MRO_SCLKSCET.00038.65536.tsc + InstrumentPosition = (Table, $mro/kernels/spk/mro_psp2.bsp) + InstrumentAddendum = $mro/kernels/iak/hiriseAddendum006.ti + ShapeModel = Null + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 1 + End_Group + + Group = Radiometry + CalibrationParameters = (OFFSET:/HiRISE/Data/HiCalCoefficients/Matrices/B- + _TDI128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/A_TD- + I128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/G_TD- + I128_BIN1_0001.cub) + End_Group + + Group = AlphaCube + AlphaSamples = 2048 + AlphaLines = 80000 + AlphaStartingSample = 0.5 + AlphaStartingLine = 0.5 + AlphaEndingSample = 2048.5 + AlphaEndingLine = 2000.5 + BetaSamples = 2048 + BetaLines = 2000 + End_Group + + Group = RadiometricCalibration + Name = hiclean + Version = 1.4.1 + Compatability = "Alan D. clean.pro, version 2/29 sep 2006" + Revision = "$Revision: 1.3 $" + MaskStartingRow = 21 + MaskEndingRow = 38 + BadMaskPixels = 0 + MaskInducedNulls = 0 + DarkStartingColumn = 4 + DarkEndingColumn = 11 + BadDarkPixels = 0 + DarkInducedNulls = 0 + LastGoodLine = 80000 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = "HiRISE Calibration Ancillary" + StartByte = 8454145 + Bytes = 20160 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = "HiRISE Calibration Image" + StartByte = 8474305 + Bytes = 688128 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = Calibration + Type = Integer + Size = 1024 + End_Group +End_Object + +Object = Table + Name = "HiRISE Ancillary" + StartByte = 9162433 + Bytes = 9600000 + Records = 80000 + ByteOrder = Lsb + Association = Lines + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 18762433 + Bytes = 256 + Records = 4 + ByteOrder = Lsb + TimeDependentFrames = (-74000, -74900, 1) + ConstantFrames = (-74690, -74000) + ConstantRotation = (0.9999703083413, 0.0, -0.0077059999872177, + 8.81584889031119e-06, 0.99999934560434, + 0.0011439900269605, 0.0077059949444447, + -0.0011440239949305, 0.99996965396507) + CkTableStartTime = 225669063.07843 + CkTableEndTime = 225669063.25343 + CkTableOriginalSize = 2001 + Description = "Created by spiceinit" + Kernels = ($mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 21962473 + Bytes = 168 + Records = 3 + ByteOrder = Lsb + CacheType = HermiteSpline + Description = "Created by spiceinit" + Kernels = $mro/kernels/spk/mro_psp2.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 24522505 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 225669063.07843 + CkTableEndTime = 225669063.25343 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 190.08669942814 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 27722545 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 30373328 + Bytes = 14212 +End_Object + +Object = OriginalLabel + Name = OriginalLabel + StartByte = 30282577 + Bytes = 30940 +End_Object + +Object = Polygon + Name = Footprint + StartByte = 30369908 + Bytes = 3420 +End_Object +End diff --git a/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl b/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl new file mode 100644 index 0000000000..683e0d6085 --- /dev/null +++ b/isis/tests/data/cnetedit/PSP_002733_1880_RED5.crop.pvl @@ -0,0 +1,518 @@ +Object = IsisCube + Object = Core + StartByte = 65537 + Format = Tile + TileSamples = 128 + TileLines = 128 + + Group = Dimensions + Samples = 2048 + Lines = 2000 + Bands = 1 + End_Group + + Group = Pixels + Type = Real + ByteOrder = Lsb + Base = 0.0 + Multiplier = 1.0 + End_Group + End_Object + + Group = Instrument + SpacecraftName = "MARS RECONNAISSANCE ORBITER" + InstrumentId = HIRISE + TargetName = Mars + StartTime = 2007-02-25T09:49:57.866 + StopTime = 2007-02-25T09:50:04.866 + ObservationStartCount = 856864216:41044 + SpacecraftClockStartCount = 856864216:50008 + SpacecraftClockStopCount = 856864223:50008 + ReadoutStartCount = 856864554:12778 + CalibrationStartTime = 2007-02-25T09:49:57.851 + CalibrationStartCount = 856864216:49044 + MissionPhaseName = "PRIMARY SCIENCE PHASE" + LineExposureDuration = 87.5000 + ScanExposureDuration = 87.5000 + DeltaLineTimerCount = 216 + Summing = 1 + Tdi = 128 + FocusPositionCount = 2023 + PoweredCpmmFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + CpmmNumber = 8 + CcdId = RED5 + ChannelNumber = 2 + LookupTableType = Stored + LookupTableNumber = 17 + LookupTableMinimum = -9998 + LookupTableMaximum = -9998 + LookupTableMedian = -9998 + LookupTableKValue = -9998 + StimulationLampFlag = (Off, Off, Off) + HeaterControlFlag = (On, On, On, On, On, On, On, On, On, On, On, + On, On, On) + OptBnchFlexureTemperature = 20.0215 + OptBnchMirrorTemperature = 20.1082 + OptBnchFoldFlatTemperature = 20.3683 + OptBnchFpaTemperature = 19.7615 + OptBnchFpeTemperature = 19.5881 + OptBnchLivingRmTemperature = 20.0215 + OptBnchBoxBeamTemperature = 20.1949 + OptBnchCoverTemperature = 19.9348 + FieldStopTemperature = 18.4616 + FpaPositiveYTemperature = 19.5881 + FpaNegativeYTemperature = 19.5881 + FpeTemperature = 17.7686 + PrimaryMirrorMntTemperature = 20.1082 + PrimaryMirrorTemperature = 20.455 + PrimaryMirrorBafTemperature = 3.34153 + MsTrussLeg0ATemperature = 19.8482 + MsTrussLeg0BTemperature = 19.9348 + MsTrussLeg120ATemperature = 19.4148 + MsTrussLeg120BTemperature = 20.1949 + MsTrussLeg240ATemperature = 20.5417 + MsTrussLeg240BTemperature = 20.6284 + BarrelBaffleTemperature = -12.4606 + SunShadeTemperature = -14.001 + SpiderLeg30Temperature = 16.1233 + SpiderLeg120Temperature = -9999 + SpiderLeg240Temperature = -9999 + SecMirrorMtrRngTemperature = 19.7615 + SecMirrorTemperature = 20.8885 + SecMirrorBaffleTemperature = -9.71965 + IeaTemperature = 25.9221 + FocusMotorTemperature = 21.3221 + IePwsBoardTemperature = 17.8502 + CpmmPwsBoardTemperature = 21.4948 + MechTlmBoardTemperature = 35.1464 + InstContBoardTemperature = 34.6875 + DllLockedFlag = (YES, YES) + DllResetCount = 0 + DllLockedOnceFlag = (YES, YES) + DllFrequenceCorrectCount = 4 + ADCTimingSetting = -9999 + Unlutted = TRUE + StitchedChannels = (0, 1) + StitchedProductIds = (PSP_002733_1880_RED5_0, + PSP_002733_1880_RED5_1) + End_Group + + Group = Archive + DataSetId = MRO-M-HIRISE-2-EDR-V1.0 + ProducerId = UA + ObservationId = PSP_002733_1880 + ProductId = PSP_002733_1880_RED5_0 + ProductVersionId = 1.0 + EdrProductCreationTime = 2007-02-25T22:27:25 + RationaleDescription = Null + OrbitNumber = 2733 + SoftwareName = "HiRISE_Observation v2.9.1 (2.43 2006/10/0 + 05:41:12)" + ObservationStartTime = 2007-02-25T09:49:57.729 + ReadoutStartTime = 2007-02-25T09:55:35.298 + TrimLines = 1214 + FelicsCompressionFlag = YES + IdFlightSoftwareName = IE_FSW_V4 + End_Group + + Group = BandBin + Name = Red + Center = 700 + Width = 300 + End_Group + + Group = Kernels + NaifIkCode = -74699 + LeapSecond = $base/kernels/lsk/naif0009.tls + TargetAttitudeShape = $base/kernels/pck/pck00009.tpc + TargetPosition = (Table, $base/kernels/spk/de405.bsp) + InstrumentPointing = (Table, + $mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + Instrument = $mro/kernels/ik/mro_hirise_v11.ti + SpacecraftClock = $mro/kernels/sclk/MRO_SCLKSCET.00038.65536.tsc + InstrumentPosition = (Table, $mro/kernels/spk/mro_psp2.bsp) + InstrumentAddendum = $mro/kernels/iak/hiriseAddendum006.ti + ShapeModel = Null + InstrumentPositionQuality = Reconstructed + InstrumentPointingQuality = Reconstructed + CameraVersion = 1 + End_Group + + Group = Radiometry + CalibrationParameters = (OFFSET:/HiRISE/Data/HiCalCoefficients/Matrices/B- + _TDI128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/A_TD- + I128_BIN1_0001.cub, + GAIN:/HiRISE/Data/HiCalCoefficients/Matrices/G_TD- + I128_BIN1_0001.cub) + End_Group + + Group = AlphaCube + AlphaSamples = 2048 + AlphaLines = 80000 + AlphaStartingSample = 0.5 + AlphaStartingLine = 0.5 + AlphaEndingSample = 2048.5 + AlphaEndingLine = 2000.5 + BetaSamples = 2048 + BetaLines = 2000 + End_Group + + Group = RadiometricCalibration + Name = hiclean + Version = 1.4.1 + Compatability = "Alan D. clean.pro, version 2/29 sep 2006" + Revision = "$Revision: 1.3 $" + MaskStartingRow = 21 + MaskEndingRow = 38 + BadMaskPixels = 0 + MaskInducedNulls = 0 + DarkStartingColumn = 4 + DarkEndingColumn = 11 + BadDarkPixels = 0 + DarkInducedNulls = 0 + LastGoodLine = 80000 + End_Group +End_Object + +Object = Label + Bytes = 65536 +End_Object + +Object = Table + Name = "HiRISE Calibration Ancillary" + StartByte = 8454145 + Bytes = 20160 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = "HiRISE Calibration Image" + StartByte = 8474305 + Bytes = 688128 + Records = 168 + ByteOrder = Lsb + + Group = Field + Name = Calibration + Type = Integer + Size = 1024 + End_Group +End_Object + +Object = Table + Name = "HiRISE Ancillary" + StartByte = 9162433 + Bytes = 9600000 + Records = 80000 + ByteOrder = Lsb + Association = Lines + + Group = Field + Name = GapFlag + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = LineNumber + Type = Integer + Size = 1 + End_Group + + Group = Field + Name = BufferPixels + Type = Integer + Size = 12 + End_Group + + Group = Field + Name = DarkPixels + Type = Integer + Size = 16 + End_Group +End_Object + +Object = Table + Name = InstrumentPointing + StartByte = 18762433 + Bytes = 256 + Records = 4 + ByteOrder = Lsb + TimeDependentFrames = (-74000, -74900, 1) + ConstantFrames = (-74690, -74000) + ConstantRotation = (0.9999703083413, 0.0, -0.0077059999872177, + 8.81584889031119e-06, 0.99999934560434, + 0.0011439900269605, 0.0077059949444447, + -0.0011440239949305, 0.99996965396507) + CkTableStartTime = 225669063.02742 + CkTableEndTime = 225669063.20242 + CkTableOriginalSize = 2001 + Description = "Created by spiceinit" + Kernels = ($mro/kernels/ck/mro_sc_psp_070220_070226.bc, + $mro/kernels/fk/mro_v14.tf) + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = InstrumentPosition + StartByte = 21962473 + Bytes = 168 + Records = 3 + ByteOrder = Lsb + CacheType = HermiteSpline + Description = "Created by spiceinit" + Kernels = $mro/kernels/spk/mro_psp2.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = BodyRotation + StartByte = 24522505 + Bytes = 128 + Records = 2 + ByteOrder = Lsb + TimeDependentFrames = (10014, 1) + CkTableStartTime = 225669063.02742 + CkTableEndTime = 225669063.20242 + CkTableOriginalSize = 2 + Description = "Created by spiceinit" + Kernels = ($base/kernels/spk/de405.bsp, + $base/kernels/pck/pck00009.tpc) + SolarLongitude = 190.08669908562 + + Group = Field + Name = J2000Q0 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Q3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV1 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV2 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = AV3 + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = Table + Name = SunPosition + StartByte = 27722545 + Bytes = 112 + Records = 2 + ByteOrder = Lsb + CacheType = Linear + Description = "Created by spiceinit" + Kernels = $base/kernels/spk/de405.bsp + + Group = Field + Name = J2000X + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Y + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000Z + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000XV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000YV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = J2000ZV + Type = Double + Size = 1 + End_Group + + Group = Field + Name = ET + Type = Double + Size = 1 + End_Group +End_Object + +Object = History + Name = IsisCube + StartByte = 30373330 + Bytes = 14212 +End_Object + +Object = OriginalLabel + Name = OriginalLabel + StartByte = 30282577 + Bytes = 30942 +End_Object + +Object = Polygon + Name = Footprint + StartByte = 30369910 + Bytes = 3420 +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_108pts.pvl b/isis/tests/data/cnetedit/cnet_108pts.pvl new file mode 100644 index 0000000000..a9dfed4a99 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_108pts.pvl @@ -0,0 +1,3238 @@ +Object = ControlNetwork + NetworkId = NewNetwork + TargetName = Mars + UserName = caustin + Created = Null + LastModified = Null + Description = NewNetwork + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = new0001 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 11.002362806422 + Line = 422.04915727097 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 1.6628550989635 + Line = 328.45336149322 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0002 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 18.215874334214 + Line = 442.29284754422 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:31 + Sample = 8.9231888331417 + Line = 348.63944344774 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0003 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 472.66293186489 + Line = 286.5028408727 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 462.63180582145 + Line = 180.62363048896 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0004 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 475.15468487065 + Line = 306.89233376838 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 465.1316930521 + Line = 200.92276750532 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0005 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 477.53757440886 + Line = 327.46214256434 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 467.5550525596 + Line = 221.38613187076 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0006 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 480.23040562098 + Line = 347.48594461527 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 470.2565958944 + Line = 241.37444692109 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0007 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 215.83286033802 + Line = 386.11449945343 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 205.84205510189 + Line = 280.15987230805 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0008 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 27.52772891931 + Line = 399.43869629082 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 18.020527100954 + Line = 293.55619563515 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0009 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 66.029356641932 + Line = 396.51994976475 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 56.3928897278 + Line = 290.62638349716 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0010 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 104.71454341575 + Line = 393.57978828151 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 94.960468344733 + Line = 287.67316516766 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0011 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 143.55456618838 + Line = 390.80933654525 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 133.69928982239 + Line = 284.88669857134 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0012 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 182.45221586379 + Line = 388.25314334373 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 172.51638102427 + Line = 282.3135842755 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0013 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 218.33345803397 + Line = 406.43165385853 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 208.3637100796 + Line = 300.45509221498 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0014 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 257.10788297379 + Line = 403.92827127584 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 247.09425026747 + Line = 297.93934590851 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0015 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 295.81013351473 + Line = 401.07147464254 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 285.76108663093 + Line = 295.07114770209 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0016 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 334.2409901193 + Line = 398.61327555411 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 324.1817366712 + Line = 292.60034187579 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0017 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 372.38481470749 + Line = 396.21013151637 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 362.33270246833 + Line = 290.18438687577 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0018 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 410.2841487475 + Line = 393.63779838354 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 400.24906215823 + Line = 287.59640437607 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0019 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 447.11346910145 + Line = 392.3965595217 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 437.1398375913 + Line = 286.3359479599 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0020 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 35.314504786338 + Line = 419.37682721863 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 25.789877685118 + Line = 313.45441568757 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0021 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 73.879724569268 + Line = 416.510362235 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 64.230148841699 + Line = 310.5769812793 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0022 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 112.59354536983 + Line = 413.53082913619 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 102.83112890233 + Line = 307.58674074819 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0023 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 151.47688688712 + Line = 410.97993475279 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 141.6258655717 + Line = 305.02378286756 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0024 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 190.36508552431 + Line = 408.17893239589 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 180.43582455199 + Line = 302.21139421271 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0025 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 220.81867088281 + Line = 426.99739584839 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 210.86181154898 + Line = 320.98301723143 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0026 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 259.62261193082 + Line = 424.18225627403 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 249.6163909158 + Line = 318.15668410401 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0027 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 298.30899741076 + Line = 421.42519521595 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 288.27100255896 + Line = 315.38818888577 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0028 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 336.67502325167 + Line = 419.15164091881 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 326.63233739384 + Line = 313.10171234904 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0029 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 374.8088274976 + Line = 416.71043920798 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 364.77378781645 + Line = 310.64804045112 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0030 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 412.7433497737 + Line = 414.01320951525 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 402.72610762286 + Line = 307.93903526759 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0031 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 449.39753091028 + Line = 413.04779127673 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 439.45072383102 + Line = 306.9568034164 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0032 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 43.464883969992 + Line = 439.2597477519 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 33.785100683671 + Line = 333.44372186509 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0033 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 82.031381315359 + Line = 436.43090829286 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 72.267021555104 + Line = 330.56192690454 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0034 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 120.7671638813 + Line = 433.67673785268 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 110.93424436092 + Line = 327.75725841392 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0035 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 159.61329195052 + Line = 431.1786289072 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 149.72990151882 + Line = 325.21286995747 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0036 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 198.45415035333 + Line = 428.54785222778 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 188.53108510233 + Line = 322.54050296699 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0037 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 223.56671055391 + Line = 447.23228271631 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 213.3680193192 + Line = 341.41565776505 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0038 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 262.29151761831 + Line = 444.69748447539 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 252.07974106094 + Line = 338.82993376889 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0039 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 300.89010791282 + Line = 442.0620807151 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Ignore = True + Sample = 290.68547871004 + Line = 336.1462253802 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0040 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 339.25760065483 + Line = 439.57228386989 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 329.07862766947 + Line = 333.61118699507 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0041 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 377.34966143085 + Line = 437.1164701152 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 367.21318088003 + Line = 331.11187899492 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0042 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 415.17157257786 + Line = 434.56008250241 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 405.09296772439 + Line = 328.51259675658 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0043 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 451.89397453419 + Line = 433.37769193293 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 441.8988274385 + Line = 327.29998051101 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0044 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 13.541454340573 + Line = 461.87473795926 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 3.7137561540906 + Line = 356.38113613293 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0045 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 51.938895574767 + Line = 459.03122322641 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 42.006442017098 + Line = 353.47159461034 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0046 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 90.558527581699 + Line = 456.27310299719 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 80.537235545132 + Line = 350.65073017945 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0047 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 129.35190059662 + Line = 453.78121391638 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 119.26018439067 + Line = 348.10145811183 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0048 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 168.16802368972 + Line = 451.12751290768 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 158.02073803666 + Line = 345.39039327971 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0049 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 206.99014030732 + Line = 448.4386990938 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 196.80364235828 + Line = 342.64586897144 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0050 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 226.33117866633 + Line = 467.58759283332 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 215.89971074881 + Line = 362.00972482935 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0051 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 265.04255741077 + Line = 465.02110268501 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 254.59646415154 + Line = 359.3840500572 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0052 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 303.6479954802 + Line = 462.28151086847 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 293.20268982868 + Line = 356.58540905665 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0053 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 341.99675884552 + Line = 459.81323396253 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 331.57208539356 + Line = 354.0629701884 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0054 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 380.03388251292 + Line = 457.45503614473 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 369.64769313335 + Line = 351.65357406926 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0055 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 417.92282628311 + Line = 454.70389565052 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 407.58769130151 + Line = 348.84939882781 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0056 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 454.63786374006 + Line = 453.49883330126 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 444.38378805588 + Line = 347.60710671977 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0057 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 60.62584221893 + Line = 478.85864591418 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 50.446464870616 + Line = 373.56602044442 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0058 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 99.30081884234 + Line = 476.2538782229 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 89.038905243482 + Line = 370.88698959096 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0059 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 138.07605197639 + Line = 473.63373806196 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 127.74358623113 + Line = 368.2004283557 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0060 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 176.8933393194 + Line = 470.97641350486 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 166.50656130793 + Line = 365.47824912369 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0061 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 382.75999557669 + Line = 477.68493710411 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 372.13679566215 + Line = 372.08901208852 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0062 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 420.52829813638 + Line = 475.15133662178 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 409.95804420569 + Line = 369.49666811078 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0063 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 457.72885192594 + Line = 472.99638403268 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:33 + Sample = 447.23100437209 + Line = 367.28844933244 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0064 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 457.6304846974 + Line = 75.398182723679 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 474.83447903502 + Line = 275.12751002867 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 467.5225551724 + Line = 180.99580115403 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0065 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 460.01225255037 + Line = 95.876800782756 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 477.187963359 + Line = 295.70367014835 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 469.89397574436 + Line = 201.56542498155 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0066 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + Sample = 462.35208428959 + Line = 116.36800076912 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 479.53352230593 + Line = 316.30088843423 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 472.25532228181 + Line = 222.14816684858 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0067 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 33.04943477971 + Line = 207.64538731051 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 51.932170047058 + Line = 407.05378039341 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 42.658880082357 + Line = 313.39222000341 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0068 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + Ignore = True + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 205.19224208483 + Line = 215.86245786587 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 223.96005623139 + Line = 415.65437180684 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Ignore = True + Sample = 215.20985155685 + Line = 321.75094064898 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0069 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 243.95950172752 + Line = 213.20782099833 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 262.61831136631 + Line = 413.06490335698 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 254.02897765876 + Line = 319.10606841165 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0070 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 282.60854604844 + Line = 210.59602015523 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 301.12588456368 + Line = 410.51802995416 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 292.71249261284 + Line = 316.50416245431 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0071 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 321.08280074311 + Line = 207.99772219339 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 339.42576541018 + Line = 407.98462619752 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 331.20451888514 + Line = 313.91571346014 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0072 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 1.9318287545343 + Line = 230.65251394295 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 20.71510390822 + Line = 430.09779971251 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 11.405115857796 + Line = 336.47098191308 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0073 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 40.197992724746 + Line = 227.68227481392 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 59.052790658398 + Line = 427.19368883739 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 49.80843138117 + Line = 333.51818027174 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0074 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 78.757251487916 + Line = 224.96602512573 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 97.641116971002 + Line = 424.54430570307 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 88.485503730667 + Line = 330.82014340192 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0075 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 117.41224012231 + Line = 222.00785504853 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 136.30405378312 + Line = 421.65134801753 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 127.24974189508 + Line = 327.87463218332 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0076 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 156.19715775607 + Line = 219.1575052782 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 175.06015908186 + Line = 418.86624970626 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 166.1273508863 + Line = 325.03317358112 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0077 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 207.75060818821 + Line = 236.31923835468 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 226.46286346465 + Line = 436.21338827757 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 217.7516603177 + Line = 342.26911316279 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0078 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 246.50250756643 + Line = 233.71853580313 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 265.10091571913 + Line = 433.67996341343 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 256.55019021969 + Line = 339.68698873763 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0079 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 285.14809915517 + Line = 231.03857862623 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 303.6055342191 + Line = 431.06639750112 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 295.22768092533 + Line = 337.02545730574 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0080 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 323.60491818759 + Line = 228.4488703099 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 341.88795040063 + Line = 428.54310007565 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 333.69790889885 + Line = 334.45447746053 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0081 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 361.7423801317 + Line = 226.10177726401 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 379.8128437515 + Line = 426.26329064209 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 371.82708581589 + Line = 332.1268065637 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0082 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 399.61875568541 + Line = 223.62261082721 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 417.45549129239 + Line = 423.8502381098 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 409.68217002062 + Line = 329.66676251229 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0083 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 437.07471263846 + Line = 221.28466899767 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 454.64731647662 + Line = 421.57876031021 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 447.10042792123 + Line = 327.34107303664 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0084 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 9.2728348419828 + Line = 250.86120472502 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 28.03228422598 + Line = 450.39562482308 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 18.772164358801 + Line = 356.70695331817 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0085 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 47.576831614772 + Line = 247.88912683565 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 66.398015039437 + Line = 447.49348074201 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 57.206855272589 + Line = 353.7544538475 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0086 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 86.128736340207 + Line = 245.03816050386 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 104.97511458817 + Line = 444.71338361445 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 95.872873826211 + Line = 350.92399901593 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0087 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 124.81458927671 + Line = 242.09895644984 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 143.65810104625 + Line = 441.84489934573 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 134.65961115059 + Line = 348.00592061661 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0088 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 163.61149616781 + Line = 239.22804352143 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 182.41742908741 + Line = 439.04475026917 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 173.54075885534 + Line = 345.15658826528 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0089 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 210.28240398663 + Line = 256.95948365094 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 228.95190144135 + Line = 456.92687292921 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 220.28981014413 + Line = 362.91588956689 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0090 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 249.02711018549 + Line = 254.2567648022 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 267.58172263012 + Line = 454.2957319601 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 259.07897306573 + Line = 360.23418990954 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0091 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 287.66706609449 + Line = 251.53246833885 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 306.07706817476 + Line = 451.64271851927 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 297.74734956111 + Line = 357.53157974596 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0092 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 326.10405196827 + Line = 248.95666709406 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 344.33374949004 + Line = 449.13920021898 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 336.19312649703 + Line = 354.97824670457 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0093 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 364.22874451962 + Line = 246.58401748283 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 382.24191641484 + Line = 446.83967090939 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 374.30603198036 + Line = 352.6288151688 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0094 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 402.08034166792 + Line = 244.1081340044 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 419.85454454593 + Line = 444.43667258752 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 412.13205666513 + Line = 350.17670485629 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0095 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 439.64155090357 + Line = 241.51723607622 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 457.15598607744 + Line = 441.91838180779 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 449.65450271612 + Line = 347.61016925278 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0096 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 16.706313553447 + Line = 270.85785446436 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 35.495469601723 + Line = 470.48373747509 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 26.244980889334 + Line = 376.71994832416 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0097 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 55.096100211402 + Line = 268.00710272558 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 73.926983952242 + Line = 467.69892383747 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 64.760076105261 + Line = 373.88649650395 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0098 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 93.653900937427 + Line = 265.0532822766 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 112.49920617427 + Line = 464.81148761724 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 103.43078817918 + Line = 370.95055781871 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0099 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 132.37019878824 + Line = 262.13677620159 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 151.19663836386 + Line = 461.96248715372 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 142.24425262511 + Line = 368.05273651857 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0100 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 171.19785333443 + Line = 259.63363163384 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 189.95691061088 + Line = 459.5295415342 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 181.14492956916 + Line = 365.56950123898 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0101 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 212.81424378753 + Line = 277.47574436131 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 231.50551171771 + Line = 477.51787903431 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 222.82226310755 + Line = 383.43333766726 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0102 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 251.55729692049 + Line = 274.70165880063 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 270.1263973688 + Line = 474.8112660352 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 261.61752210309 + Line = 380.67741048979 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0103 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 290.17957584383 + Line = 272.02267182857 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 308.59231734557 + Line = 472.20099900447 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 300.27020286304 + Line = 378.01742249825 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0104 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 328.58063576356 + Line = 269.51561607631 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 346.80111690207 + Line = 469.76413220215 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 338.67746829452 + Line = 375.53030167793 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0105 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 366.70525962922 + Line = 267.07668425596 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 384.70306691995 + Line = 467.39641276823 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 376.79063695802 + Line = 373.11196939834 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0106 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 404.61798154484 + Line = 264.41868722101 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 422.37441658546 + Line = 464.80965274513 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 414.68055033674 + Line = 370.47509653686 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0107 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 441.66228137884 + Line = 262.78248139854 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 459.11784379988 + Line = 463.24871167321 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 451.66575491637 + Line = 368.86094398859 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = new0108 + ChooserName = Unknown + DateTime = 2012-05-03T12:58:49 + + Group = ControlMeasure + SerialNumber = MGS/718369703:160/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 178.94746933022 + Line = 279.83515345393 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MGS/688540926:0/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 197.72240205749 + Line = 479.81896983674 + End_Group + + Group = ControlMeasure + SerialNumber = MGS/691204200:96/MOC-WA/RED + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-12-22T09:24:34 + Sample = 188.89803974946 + Line = 385.7773340193 + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_11pts.pvl b/isis/tests/data/cnetedit/cnet_11pts.pvl new file mode 100644 index 0000000000..da6e3473b1 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_11pts.pvl @@ -0,0 +1,344 @@ +Object = ControlNetwork + NetworkId = pointregTest + TargetName = Mars + UserName = jwalldren + Created = Null + LastModified = Null + Description = pointregAppTest + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = pointregTest0001 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2024.9426496396 + Line = 1002.2851420811 + SampleResidual = 10.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 24.231028472272 + Line = 1003.4315948486 + AprioriSample = 25.0 + AprioriLine = 1000.0 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0002 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + Ignore = True + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2037.6533300862 + Line = 1184.6426576887 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 36.997759287231 + Line = 1185.8466715131 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0003 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2003.8286760498 + Line = 1361.3694076538 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 3.217924722872 + Line = 1362.6534620013 + SampleResidual = 0.0 + LineResidual = 6.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0004 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + Ignore = True + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2016.6480691753 + Line = 1543.6421143668 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 16.046408804032 + Line = 1545.0106370108 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0005 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2029.5446002794 + Line = 1725.8194536482 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 28.925844700071 + Line = 1727.3395423889 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0006 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2042.5256884771 + Line = 1907.9279921395 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 41.865298408191 + Line = 1909.6773033142 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0007 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2012.201404177 + Line = 819.94669995989 + SampleResidual = 11.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 11.40926078542 + Line = 821.0601147243 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0008 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2045.9696349664 + Line = 643.09835651943 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 45.063543577348 + Line = 644.22982297625 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0009 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2033.1477595262 + Line = 460.74015971592 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 32.112688695736 + Line = 461.86277062552 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0010 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2020.272346886 + Line = 278.31520571027 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 19.083908218492 + Line = 279.54408318656 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = pointregTest0011 + ChooserName = cnetbin2pvl + DateTime = 2023-11-15T08:30:46 + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED4/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 2007.3360059905 + Line = 95.954965318952 + SampleResidual = 0.0 + LineResidual = 0.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = MRO/HIRISE/856864216:41044/RED5/2 + MeasureType = Candidate + ChooserName = "Application autoseed" + DateTime = 2008-02-19T14:31:39 + Sample = 5.9696691241626 + Line = 97.276485443115 + SampleResidual = 0.0 + LineResidual = 0.0 + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/cnet_35pts.pvl b/isis/tests/data/cnetedit/cnet_35pts.pvl new file mode 100644 index 0000000000..c0556f3564 --- /dev/null +++ b/isis/tests/data/cnetedit/cnet_35pts.pvl @@ -0,0 +1,1623 @@ +Object = ControlNetwork + NetworkId = I24827003RDR_BOUNDARY_NET + TargetName = Mars + UserName = lweller + Created = 2011-12-15T23:19:37 + LastModified = 2011-12-15T23:19:37 + Description = "I24827003RDR IMAGE BOUNDARY NETWORK" + Version = 5 + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_UL + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 27.607059317834 + Line = 18.295111585227 + AprioriSample = 27.592145368644 + AprioriLine = 18.277370871022 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.42491860555961 + SubPixelCorrelation = 0.42491860555961 + Obsolete_Eccentricity = 0.82500889401041 + WholePixelCorrelation = 0.48094671315067 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 142.0 + Line = 5710.0 + AprioriSample = 137.85157104559 + AprioriLine = 5723.5583837946 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 224.84594511441 + Line = 1114.556157076 + AprioriSample = 224.86109569625 + AprioriLine = 1114.5366784126 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.6301057592872 + SubPixelCorrelation = 0.6301057592872 + Obsolete_Eccentricity = 0.85464446637656 + WholePixelCorrelation = 0.91990818731499 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 241.70373879742 + Line = 4170.1757137588 + AprioriSample = 241.66704417356 + AprioriLine = 4170.1768448015 + MinimumPixelZScore = -9.1101292766656 + MaximumPixelZScore = 7.1550838917398 + GoodnessOfFit = 0.52130053192069 + SubPixelCorrelation = 0.52130053192069 + Obsolete_Eccentricity = 0.87083916894004 + WholePixelCorrelation = 0.68332380944365 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_UR + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 126.11723415114 + Line = 14.624031718257 + AprioriSample = 126.13262109331 + AprioriLine = 14.60864867694 + MinimumPixelZScore = -7.7826442877901 + MaximumPixelZScore = 6.4531771874365 + GoodnessOfFit = 0.54141035408281 + SubPixelCorrelation = 0.54141035408281 + Obsolete_Eccentricity = 0.80166834482906 + WholePixelCorrelation = 0.59126689617359 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 167.0 + Line = 4129.0 + AprioriSample = 185.89330945024 + AprioriLine = 4149.8781759925 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_LL + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 15.994142166447 + Line = 5351.59876634 + AprioriSample = 15.988352444663 + AprioriLine = 5351.6271443448 + MinimumPixelZScore = -1.3323758785145 + MaximumPixelZScore = 1.7088719658458 + GoodnessOfFit = 0.97152986956068 + SubPixelCorrelation = 0.97152986956068 + Obsolete_Eccentricity = 0.84992032708551 + WholePixelCorrelation = 0.97231368866292 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 276.0 + Line = 10691.0 + AprioriSample = 294.45457233458 + AprioriLine = 10704.104037218 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_CTR + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 72.351376549012 + Line = 2683.7835945571 + AprioriSample = 72.31156993241 + AprioriLine = 2683.7871073413 + MinimumPixelZScore = -10.556951321328 + MaximumPixelZScore = 7.6843165392047 + GoodnessOfFit = 0.42694248853572 + SubPixelCorrelation = 0.42694248853572 + Obsolete_Eccentricity = 0.86764337082849 + WholePixelCorrelation = 0.47513217291136 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 62.0 + Line = 9450.0 + AprioriSample = 78.035822649479 + AprioriLine = 9466.8664683336 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_1 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 48.760708608846 + Line = 34.687788591 + AprioriSample = 48.783779645185 + AprioriLine = 34.690686342128 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.42219888501096 + SubPixelCorrelation = 0.42219888501096 + Obsolete_Eccentricity = 0.81654602547138 + WholePixelCorrelation = 0.4842514894252 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 185.0 + Line = 5743.0 + AprioriSample = 192.35430957356 + AprioriLine = 5723.6616154452 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 268.02675159169 + Line = 1147.6104906502 + AprioriSample = 268.09033141866 + AprioriLine = 1147.56287184 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.59150804215855 + SubPixelCorrelation = 0.59150804215855 + Obsolete_Eccentricity = 0.87243685463714 + WholePixelCorrelation = 0.90247447994431 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 284.81369462788 + Line = 4203.1792327291 + AprioriSample = 284.85045436259 + AprioriLine = 4203.2511600821 + MinimumPixelZScore = -10.336933423527 + MaximumPixelZScore = 8.3466298590249 + GoodnessOfFit = 0.47601397505042 + SubPixelCorrelation = 0.47601397505042 + Obsolete_Eccentricity = 0.89216340544699 + WholePixelCorrelation = 0.67632719937417 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_2 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 64.553532057187 + Line = 16.16468261595 + AprioriSample = 64.572486285992 + AprioriLine = 16.159319580388 + MinimumPixelZScore = -10.851025717118 + MaximumPixelZScore = 9.0681589770554 + GoodnessOfFit = 0.36725373651513 + SubPixelCorrelation = 0.36725373651513 + Obsolete_Eccentricity = 0.82699300047967 + WholePixelCorrelation = 0.42843510599361 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 42.01598881521 + Line = 4131.262421516 + AprioriSample = 42.019306132363 + AprioriLine = 4131.2821435604 + MinimumPixelZScore = -10.851025717118 + MaximumPixelZScore = 9.0681589770554 + GoodnessOfFit = 0.58620780317928 + SubPixelCorrelation = 0.58620780317928 + Obsolete_Eccentricity = 0.85025939150097 + WholePixelCorrelation = 0.85996682715537 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 217.0 + Line = 5706.0 + AprioriSample = 246.84321887463 + AprioriLine = 5723.765018548 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_3 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 121.11506062968 + Line = 31.572854327236 + AprioriSample = 121.14548884404 + AprioriLine = 31.572969450255 + MinimumPixelZScore = -8.5291500072502 + MaximumPixelZScore = 7.7800103958966 + GoodnessOfFit = 0.50147560129106 + SubPixelCorrelation = 0.50147560129106 + Obsolete_Eccentricity = 0.82257001244825 + WholePixelCorrelation = 0.54888811579928 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 157.0 + Line = 4163.0 + AprioriSample = 126.98178618374 + AprioriLine = 4149.931145305 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_4 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 138.20448769735 + Line = 228.14972149796 + AprioriSample = 138.2463996157 + AprioriLine = 228.15056835088 + MinimumPixelZScore = -8.3439788918745 + MaximumPixelZScore = 6.8503359515919 + GoodnessOfFit = 0.58524107005789 + SubPixelCorrelation = 0.58524107005789 + Obsolete_Eccentricity = 0.79963813984092 + WholePixelCorrelation = 0.61793743687586 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 192.0 + Line = 4555.0 + AprioriSample = 186.03957998842 + AprioriLine = 4558.6289790526 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_5 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 149.20509521588 + Line = 423.93494885646 + AprioriSample = 149.18783166409 + AprioriLine = 423.90617198328 + MinimumPixelZScore = -6.9567313793804 + MaximumPixelZScore = 7.116669122997 + GoodnessOfFit = 0.58378259591105 + SubPixelCorrelation = 0.58378259591105 + Obsolete_Eccentricity = 0.81140407536592 + WholePixelCorrelation = 0.62604756787944 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 214.0 + Line = 4945.0 + AprioriSample = 186.32462775985 + AprioriLine = 4967.2377534825 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_6 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 128.28737710591 + Line = 651.23659834539 + AprioriSample = 128.29832945259 + AprioriLine = 651.26409956921 + MinimumPixelZScore = -6.0616802552658 + MaximumPixelZScore = 5.8974339078448 + GoodnessOfFit = 0.46624774328617 + SubPixelCorrelation = 0.46624774328617 + Obsolete_Eccentricity = 0.66978571811643 + WholePixelCorrelation = 0.50483735035139 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 173.0 + Line = 5399.0 + AprioriSample = 186.47612972153 + AprioriLine = 5375.9772827805 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_8 + ChooserName = cnetadd + DateTime = 2012-01-13T13:25:48 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 28.513330924664 + Line = 15802.82320805 + AprioriSample = 28.577348166348 + AprioriLine = 15802.74722498 + MinimumPixelZScore = -3.3013168477769 + MaximumPixelZScore = 2.2949036325521 + GoodnessOfFit = 0.71147478712267 + SubPixelCorrelation = 0.71147478712267 + Obsolete_Eccentricity = 0.93900106979889 + WholePixelCorrelation = 0.71074079991412 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 197.0 + Line = 6217.0 + AprioriSample = 187.20197125496 + AprioriLine = 6193.3583087996 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_9 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 132.43324628739 + Line = 1244.9963043389 + AprioriSample = 132.41230089305 + AprioriLine = 1244.9968964388 + MinimumPixelZScore = -4.3267682575543 + MaximumPixelZScore = 3.3036547408159 + GoodnessOfFit = 0.64094554586329 + SubPixelCorrelation = 0.64094554586329 + Obsolete_Eccentricity = 0.69326613917787 + WholePixelCorrelation = 0.70413968240039 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 139.20929458768 + Line = 15461.410830143 + AprioriSample = 139.07279851894 + AprioriLine = 15461.411736985 + MinimumPixelZScore = -4.3267682575543 + MaximumPixelZScore = 3.3036547408159 + GoodnessOfFit = 0.57147470389177 + SubPixelCorrelation = 0.57147470389177 + Obsolete_Eccentricity = 0.46252692121887 + WholePixelCorrelation = 0.63489389099904 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 182.0 + Line = 6582.0 + AprioriSample = 187.43332157572 + AprioriLine = 6601.9213229651 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_10 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 119.0 + Line = 1437.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 273.65933086114 + Line = 15088.126010294 + AprioriSample = 273.79775945033 + AprioriLine = 15088.279072135 + MinimumPixelZScore = -4.5982076153028 + MaximumPixelZScore = 5.1547250339538 + GoodnessOfFit = 0.46437443646356 + SubPixelCorrelation = 0.46437443646356 + Obsolete_Eccentricity = 0.5755806348777 + WholePixelCorrelation = 0.47471560826242 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 155.87633505028 + Line = 6965.8249656384 + AprioriSample = 155.75079341732 + AprioriLine = 6965.8015269146 + MinimumPixelZScore = -4.5982076153028 + MaximumPixelZScore = 5.1547250339538 + GoodnessOfFit = 0.6221840844042 + SubPixelCorrelation = 0.6221840844042 + Obsolete_Eccentricity = 0.78095310139119 + WholePixelCorrelation = 0.67240071516507 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_11 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 118.0 + Line = 1634.0 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 153.15891256983 + Line = 7357.6539686369 + AprioriSample = 153.22494967358 + AprioriLine = 7357.6402737744 + MinimumPixelZScore = -8.8742551139388 + MaximumPixelZScore = 4.4648645875177 + GoodnessOfFit = 0.43246786725171 + SubPixelCorrelation = 0.43246786725171 + Obsolete_Eccentricity = 0.84442625710954 + WholePixelCorrelation = 0.57817462187924 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_12 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 121.49478999227 + Line = 1856.731446573 + AprioriSample = 121.50516007892 + AprioriLine = 1856.7635557292 + MinimumPixelZScore = -6.8138683213418 + MaximumPixelZScore = 2.9308636161718 + GoodnessOfFit = 0.64478667558312 + SubPixelCorrelation = 0.64478667558312 + Obsolete_Eccentricity = 0.72771562095133 + WholePixelCorrelation = 0.66352150232528 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 161.0 + Line = 7802.0 + AprioriSample = 188.35852324024 + AprioriLine = 7828.0151912856 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_13 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 137.57913021604 + Line = 2075.8951198701 + AprioriSample = 137.58325445598 + AprioriLine = 2075.9164372763 + MinimumPixelZScore = -5.1298466964338 + MaximumPixelZScore = 3.768980062869 + GoodnessOfFit = 0.63467767714999 + SubPixelCorrelation = 0.63467767714999 + Obsolete_Eccentricity = 0.74702153978772 + WholePixelCorrelation = 0.66651958106393 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 194.0 + Line = 8239.0 + AprioriSample = 188.7116242464 + AprioriLine = 8236.611878563 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_14 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 143.29125188489 + Line = 2295.6657077538 + AprioriSample = 143.27818713457 + AprioriLine = 2295.7018251456 + MinimumPixelZScore = -2.8495963378738 + MaximumPixelZScore = 4.2726177946745 + GoodnessOfFit = 0.50555393181678 + SubPixelCorrelation = 0.50555393181678 + Obsolete_Eccentricity = 0.84376716040979 + WholePixelCorrelation = 0.52159173578701 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 207.0 + Line = 8675.0 + AprioriSample = 189.16494375722 + AprioriLine = 8645.4100113685 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_15 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 145.30808018025 + Line = 2477.1515954142 + AprioriSample = 145.33233846913 + AprioriLine = 2477.1921753136 + MinimumPixelZScore = -3.5474697309863 + MaximumPixelZScore = 2.6587565865915 + GoodnessOfFit = 0.74011087203503 + SubPixelCorrelation = 0.74011087203503 + Obsolete_Eccentricity = 0.64299738534369 + WholePixelCorrelation = 0.74945020462948 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 211.0 + Line = 9039.0 + AprioriSample = 189.75749469492 + AprioriLine = 9054.1180252552 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_16 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 140.38785971346 + Line = 2681.7415355665 + AprioriSample = 140.40848396701 + AprioriLine = 2681.7274129245 + MinimumPixelZScore = -3.1758333116921 + MaximumPixelZScore = 9.0338725240029 + GoodnessOfFit = 0.64015829348973 + SubPixelCorrelation = 0.64015829348973 + Obsolete_Eccentricity = 0.83201034936892 + WholePixelCorrelation = 0.66279412202517 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 200.0 + Line = 9446.0 + AprioriSample = 189.74898445243 + AprioriLine = 9462.737163363 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_17 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 124.74745142602 + Line = 2886.7706306145 + AprioriSample = 124.71763854068 + AprioriLine = 2886.7534192259 + MinimumPixelZScore = -5.0257793273488 + MaximumPixelZScore = 4.5136102504828 + GoodnessOfFit = 0.64224423008729 + SubPixelCorrelation = 0.64224423008729 + Obsolete_Eccentricity = 0.88553794865542 + WholePixelCorrelation = 0.6693638769383 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 169.0 + Line = 9855.0 + AprioriSample = 190.17574850163 + AprioriLine = 9871.5220697322 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_19 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 133.32938592698 + Line = 3304.5102172403 + AprioriSample = 133.33076800753 + AprioriLine = 3304.5111192353 + MinimumPixelZScore = -3.5877838148283 + MaximumPixelZScore = 5.9675648071378 + GoodnessOfFit = 0.57259590692606 + SubPixelCorrelation = 0.57259590692606 + Obsolete_Eccentricity = 0.61612921400087 + WholePixelCorrelation = 0.59797982339977 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/760206015.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 188.0 + Line = 10688.0 + AprioriSample = 191.38234151276 + AprioriLine = 10688.903800361 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_32 + ChooserName = cnetadd + DateTime = 2012-01-13T13:25:48 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 131.10154251818 + Line = 6114.7427251932 + AprioriSample = 131.08464580002 + AprioriLine = 6114.72255253 + MinimumPixelZScore = -6.7883347305594 + MaximumPixelZScore = 3.0268974724574 + GoodnessOfFit = 0.46612674246283 + SubPixelCorrelation = 0.46612674246283 + Obsolete_Eccentricity = 0.92407264183803 + WholePixelCorrelation = 0.55739606549034 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 213.1699011323 + Line = 1518.9151968876 + AprioriSample = 213.26905955464 + AprioriLine = 1518.9193152579 + MinimumPixelZScore = -6.7883347305594 + MaximumPixelZScore = 3.0268974724574 + GoodnessOfFit = 0.41028456857734 + SubPixelCorrelation = 0.41028456857734 + Obsolete_Eccentricity = 0.91737961021451 + WholePixelCorrelation = 0.49561038667554 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 231.0 + Line = 4574.0 + AprioriSample = 235.04493503215 + AprioriLine = 4589.2309851386 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_33 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 32.243849071197 + Line = 443.99293787456 + AprioriSample = 32.267286312846 + AprioriLine = 443.93790066253 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.35909430591995 + SubPixelCorrelation = 0.35909430591995 + Obsolete_Eccentricity = 0.86088783993688 + WholePixelCorrelation = 0.42439889849862 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 150.0 + Line = 6561.0 + AprioriSample = 136.08250364324 + AprioriLine = 6542.0592380917 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 231.61495841089 + Line = 1964.6495319857 + AprioriSample = 231.58016101587 + AprioriLine = 1964.5656483556 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.63763367292373 + SubPixelCorrelation = 0.63763367292373 + Obsolete_Eccentricity = 0.88928007456266 + WholePixelCorrelation = 0.9083985074489 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.64525826167 + Line = 5019.6082778839 + AprioriSample = 248.66537068953 + AprioriLine = 5019.6509310444 + MinimumPixelZScore = -9.4814064508761 + MaximumPixelZScore = 7.613279128717 + GoodnessOfFit = 0.47134697831144 + SubPixelCorrelation = 0.47134697831144 + Obsolete_Eccentricity = 0.90697269892977 + WholePixelCorrelation = 0.67790447057524 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_34 + ChooserName = cnetadd + DateTime = 2012-01-13T13:06:19 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 39.377323532456 + Line = 644.45059392332 + AprioriSample = 39.422550221501 + AprioriLine = 644.48255376688 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.68219867118992 + SubPixelCorrelation = 0.68219867118992 + Obsolete_Eccentricity = 0.6687629032313 + WholePixelCorrelation = 0.69541576692436 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 165.0 + Line = 6962.0 + AprioriSample = 135.40596122852 + AprioriLine = 6951.3519736314 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 245.82294568014 + Line = 2365.749168986 + AprioriSample = 245.80677488643 + AprioriLine = 2365.659647922 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.88500611615228 + SubPixelCorrelation = 0.88500611615228 + Obsolete_Eccentricity = 0.79641849988017 + WholePixelCorrelation = 0.93879938608019 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 262.99285894944 + Line = 5419.5752950317 + AprioriSample = 262.93741513321 + AprioriLine = 5419.5000790279 + MinimumPixelZScore = -3.6303773877818 + MaximumPixelZScore = 3.9449657352508 + GoodnessOfFit = 0.8384872040154 + SubPixelCorrelation = 0.8384872040154 + Obsolete_Eccentricity = 0.80938385565388 + WholePixelCorrelation = 0.88811262489038 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_35 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 38.84105669372 + Line = 832.10752901602 + AprioriSample = 38.80553051742 + AprioriLine = 832.12557774503 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.42116724718091 + SubPixelCorrelation = 0.42116724718091 + Obsolete_Eccentricity = 0.73339213911551 + WholePixelCorrelation = 0.4230891360784 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 122.65301115881 + Line = 16293.50679139 + AprioriSample = 122.78458208301 + AprioriLine = 16293.419624892 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.44965842923952 + SubPixelCorrelation = 0.44965842923952 + Obsolete_Eccentricity = 0.84701026248297 + WholePixelCorrelation = 0.45019255138853 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 150.0 + Line = 7353.0 + AprioriSample = 134.63818771615 + AprioriLine = 7360.5513465387 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 230.33072524429 + Line = 2756.0791608266 + AprioriSample = 230.33084176063 + AprioriLine = 2756.1290924305 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.90144944908857 + SubPixelCorrelation = 0.90144944908857 + Obsolete_Eccentricity = 0.82298722113186 + WholePixelCorrelation = 0.96435572021431 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.02226348435 + Line = 5809.3611366058 + AprioriSample = 248.02655270592 + AprioriLine = 5809.4447753716 + MinimumPixelZScore = -3.8007083634248 + MaximumPixelZScore = 4.4757735324342 + GoodnessOfFit = 0.71300187736795 + SubPixelCorrelation = 0.71300187736795 + Obsolete_Eccentricity = 0.8291423602584 + WholePixelCorrelation = 0.76584458449782 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_36 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 19.767099267132 + Line = 1053.224776834 + AprioriSample = 19.768653236342 + AprioriLine = 1053.2080015315 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.58115488237753 + SubPixelCorrelation = 0.58115488237753 + Obsolete_Eccentricity = 0.85917790473711 + WholePixelCorrelation = 0.5848321471167 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/748799078.000 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 291.4370894032 + Line = 15864.748037614 + AprioriSample = 291.36469422798 + AprioriLine = 15864.232672573 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.58326123746324 + SubPixelCorrelation = 0.58326123746324 + Obsolete_Eccentricity = 0.90296752695405 + WholePixelCorrelation = 0.58348490860222 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 124.0 + Line = 7777.0 + AprioriSample = 133.54370444799 + AprioriLine = 7769.8770322264 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 203.98302895363 + Line = 3179.4605858777 + AprioriSample = 203.85450286355 + AprioriLine = 3179.5000595293 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.97240168667426 + SubPixelCorrelation = 0.97240168667426 + Obsolete_Eccentricity = 0.85995206536045 + WholePixelCorrelation = 0.98978024760144 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 220.86690968465 + Line = 6234.9839367112 + AprioriSample = 220.81710118731 + AprioriLine = 6234.7801259019 + MinimumPixelZScore = -2.0483817202699 + MaximumPixelZScore = 2.8640554045295 + GoodnessOfFit = 0.90014960228514 + SubPixelCorrelation = 0.90014960228514 + Obsolete_Eccentricity = 0.89695661349753 + WholePixelCorrelation = 0.91793725667105 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_37 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 36.888733189199 + Line = 1242.731084961 + AprioriSample = 36.911483608247 + AprioriLine = 1242.6935558131 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.59407851965547 + SubPixelCorrelation = 0.59407851965547 + Obsolete_Eccentricity = 0.74709296406025 + WholePixelCorrelation = 0.60911835276394 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 157.0 + Line = 8156.0 + AprioriSample = 132.61992449207 + AprioriLine = 8178.9207494154 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/766864399.204 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 236.2196163681 + Line = 3558.0866737144 + AprioriSample = 236.22665154064 + AprioriLine = 3558.2674905463 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.92551012715239 + SubPixelCorrelation = 0.92551012715239 + Obsolete_Eccentricity = 0.79541873154535 + WholePixelCorrelation = 0.96799250418854 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 253.44978676116 + Line = 6612.4380581812 + AprioriSample = 253.5215797661 + AprioriLine = 6612.5086541373 + MinimumPixelZScore = -3.5448692768999 + MaximumPixelZScore = 3.21268016751 + GoodnessOfFit = 0.81024350233636 + SubPixelCorrelation = 0.81024350233636 + Obsolete_Eccentricity = 0.83198975240015 + WholePixelCorrelation = 0.85543090385472 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_38 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 34.966885270204 + Line = 1445.2306971316 + AprioriSample = 34.976625619327 + AprioriLine = 1445.2507961096 + MinimumPixelZScore = -2.7649404184731 + MaximumPixelZScore = 3.885430669618 + GoodnessOfFit = 0.50123049691391 + SubPixelCorrelation = 0.50123049691391 + Obsolete_Eccentricity = 0.71542230034353 + WholePixelCorrelation = 0.52019516111106 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 152.0 + Line = 8559.0 + AprioriSample = 131.66372638651 + AprioriLine = 8588.1443315449 + Reference = True + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/860700556.051 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 248.54298985524 + Line = 7015.0925938841 + AprioriSample = 248.47477041243 + AprioriLine = 7015.0708018329 + MinimumPixelZScore = -2.7649404184731 + MaximumPixelZScore = 3.885430669618 + GoodnessOfFit = 0.57404993830787 + SubPixelCorrelation = 0.57404993830787 + Obsolete_Eccentricity = 0.79975823900933 + WholePixelCorrelation = 0.61126341945065 + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_39 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 21.124305682401 + Line = 1660.7015570648 + AprioriSample = 21.244027873838 + AprioriLine = 1660.6652772725 + MinimumPixelZScore = -9.91464328244 + MaximumPixelZScore = 6.6095255951013 + GoodnessOfFit = 0.40060655379026 + SubPixelCorrelation = 0.40060655379026 + Obsolete_Eccentricity = 0.8842462315449 + WholePixelCorrelation = 0.42777155677984 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 122.0 + Line = 8990.0 + AprioriSample = 130.84304170727 + AprioriLine = 8997.4098805041 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_41 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 39.651442821199 + Line = 2081.9946567966 + AprioriSample = 39.640958585734 + AprioriLine = 2081.9963499484 + MinimumPixelZScore = -2.0151952076585 + MaximumPixelZScore = 1.89602994523 + GoodnessOfFit = 0.91233424417264 + SubPixelCorrelation = 0.91233424417264 + Obsolete_Eccentricity = 0.8685408387441 + WholePixelCorrelation = 0.91685736046086 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 158.0 + Line = 9831.0 + AprioriSample = 128.74374032515 + AprioriLine = 9815.6199810588 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_43 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 40.331922777574 + Line = 2498.4634598633 + AprioriSample = 40.342396523112 + AprioriLine = 2498.4688726782 + MinimumPixelZScore = -2.1929700186508 + MaximumPixelZScore = 2.6406477049999 + GoodnessOfFit = 0.87903042477486 + SubPixelCorrelation = 0.87903042477486 + Obsolete_Eccentricity = 0.80945067719471 + WholePixelCorrelation = 0.88307243605489 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/764644820.000 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 158.0 + Line = 10661.0 + AprioriSample = 126.82388485966 + AprioriLine = 10634.051423648 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_50 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 14.277915476186 + Line = 3935.2833714183 + AprioriSample = 14.234425279049 + AprioriLine = 3935.2313000495 + MinimumPixelZScore = -3.2207280824112 + MaximumPixelZScore = 2.179464511159 + GoodnessOfFit = 0.61079317083437 + SubPixelCorrelation = 0.61079317083437 + Obsolete_Eccentricity = 0.83055975470962 + WholePixelCorrelation = 0.621385909313 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 296.0 + Line = 7863.0 + AprioriSample = 317.16905352284 + AprioriLine = 7832.2439273096 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_51 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 11.30320020209 + Line = 4130.0913785706 + AprioriSample = 11.27822009864 + AprioriLine = 4130.0656229356 + MinimumPixelZScore = -5.5551124504224 + MaximumPixelZScore = 5.3507909286785 + GoodnessOfFit = 0.43949327976759 + SubPixelCorrelation = 0.43949327976759 + Obsolete_Eccentricity = 0.76159002924015 + WholePixelCorrelation = 0.46446010837209 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 286.0 + Line = 8252.0 + AprioriSample = 314.07066277501 + AprioriLine = 8241.2675814639 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_53 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 30.377263509207 + Line = 4535.7660808899 + AprioriSample = 30.440341462824 + AprioriLine = 4535.748993877 + MinimumPixelZScore = -3.7311603048292 + MaximumPixelZScore = 2.4776325037694 + GoodnessOfFit = 0.61516820087654 + SubPixelCorrelation = 0.61516820087654 + Obsolete_Eccentricity = 0.74206145332326 + WholePixelCorrelation = 0.61756685189949 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 297.0 + Line = 9048.0 + AprioriSample = 307.37707389729 + AprioriLine = 9059.4587520006 + Reference = True + End_Group + End_Object + + Object = ControlPoint + PointType = Free + PointId = I24827003RDR_bndry_56 + ChooserName = cnetadd + DateTime = 2011-12-15T23:20:27 + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/869400711.102 + MeasureType = RegisteredSubPixel + ChooserName = pointreg + DateTime = 2012-01-13T13:24:49 + Sample = 28.435531108092 + Line = 5157.421973579 + AprioriSample = 28.433104417652 + AprioriLine = 5157.4175236742 + MinimumPixelZScore = -2.608895713487 + MaximumPixelZScore = 3.0009659960998 + GoodnessOfFit = 0.80009655417522 + SubPixelCorrelation = 0.80009655417522 + Obsolete_Eccentricity = 0.91052297013589 + WholePixelCorrelation = 0.80523427372119 + End_Group + + Group = ControlMeasure + SerialNumber = Odyssey/THEMIS_IR/823680993.230 + MeasureType = Candidate + ChooserName = cnetref + DateTime = 2011-12-15T23:20:28 + Sample = 305.0 + Line = 10302.0 + AprioriSample = 297.73233806667 + AprioriLine = 10286.943394023 + Reference = True + End_Group + End_Object +End_Object +End diff --git a/isis/tests/data/cnetedit/e0902065.cal.sub.cub b/isis/tests/data/cnetedit/e0902065.cal.sub.cub new file mode 100644 index 0000000000..32bd8b0633 Binary files /dev/null and b/isis/tests/data/cnetedit/e0902065.cal.sub.cub differ