11 #include <QMutexLocker>    13 #include <QScopedPointer>    15 #include <QStringList>    20 #include <boost/numeric/ublas/symmetric.hpp>    21 #include <boost/numeric/ublas/io.hpp>    44   void ControlNet::nullify() {
    62     p_created = Application::DateTime();
    63     p_modified = Application::DateTime();
    64     m_coordType = coordType;
    67   ControlNet::ControlNet(
const ControlNet &other) {
    74     for (
int cpIndex = 0; cpIndex < other.
GetNumPoints(); cpIndex++) {
    99   ControlNet::ControlNet(
const QString &ptfile, 
Progress *progress,
   108     m_coordType = coordType;
   111       ReadControl(ptfile, progress);
   114       QString msg = 
"Invalid control network [" + ptfile + 
"]";
   125   ControlNet::~ControlNet() {
   146     emit measureModified(measure, type, oldValue, newValue);
   160     emit pointModified(point, type, oldValue, newValue);
   172   void ControlNet::clear() {
   176       if (GetNumPoints() > 0) {
   178           QHashIterator<QString, ControlPoint*> i(*points);
   179           while (i.hasNext()) {
   181             delete(*points)[i.key()];
   182             (*points)[i.key()] = NULL;
   190     m_controlGraph.clear();
   222         throw IException(IException::Programmer, 
"Ownership has already been taken",
   231       for (
int i = 0; i < points.size(); i++) {
   232         points[i]->parentNetwork = NULL;
   263   void ControlNet::ReadControl(
const QString &filename, 
Progress *progress) {
   268     p_networkId   = versionedReader.
netId();
   269     p_userName    = versionedReader.
userName();
   274     int numPoints = versionedReader.
numPoints();
   277       progress->
SetText(
"Adding Control Points to Network...");
   282     for (
int i = 0; i < numPoints; i++) {
   303   void ControlNet::Write(
const QString &ptfile, 
bool pvl) {
   309         network = versionedWriter.
toPvl();
   312         QString msg = 
"Failed to convert control network to Pvl format.";
   317         network.
write(ptfile);
   320         QString msg = 
"Failed writing control network to file [" + ptfile + 
"]";
   329         QString msg = 
"Failed writing control network to file [" + ptfile + 
"]";
   346       IString msg = 
"Null pointer passed to ControlNet::AddPoint!";
   350     if (ContainsPoint(point->
GetId())) {
   351       IString msg = 
"ControlPoint must have unique Id";
   355     QString pointId = point->
GetId();
   356     points->insert(pointId, point);
   357     pointIds->append(pointId);
   364     emit networkStructureModified();
   378       IString msg = 
"NULL point passed to "   379           "ControlNet::pointAdded!";
   383     if (!ContainsPoint(point->
GetId())) {
   384       QString msg = 
"ControlNet does not contain the point [";
   385       msg += point->
GetId() + 
"]";
   390     for (
int i = 0; i < point->GetNumMeasures(); i++) {
   393       if (!m_vertexMap.contains(sn)) {
   395         newImage.serial = sn;
   396         ImageVertex newVertex = boost::add_vertex(newImage, m_controlGraph);
   397         m_vertexMap.insert(sn, newVertex);
   398         emit networkModified(GraphModified);
   403     for(
int i = 0; i < measures.size(); i++) {
   407       m_controlGraph[m_vertexMap[serial]].measures[measure->Parent()] = measure;
   411       if (!point->IsIgnored() && !measure->IsIgnored()) {
   412         for (
int j = i + 1; j < measures.size(); j++) {
   414           if (!cm->IsIgnored()) {
   421     emit newPoint(point);
   434   bool ControlNet::addEdge(QString sourceSerial, QString targetSerial) {
   441     boost::tie(connection, edgeAdded) = boost::add_edge(m_vertexMap[sourceSerial],
   442                                                         m_vertexMap[targetSerial],
   444     m_controlGraph[connection].strength++;
   446       emit networkModified(GraphModified);
   463   bool ControlNet::removeEdge(QString sourceSerial, QString targetSerial) {
   466     boost::tie(connection, edgeExists) = boost::edge(m_vertexMap[sourceSerial],
   467                                                      m_vertexMap[targetSerial],
   470       m_controlGraph[connection].strength--;
   471       if (m_controlGraph[connection].strength <= 0) {
   472         boost::remove_edge(m_vertexMap[sourceSerial],
   473                            m_vertexMap[targetSerial],
   475         emit networkModified(GraphModified);
   489   QString ControlNet::GraphToString()
 const {
   497     foreach(QString imageSerial, images) {
   501         if (!point->IsIgnored()) {
   502           pointIds.append(point->
GetId());
   506       imagePointIds.insert(imageSerial, pointIds);
   509     foreach(QString imageSerial, images) {
   510       QStringList adjacentImages = getAdjacentImages(imageSerial);
   511       adjacentImages.sort();
   512       foreach(QString adjacentSerial, adjacentImages) {
   513         if (QString::compare(adjacentSerial, imageSerial) < 0) {
   520         while (imageIt != imagePointIds[imageSerial].cend() &&
   521                adjacentIt != imagePointIds[adjacentSerial].cend()) {
   522           int stringDiff = QString::compare(*imageIt, *adjacentIt);
   523           if (stringDiff < 0) {
   526           else if(stringDiff == 0) {
   527             commonPoints.append(*imageIt);
   536         std::pair<ImageConnection, bool> result = boost::edge(m_vertexMap[imageSerial],
   537                                                               m_vertexMap[adjacentSerial],
   539         QString edgeStrength = 
"UNKNOWN";
   541           edgeStrength = 
toString(m_controlGraph[result.first].strength);
   544         graphString.append(imageSerial);
   545         graphString.append(
" ----(");
   546         graphString.append(edgeStrength);
   547         graphString.append(
") [");
   548         graphString.append(commonPoints.join(
","));
   549         graphString.append(
"]---- ");
   550         graphString.append(adjacentSerial);
   551         graphString.append(
"\n");
   574       IString msg = 
"NULL measure passed to "   575           "ControlNet::measureAdded!";
   581       IString msg = 
"Control measure with NULL parent passed to "   582           "ControlNet::measureAdded!";
   586     if (!ContainsPoint(point->
GetId())) {
   587       QString msg = 
"ControlNet does not contain the point [";
   588       msg += point->
GetId() + 
"]";
   595     if (!m_vertexMap.contains(serial)) {
   597       newImage.serial = serial;
   598       ImageVertex newVertex = boost::add_vertex(newImage, m_controlGraph);
   599       m_vertexMap.insert(serial, newVertex);
   600       emit networkModified(GraphModified);
   603     m_controlGraph[m_vertexMap[serial]].measures[measure->Parent()] = measure;
   607     if (!point->IsIgnored() && !measure->IsIgnored()) {
   608       for (
int i = 0; i < point->GetNumMeasures(); i++) {
   610         if (!cm->IsIgnored()) {
   614           if (QString::compare(sn, serial) != 0) {
   620     emit newMeasure(measure);
   631       IString msg = 
"NULL point passed to "   632           "ControlNet::pointUnIgnored!";
   638     for (
int i = 0; i < validMeasures.size(); i++) {
   642       if (!ValidateSerialNumber(sourceSerial)) {
   643         QString msg = 
"Node does not exist for [";
   644         msg += sourceSerial + 
"]";
   648       for(
int j = i+1; j < validMeasures.size(); j++) {
   652         if (!ValidateSerialNumber(targetSerial)) {
   653           QString msg = 
"Node does not exist for [";
   654           msg += targetSerial + 
"]";
   657         addEdge(sourceSerial, targetSerial);
   677       IString msg = 
"NULL measure passed to "   678           "ControlNet::measureUnIgnored!";
   684       IString msg = 
"Control measure with NULL parent passed to "   685           "ControlNet::measureUnIgnored!";
   689     if (!ContainsPoint(point->
GetId())) {
   690       QString msg = 
"ControlNet does not contain the point [";
   691       msg += point->
GetId() + 
"]";
   696     for (
int i = 0; i < point->GetNumMeasures(); i++) {
   699       if (!adjacentMeasure->IsIgnored() && !m_vertexMap.contains(sn)) {
   700         QString msg = 
"Node does not exist for [";
   706     if (!point->IsIgnored()) {
   711       for (
int i = 0; i < point->GetNumMeasures(); i++) {
   713         if (!cm->IsIgnored()) {
   716           if (QString::compare(sn, serial) != 0) {
   733   void ControlNet::UpdatePointReference(
ControlPoint *point, QString oldId) {
   734     points->remove(oldId);
   735     (*points)[point->
GetId()] = point;
   736     (*pointIds)[pointIds->indexOf((QString) oldId)] = (QString)point->
GetId();
   749     ASSERT(m_vertexMap.contains(serial));
   751     emit measureRemoved(measure);
   754     if (!measure->IsIgnored() && !measure->Parent()->IsIgnored()) {
   756       measureIgnored(measure);
   762     m_controlGraph[m_vertexMap[serial]].measures.remove(measure->Parent());
   773       IString msg = 
"NULL point passed to "   774           "ControlNet::pointIgnored!";
   780     for (
int i = 0; i < validMeasures.size(); i++) {
   784       if (!ValidateSerialNumber(sourceSerial)) {
   785         QString msg = 
"Node does not exist for [";
   786         msg += sourceSerial + 
"]";
   790       for(
int j = i+1; j < validMeasures.size(); j++) {
   794         if (!ValidateSerialNumber(targetSerial)) {
   795           QString msg = 
"Node does not exist for [";
   796           msg += targetSerial + 
"]";
   799         removeEdge(sourceSerial, targetSerial);
   815       IString msg = 
"NULL measure passed to "   816           "ControlNet::measureIgnored!";
   822       IString msg = 
"Control measure with NULL parent passed to "   823           "ControlNet::measureIgnored!";
   828     if (!ValidateSerialNumber(serial)) {
   829       QString msg = 
"Node does not exist for [";
   836     for (
int i = 0; i < point->GetNumMeasures(); i++) {
   839       if (!adjacentMeasure->IsIgnored() && m_vertexMap.contains(sn)) {
   840         if (QString::compare(serial, sn) !=0) {
   841           removeEdge(serial, sn);
   854     m_coordType = coordType;
   861   void ControlNet::emitNetworkStructureModified() {
   862     emit networkStructureModified();
   872     if (points->values().contains(point)) {
   873       return DeletePoint(point->
GetId());
   878       msg += 
"] does not exist in the network";
   891   int ControlNet::DeletePoint(QString pointId) {
   892     if (!points->contains(pointId)) {
   893       IString msg = 
"point Id [" + pointId + 
"] does not exist in the network";
   899     if (point->IsEditLocked())
   900       return ControlPoint::PointLocked;
   902     bool wasIgnored = point->IsIgnored();
   909     emit pointDeleted(point);
   912     points->remove(pointId);
   913     pointIds->removeAt(pointIds->indexOf(pointId));
   918       emit networkStructureModified();
   919     return ControlPoint::Success;
   928   int ControlNet::DeletePoint(
int index) {
   929     if (index < 0 || index >= pointIds->size()) {
   934     return DeletePoint(pointIds->at(index));
   943   bool ControlNet::ContainsPoint(QString pointId)
 const {
   944     return points->contains(pointId);
   966     for (
int i = 0; i < serials.size(); i++) {
   967       boost::put(indexMapAdaptor, m_vertexMap[serials[i]], i);
   972     int numComponents = boost::connected_components(m_controlGraph, componentAdaptor,
   973                                                       boost::vertex_index_map(indexMapAdaptor));
   976     for (
int i = 0; i < numComponents; i++) {
   978       islandStrings.append(tempList);
   980     std::map<ImageVertex, size_t>::iterator it = componentMap.begin();
   981     while(it != componentMap.end())
   983       QString serial = m_controlGraph[it->first].serial;
   984       int group = (int) it->second;
   985       islandStrings[group].append(serial);
   988     return islandStrings;
   995   int ControlNet::getEdgeCount()
 const {
   996     return boost::num_edges(m_controlGraph);
  1009     return m_vertexMap.keys();
  1021   bool ControlNet::ValidateSerialNumber(QString serialNumber)
 const {
  1022     return m_vertexMap.contains(serialNumber);
  1034     if (!ValidateSerialNumber(serialNumber)) {
  1035       QString msg = 
"Cube Serial Number [" + serialNumber + 
"] not found in "  1043     boost::tie(adjIt, adjEnd) = boost::adjacent_vertices(m_vertexMap[serialNumber], m_controlGraph);
  1044     for( ; adjIt != adjEnd; adjIt++) {
  1045       adjacentSerials.append(m_controlGraph[*adjIt].serial);
  1048     return adjacentSerials;
  1058     if( !ValidateSerialNumber(serialNumber) ) {
  1059       IString msg = 
"Cube Serial Number [" + serialNumber + 
"] not found in "  1064     return m_controlGraph[m_vertexMap[serialNumber]].measures.values();
  1080       if (!measure->IsIgnored())
  1081         validMeasures.append(measure);
  1084     return validMeasures;
  1096     if (
this != &other) {
  1097       this->m_accessor = other.m_accessor;
  1110   bool ControlNet::ControlMeasureLessThanFunctor::operator()
  1113     return (a->*this->m_accessor)() < (b->*this->m_accessor)();
  1126                                                           double min,
double max) {
  1132     int nObjPts =  this->GetNumPoints();
  1133     for (
int i=0;i<nObjPts;i++) { 
  1135       if (point->IsIgnored()) 
continue;  
  1138       int nObs = point->GetNumMeasures();
  1139       for (
int j=0;j<nObs;j++) {  
  1141         if (measure->IsIgnored())  
continue;
  1142         double temp = (measure->*statFunc)();
  1144         if (min <= temp && temp <= max) measures.push_back(measure);
  1150     qSort(measures.begin(),measures.end(),lessThan);
  1161   void ControlNet::ComputeResiduals() {
  1164     QHashIterator< QString, ControlPoint * > i(*points);
  1165     while (i.hasNext()) {
  1167       i.value()->ComputeResiduals();
  1177   void ControlNet::ComputeApriori() {
  1179     QHashIterator< QString, ControlPoint * > i(*points);
  1180     while (i.hasNext()) {
  1183       if ( !point->IsIgnored() )
  1195   double ControlNet::AverageResidual() {
  1197     double avgResidual = 0.0;
  1199     QHashIterator< QString, ControlPoint * > i(*points);
  1200     while (i.hasNext()) {
  1203       if (!point->IsIgnored()) {
  1205             &ControlMeasure::GetResidualMagnitude).
Average();
  1211       avgResidual /= count;
  1225     return p_cameraList[index];
  1236   QString ControlNet::CreatedDate()
 const {
  1246   QString ControlNet::Description()
 const {
  1247     return p_description;
  1264       double sample, 
double line) {
  1266     if (!ValidateSerialNumber(serialNumber)) {
  1267       QString msg = 
"serialNumber [";
  1268       msg += serialNumber;
  1269       msg += 
"] not found in ControlNet";
  1273     const double SEARCH_DISTANCE = 99999999.0;
  1274     double minDist = SEARCH_DISTANCE;
  1279     for (
int i = 0; i < measures.size(); i++) {
  1283       double dx = fabs(sample - measureToCheck->GetSample());
  1284       double dy = fabs(line - measureToCheck->GetLine());
  1286       double dist = sqrt((dx * dx) + (dy * dy));
  1288       if (dist < minDist) {
  1290         closestPoint = measureToCheck->Parent();
  1294     if (!closestPoint) {
  1295       IString msg = 
"No point found within ";
  1296       msg += 
IString(SEARCH_DISTANCE);
  1297       msg += 
"pixels of sample/line [";
  1305     return closestPoint;
  1315   double ControlNet::GetMaximumResidual() {
  1318     double maxResidual = 0.0;
  1321           &ControlMeasure::GetResidualMagnitude).
Maximum();
  1322       if (residual > maxResidual)
  1323         maxResidual = residual;
  1330   QString ControlNet::GetNetworkId()
 const {
  1341   int ControlNet::GetNumEditLockMeasures() {
  1342     int numLockedMeasures = 0;
  1347     return numLockedMeasures;
  1356   int ControlNet::GetNumEditLockPoints() {
  1357     int editLockPoints = 0;
  1359       if (p->IsEditLocked())
  1363     return editLockPoints;
  1373   int ControlNet::GetNumIgnoredMeasures() {
  1374     int numIgnoredMeasures = 0;
  1379     return numIgnoredMeasures;
  1391   int ControlNet::GetNumberOfValidMeasuresInImage(
const QString &serialNumber) {
  1393     if (p_cameraList.size() > 0) {
  1394       return p_cameraValidMeasuresMap[serialNumber];
  1396     return GetValidMeasuresInCube(serialNumber).size();
  1405   int ControlNet::GetNumberOfJigsawRejectedMeasuresInImage(
const QString &serialNumber) {
  1406     return p_cameraRejectedMeasuresMap[serialNumber];
  1415   void ControlNet::ClearJigsawRejected() {
  1426   void ControlNet::IncrementNumberOfRejectedMeasuresInImage(
const QString &serialNumber) {
  1427     p_cameraRejectedMeasuresMap[serialNumber]++;
  1435   void ControlNet::DecrementNumberOfRejectedMeasuresInImage(
const QString &serialNumber) {
  1436     if (p_cameraRejectedMeasuresMap[serialNumber] > 0)
  1437       p_cameraRejectedMeasuresMap[serialNumber]--;
  1446   int ControlNet::GetNumMeasures()
 const {
  1447     int numMeasures = 0;
  1449       numMeasures += p->GetNumMeasures();
  1457   int ControlNet::GetNumPoints()
 const {
  1458     return points->size();
  1471   int ControlNet::GetNumValidMeasures() {
  1472     int numValidMeasures = 0;
  1474       if (!p->IsIgnored())
  1478     return numValidMeasures;
  1487   int ControlNet::GetNumValidPoints() {
  1488     int validPoints = 0;
  1490       if (!p->IsIgnored())
  1499   QString ControlNet::GetTarget()
 const {
  1500     return p_targetName;
  1505   QString ControlNet::GetUserName()
 const {
  1510   QString ControlNet::GetLastModified()
 const {
  1519     for (
int i = 0; i < pointIds->size(); i++) {
  1520       pointsList.append(GetPoint(i));
  1538   void ControlNet::SetCreatedDate(
const QString &date) {
  1548   void ControlNet::SetDescription(
const QString &newDescription) {
  1549     p_description = newDescription;
  1558   void ControlNet::SetImages(
const QString &imageListFile) {
  1581     if (p_cameraList.size() > 0) {
  1585     if (progress != NULL) {
  1586       progress->
SetText(
"Setting input images...");
  1591     for (
int i = 0; i < list.
size(); i++) {
  1593       QString filename = list.
fileName(i);
  1594       Cube cube(filename, 
"r");
  1598         p_cameraMap[serialNumber] = cam;
  1599         p_cameraValidMeasuresMap[serialNumber] = 0;
  1600         p_cameraRejectedMeasuresMap[serialNumber] = 0;
  1601         p_cameraList.push_back(cam);
  1604         QString msg = 
"Unable to create camera for cube file ";
  1609       if (progress != NULL)
  1614     QHashIterator< QString, ControlPoint * > p(*points);
  1615     while (p.hasNext()) {
  1620       for (
int m = 0; m < serialNums.size(); m++) {
  1625           curMeasure->
SetCamera(p_cameraMap[serialNumber]);
  1628           if (!curMeasure->IsIgnored()) p_cameraValidMeasuresMap[serialNumber]++;
  1633               "] does not have a cube with a matching serial number";
  1646   void ControlNet::SetModifiedDate(
const QString &date) {
  1658   void ControlNet::SetMutex(QMutex *mutex) {
  1668   void ControlNet::SetNetworkId(
const QString &
id) {
  1684   void ControlNet::SetTarget(
const QString &target) {
  1685     p_targetName = target;
  1696   void ControlNet::SetTarget(
Pvl label) {
  1700       mapping = label.
findGroup(
"Mapping", Pvl::Traverse);
  1704       p_targetName = mapping[
"TargetName"][0];
  1707              && label.
findObject(
"IsisCube").hasGroup(
"Instrument")
  1708              && label.
findObject(
"IsisCube").findGroup(
"Instrument").hasKeyword(
"TargetName")) {
  1709       p_targetName = label.
findObject(
"IsisCube").findGroup(
"Instrument").findKeyword(
"TargetName")[0];
  1722   void ControlNet::SetUserName(
const QString &name) {
  1742     std::swap(points, other.
points);
  1743     std::swap(pointIds, other.
pointIds);
  1745     std::swap(m_mutex, other.m_mutex);
  1758     QHashIterator< QString, ControlPoint * > i(*points);
  1759     while (i.hasNext()) {
  1760       i.next().value()->parentNetwork = 
this;
  1763     QHashIterator< QString, ControlPoint * > i2(*other.
points);
  1764     while (i2.hasNext()) {
  1765       i2.next().value()->parentNetwork = &other;
  1768     m_vertexMap.
clear();
  1769     VertexIterator v, vend;
  1770     for (boost::tie(v, vend) = vertices(m_controlGraph); v != vend; ++v) {
  1771       ImageVertex imVertex = *v;
  1772       QString serialNum = m_controlGraph[*v].serial;
  1773       m_vertexMap[serialNum] = imVertex;
  1776     other.m_vertexMap.clear();
  1777     VertexIterator v2, vend2;
  1778     for (boost::tie(v2, vend2) = vertices(other.
m_controlGraph); v2 != vend2; ++v2) {
  1779       ImageVertex imVertex = *v2;
  1781       other.m_vertexMap[serialNum] = imVertex;
  1784     emit networkModified(ControlNet::Swapped);
  1797     if (
this != &other) {
  1807   const ControlPoint *ControlNet::GetPoint(QString 
id)
 const {
  1808     if (!points->contains(
id)) {
  1809       IString msg = 
"The control network has no control points with an ID "  1810           "equal to [" + 
id + 
"]";
  1814     return points->value(
id);
  1818   ControlPoint *ControlNet::GetPoint(QString 
id) {
  1819     if (!points->contains(
id)) {
  1820       IString msg = 
"The control network has no control points with an ID "  1821           "equal to [" + 
id + 
"]";
  1822       throw IException(IException::Programmer, msg, 
_FILEINFO_);
  1825     return (*points)[id];
  1829   const ControlPoint *ControlNet::GetPoint(
int index)
 const {
  1830     if (index < 0 || index >= pointIds->size()) {
  1831       IString msg = 
"Index [" + IString(index) + 
"] out of range";
  1832       throw IException(IException::Programmer, msg, 
_FILEINFO_);
  1835     return GetPoint(pointIds->at(index));
  1839   ControlPoint *ControlNet::GetPoint(
int index) {
  1840     if (index < 0 || index >= pointIds->size()) {
  1841       IString msg = 
"Index [" + IString(index) + 
"] out of range";
  1842       throw IException(IException::Programmer, msg, 
_FILEINFO_);
  1845     return GetPoint(pointIds->at(index));
  1858   const ControlPoint *ControlNet::operator[](QString 
id)
 const {
  1859     return GetPoint(
id);
  1863   ControlPoint *ControlNet::operator[](QString 
id) {
  1864     return GetPoint(
id);
  1868   const ControlPoint *ControlNet::operator[](
int index)
 const {
  1869     return GetPoint(index);
  1873   ControlPoint *ControlNet::operator[](
int index) {
  1874     return GetPoint(index);
 bool hasKeyword(const QString &name) const
Check to see if a keyword exists. 
 
boost::graph_traits< Network >::adjacency_iterator AdjacencyIterator
Iterates over adjacent verticies. 
 
void SetMaximumSteps(const int steps)
This sets the maximum number of steps in the process. 
 
QString p_targetName
Name of the target. 
 
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes. 
 
bool hasSerialNumber(QString sn)
Determines whether or not the requested serial number exists in the list. 
 
QString creationDate() const
Returns the date and time that the network was created. 
 
Used to define the verticies of the graph. 
 
File name manipulation and expansion. 
 
Status ComputeApriori()
 Computes a priori lat/lon/radius point coordinates by determining the average lat/lon/radius of all ...
 
Pvl toPvl()
Generates a Pvl file from the currently stored control points and header. 
 
QStringList * pointIds
The ControlNet graph. 
 
QString lastModificationDate() const
Returns the date and time of the last modification to the network. 
 
const ControlMeasure * GetMeasure(QString serialNumber) const
Get a control measure based on its cube's serial number. 
 
ModType
Control Measure Modification Types. 
 
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes. 
 
void ClearJigsawRejected()
Set jigsaw rejected flag for all measures to false and set the jigsaw rejected flag for the point its...
 
QString p_description
Textual Description of network. 
 
boost::associative_property_map< VertexIndexMap > VertexIndexMapAdaptor
Converts VertexIndexMap into the appropriate form to be used by boost. 
 
QMap< QString, Isis::Camera * > p_cameraMap
A map from serialnumber to camera. 
 
QString serialNumber(const QString &filename)
Return a serial number given a filename. 
 
Handle various control network file format versions. 
 
Namespace for the standard library. 
 
QString p_networkId
The Network Id. 
 
ControlNet * parentNetwork
List of Control Measures. 
 
Network m_controlGraph
The serial number -> vertex hash used by the graph. 
 
bool hasGroup(const QString &name) const
Returns a boolean value based on whether the object has the specified group or not. 
 
QString toString(bool boolToConvert)
Global function to convert a boolean to a string. 
 
Unless noted otherwise, the portions of Isis written by the USGS are public domain. 
 
std::map< ImageVertex, size_t > VertexIndexMap
Represents the edges of the graph. 
 
int GetNumValidMeasures() const
 
QString p_created
Creation Date. 
 
void CheckStatus()
Checks and updates the status. 
 
Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const
This function will call a given method on every control measure that this point has. 
 
bool hasObject(const QString &name) const
Returns a boolean value based on whether the object exists in the current PvlObject or not...
 
QString fileName(const QString &sn)
Return a filename given a serial number. 
 
double Maximum() const
Returns the absolute maximum double found in all data passed through the AddData method. 
 
int GetNumPoints() const
Return the number of control points in the network. 
 
SurfacePoint::CoordinateType m_coordType
The coordinate type of the control points. 
 
Program progress reporter. 
 
QString description() const
Returns the network's description. 
 
QString p_userName
The user who created the network. 
 
int GetNumLockedMeasures() const
Returns the number of locked control measures. 
 
QString GetId() const
Return the Id of the control point. 
 
Status SetCamera(Isis::Camera *camera)
Set pointer to camera associated with a measure. 
 
QMap< QString, int > p_cameraValidMeasuresMap
A map from serialnumber to #measures. 
 
void SetText(const QString &text)
Changes the value of the text string reported just before 0% processed. 
 
void clear()
Clear the contents of this object. 
 
Contains multiple PvlContainers. 
 
QList< QString > getCubeSerialNumbers() const
 
#define _FILEINFO_
Macro for the filename and line number. 
 
QList< ControlMeasure *> getMeasures(bool excludeIgnored=false) const
 
Container for cube-like labels. 
 
QHash< QString, ControlPoint *> * points
hash ControlPoints by ControlPoint Id 
 
Network::edge_descriptor ImageConnection
Reprents the verticies of the graph. 
 
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods. 
 
int size() const
How many serial number / filename combos are in the list. 
 
QString targetName() const
Returns the target for the network. 
 
ModType
Control Point Modification Types. 
 
void write(FileName netFile)
This will write a control net file object to disk. 
 
ControlPoint * takeFirstPoint()
Returns the first point stored in the versioner's internal list. 
 
QVector< Isis::Camera * > p_cameraList
Vector of image number to camera. 
 
QMap< QString, int > p_cameraRejectedMeasuresMap
A map from serialnumber to #rejected measures. 
 
QString netId() const
Returns the ID for the network. 
 
Adds specific functionality to C++ strings. 
 
Namespace for ISIS/Bullet specific routines. 
 
int Delete(ControlMeasure *measure)
Remove a measurement from the control point, deleting reference measure is allowed. 
 
void write(const QString &file)
Opens and writes PVL information to a file and handles the end of line sequence. 
 
QString p_modified
Date Last Modified. 
 
Serial Number list generator. 
 
QString userName() const
Returns the name of the last person or program to modify the network. 
 
double Average() const
Computes and returns the average. 
 
QString GetCubeSerialNumber() const
Return the serial number of the cube containing the coordinate. 
 
IO Handler for Isis Cubes. 
 
int numPoints() const
Returns the number of points that have been read in or are ready to write out.