9#include "ControlNetDiff.h"
15#include "ControlMeasure.h"
16#include "ControlNet.h"
17#include "ControlNetVersioner.h"
18#include "ControlPoint.h"
21#include "PvlContainer.h"
23#include "PvlKeyword.h"
67 if (diffFile.
hasGroup(
"Tolerances")) {
69 for (
int i = 0; i < tolerances.
keywords(); i++)
74 if (diffFile.
hasGroup(
"IgnoreKeys")) {
76 for (
int i = 0; i < ignoreKeys.
keywords(); i++)
94 diff(
"Filename", net1Name.
name(), net2Name.
name(), report);
114 for (
int p = 0; p < net1NumPts; p++) {
120 for (
int p = 0; p < net2NumPts; p++) {
128 for (
int i = 0; i < pointNames.size(); i++) {
130 if (idMap.size() == 2) {
131 compare(idMap[0], idMap[1], report);
133 else if (idMap.contains(0)) {
134 addUniquePoint(
"PointId", idMap[0].findKeyword(
"PointId")[0],
"N/A", report);
136 else if (idMap.contains(1)) {
137 addUniquePoint(
"PointId",
"N/A", idMap[1].findKeyword(
"PointId")[0], report);
162 int p1Measures = point1Pvl.
groups();
163 int p2Measures = point2Pvl.
groups();
169 for (
int m = 0; m < p1Measures; m++) {
171 measureMap[measure.
findKeyword(
"SerialNumber")[0]].insert(
175 for (
int m = 0; m < p2Measures; m++) {
177 measureMap[measure.
findKeyword(
"SerialNumber")[0]].insert(
182 for (
int i = 0; i < measureNames.size(); i++) {
184 if (idMap.size() == 2) {
187 else if (idMap.contains(0)) {
188 addUniqueMeasure(
"SerialNumber", idMap[0].findKeyword(
"SerialNumber")[0],
"N/A", pointReport);
190 else if (idMap.contains(1)) {
191 addUniqueMeasure(
"SerialNumber",
"N/A", idMap[1].findKeyword(
"SerialNumber")[0], pointReport);
223 for (
int k = 0; k < g1.
keywords(); k++)
224 keywordMap[g1[k].name()].insert(0, g1[k]);
225 for (
int k = 0; k < g2.
keywords(); k++)
226 keywordMap[g2[k].name()].insert(1, g2[k]);
229 for (
int i = 0; i < keywordNames.size(); i++) {
231 if (idMap.size() == 2) {
232 compare(idMap[0], idMap[1], groupReport);
234 else if (idMap.contains(0)) {
235 QString name = idMap[0].name();
237 diff(name, idMap[0][0],
"N/A", groupReport);
239 else if (idMap.contains(1)) {
240 QString name = idMap[1].name();
242 diff(name,
"N/A", idMap[1][0], groupReport);
265 QString name = k1.
name();
269 diff(name, k1[0], k2[0], report);
284 QString v1 = o1[name][0];
285 QString v2 = o2[name][0];
286 diff(name, v1, v2, report);
359 if (fabs(v1 - v2) > tol) {
void diff(QString name, PvlObject &o1, PvlObject &o2, PvlContainer &report)
Add a new difference keyword to the given report if the PvlObjects have different values for the keyw...
void addTolerances(Pvl &diffFile)
Add the given ignore keys and tolerances to the persisent collections of such values.
QMap< QString, double > * m_tolerances
The map of tolerances going from keyword name to tolerance value.
void addUniquePoint(QString label, QString v1, QString v2, PvlObject &parent)
Add a new keyword for the given point to the parent object.
ControlNetDiff()
Create a ControlNetDiff without any tolerances.
void init()
Initialize the persistent structures used to maintain the state of this instance: its ignore keys and...
void addUniqueMeasure(QString label, QString v1, QString v2, PvlObject &parent)
Add a new keyword for the given measure to the parent object.
QSet< QString > * m_ignoreKeys
The set of keywords to ignore by name.
PvlKeyword makeKeyword(QString name, QString v1, QString v2)
Create a new keyword with the given label name and the given values.
void compareGroups(PvlContainer &g1, PvlContainer &g2, PvlObject &report)
Compare two collections, or groupings, of PvlKeywords.
virtual ~ControlNetDiff()
Destroy the ControlNetDiff.
Pvl compare(FileName &net1Name, FileName &net2Name)
Compare two Control Networks given their file names, and return their differences.
Handle various control network file format versions.
int numPoints() const
Returns the number of points that have been read in or are ready to write out.
QString netId() const
Returns the ID for the network.
Pvl toPvl()
Generates a Pvl file from the currently stored control points and header.
QString targetName() const
Returns the target for the network.
File name manipulation and expansion.
QString name() const
Returns the name of the file excluding the path and the attributes in the file name.
Contains more than one keyword-value pair.
bool hasKeyword(const QString &name) const
Check to see if a keyword exists.
int keywords() const
Returns the number of keywords contained in the PvlContainer.
QString name() const
Returns the container name.
void addKeyword(const PvlKeyword &keyword, const InsertMode mode=Append)
Add a keyword to the container.
PvlKeyword & findKeyword(const QString &name)
Find a keyword with a specified name.
Contains multiple PvlContainers.
Container for cube-like labels.
A single keyword-value pair.
QString name() const
Returns the keyword name.
void addValue(QString value, QString unit="")
Adds a value with units.
Contains Pvl Groups and Pvl Objects.
PvlGroup & group(const int index)
Return the group at the specified index.
int groups() const
Returns the number of groups contained.
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes.
PvlObject & object(const int index)
Return the object at the specified index.
bool hasGroup(const QString &name) const
Returns a boolean value based on whether the object has the specified group or not.
void addObject(const PvlObject &object)
Add a PvlObject.
PvlKeyword & findKeyword(const QString &kname, FindOptions opts)
Finds a keyword in the current PvlObject, or deeper inside other PvlObjects and Pvlgroups within this...
void addGroup(const Isis::PvlGroup &group)
Add a group to the object.
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
long long int BigInt
Big int.
double toDouble(const QString &string)
Global function to convert from a string to a double.