Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Secure .gov websites use HTTPS
A lock ( ) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

Isis 3 Programmer Reference
ControlNet.h
1#ifndef ControlNet_h
2#define ControlNet_h
3
9
10/* SPDX-License-Identifier: CC0-1.0 */
11
12// This is needed for the QVariant macro
13#include <QMetaType>
14#include <QObject> // parent class
15#include <QSharedPointer>
16#include "SurfacePoint.h"
17#include <QString>
18#include <QMap>
19#include <QVariant>
20#include <QVector>
21#include <QVariant>
22
23
24// Boost includes
25#include <boost/graph/graph_traits.hpp>
26#include <boost/graph/adjacency_list.hpp>
27#include <boost/graph/connected_components.hpp>
28
29#include "ControlMeasure.h"
30#include "ControlPoint.h"
31
32template< typename A, typename B > class QHash;
33template< typename T > class QList;
34template< typename T > class QSet;
35
36class QMutex;
37class QString;
38
39namespace Isis {
40 class Camera;
41 class ControlMeasure;
42 class ControlPoint;
43 class Distance;
44 class Progress;
45 class Pvl;
46 class SerialNumberList;
47
257 class ControlNet : public QObject {
258 Q_OBJECT
259
260 friend class ControlMeasure;
261 friend class ControlPoint;
262
263 public:
264
274 enum ModType {
275 Swapped,
276 GraphModified
277 };
278
280 ControlNet(const ControlNet &other);
281 ControlNet(const QString &filename, Progress *progress = 0,
283
284 ~ControlNet();
285
286 void clear();
288
289 void ReadControl(const QString &filename, Progress *progress = 0);
290 void Write(const QString &filename, bool pvl = false);
291
292 void AddPoint(ControlPoint *point);
293 int DeletePoint(ControlPoint *point);
294 int DeletePoint(QString pointId);
295 int DeletePoint(int index);
296 bool ContainsPoint(QString pointId) const;
297
299 QString GraphToString() const;
301 int getEdgeCount() const;
302 QList< QString > getAdjacentImages(QString serialNumber) const;
303 QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber);
306 double min,double max);
307
308 void ComputeResiduals();
309 void ComputeApriori();
310
311 const ControlPoint *GetPoint(QString pointId) const;
312 ControlPoint *GetPoint(QString pointId);
313 const ControlPoint *GetPoint(int index) const;
314 ControlPoint *GetPoint(int index);
315
316 double AverageResidual();
317 Isis::Camera *Camera(int index);
318 Isis::Camera *Camera(QString serialNumber);
319 QString CreatedDate() const;
320 QString Description() const;
321 ControlPoint *FindClosest(QString serialNumber,
322 double sample, double line);
323 //bool IsValid() const;
324 double GetMaximumResidual();
325 QString GetNetworkId() const;
329 int GetNumberOfValidMeasuresInImage(const QString &serialNumber);
330 int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber);
331 void ClearJigsawRejected();
332 void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber);
333 void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber);
334 int GetNumMeasures() const;
335 int GetNumPoints() const;
337 int GetNumValidPoints();
338 QString GetTarget() const;
339 QString GetUserName() const;
340 QString GetLastModified() const;
344
345 void SetCreatedDate(const QString &date);
346 void SetDescription(const QString &newDescription);
347 void SetImages(const QString &imageListFile);
348 void SetImages(SerialNumberList &list, Progress *progress = 0);
349
350 void SetModifiedDate(const QString &date);
351 void SetMutex(QMutex *mutex);
352 void SetNetworkId(const QString &id);
353 void SetTarget(const QString &target);
354 void SetTarget(Pvl label);
355 void SetTarget(const ControlNet &other);
356 void SetUserName(const QString &name);
358
359 void swap(ControlNet &other);
360 ControlNet &operator=(const ControlNet &other);
361
362 const ControlPoint *operator[](QString id) const;
363 ControlPoint *operator[](QString id);
364 const ControlPoint *operator[](int id) const;
365 ControlPoint *operator[](int id);
366
367
368 signals:
369 void networkStructureModified();
370 void networkModified(ControlNet::ModType type);
371 void pointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
372 void measureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
373 void pointDeleted(ControlPoint *point);
374 void newPoint(ControlPoint *);
375 void newMeasure(ControlMeasure *);
376 void measureRemoved(ControlMeasure *);
377
378
379
380 private:
381 void nullify();
382 bool ValidateSerialNumber(QString serialNumber) const;
383 void measureAdded(ControlMeasure *measure);
384 void measureDeleted(ControlMeasure *measure);
385 void measureIgnored(ControlMeasure *measure);
386 void measureUnIgnored(ControlMeasure *measure);
387 void pointIgnored(ControlPoint *point);
388 void pointUnIgnored(ControlPoint *point);
389 void UpdatePointReference(ControlPoint *point, QString oldId);
391 void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
392 void emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
393 void pointAdded(ControlPoint *point);
394 bool addEdge(QString sourceSerial, QString targetSerial);
395 bool removeEdge(QString sourceSerial, QString targetSerial);
396
397 private: // graphing functions
403 class ControlMeasureLessThanFunctor :
404 public std::function<bool(ControlMeasure* const &,
405 ControlMeasure * const &)> {
406 public:
407 ControlMeasureLessThanFunctor(double(ControlMeasure::*accessorMethod)() const) {
408 m_accessor = accessorMethod;
409 }
410 ControlMeasureLessThanFunctor(ControlMeasureLessThanFunctor const &other) {
411 this->m_accessor = other.m_accessor;
412 }
413 ~ControlMeasureLessThanFunctor() {}
414
415 bool operator()(ControlMeasure* const &, ControlMeasure* const &);
416 ControlMeasureLessThanFunctor & operator=(ControlMeasureLessThanFunctor const &other);
417
418 private:
419 double(ControlMeasure::*m_accessor)() const;
420 };
421
422 private: // data
425
432
434 struct Connection {
435 Connection() : strength(0) {}
436 int strength;
437 };
438
442 typedef boost::adjacency_list<boost::setS,
443 boost::listS,
444 boost::undirectedS,
445 Image,
447
448 typedef Network::vertex_descriptor ImageVertex;
449 typedef Network::edge_descriptor ImageConnection;
450
452 typedef std::map<ImageVertex, size_t> VertexIndexMap;
453
455 typedef boost::associative_property_map<VertexIndexMap> VertexIndexMapAdaptor;
456
458 typedef boost::graph_traits<Network>::adjacency_iterator AdjacencyIterator;
459 typedef boost::graph_traits<Network>::vertex_iterator VertexIterator;
460
461 QHash<QString, ImageVertex> m_vertexMap;
464 QMutex *m_mutex;
465
466 QString p_targetName;
467 QString p_networkId;
468 QString p_created;
469 QString p_modified;
471 QString p_userName;
477
480 };
481
485}
486
488Q_DECLARE_METATYPE(Isis::ControlNet *);
489
490#endif
a control measurement
ModType
Control Measure Modification Types.
ControlMeasureLessThanFunctor & operator=(ControlMeasureLessThanFunctor const &other)
Copies the content of the a ControlMeasureLessThanFunctor.
bool operator()(ControlMeasure *const &, ControlMeasure *const &)
The () operator for the Control Measure less than functor.
a control network
Definition ControlNet.h:257
int GetNumEditLockPoints()
Returns the number of edit locked control points.
int GetNumMeasures() const
Returns the total number of measures for all control points in the network.
QString Description() const
Return the description of the network.
void pointIgnored(ControlPoint *point)
Update the ControlNet's internal structure when a ControlPoint is ignored.
int getEdgeCount() const
ControlNet(SurfacePoint::CoordinateType=SurfacePoint::Latitudinal)
Creates an empty ControlNet object.
QString GraphToString() const
Used for verifying graph intergrity.
void AddPoint(ControlPoint *point)
Adds a ControlPoint to the ControlNet.
QList< QList< QString > > GetSerialConnections() const
This method searches through all the cube serial numbers in the network.
QString GetLastModified() const
Return the last modified date.
double GetMaximumResidual()
Determine the maximum error of all points in the network.
QList< QString > getAdjacentImages(QString serialNumber) const
Get all images connected to a given image by common control points.
ControlNet & operator=(const ControlNet &other)
Assign other to this.
boost::adjacency_list< boost::setS, boost::listS, boost::undirectedS, Image, Connection > Network
Defines the graph type as an undirected graph that uses Images for verticies, and Connections for edg...
Definition ControlNet.h:446
void ReadControl(const QString &filename, Progress *progress=0)
Reads in the control points from the given file.
void SetDescription(const QString &newDescription)
Set the description of the network.
SurfacePoint::CoordinateType m_coordType
The coordinate type of the control points.
Definition ControlNet.h:479
int GetNumPoints() const
Return the number of control points in the network.
QString p_targetName
Name of the target.
Definition ControlNet.h:466
QString p_description
Textual Description of network.
Definition ControlNet.h:470
QMap< QString, int > p_cameraRejectedMeasuresMap
A map from serialnumber to #rejected measures.
Definition ControlNet.h:474
QStringList * pointIds
The ControlNet graph.
Definition ControlNet.h:463
QString p_modified
Date Last Modified.
Definition ControlNet.h:469
void ComputeApriori()
Compute aprior values for each point in the network.
SurfacePoint::CoordinateType GetCoordType()
Get the control point coordinate type (see the available types in SurfacePoint.h).
QString CreatedDate() const
Return the Created Date.
void emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the pointModified() signal and is called whenever a change is made t...
void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber)
Decrement number of jigsaw rejected measures in image specified by serialNumber.
QList< ControlMeasure * > sortedMeasureList(double(ControlMeasure::*statFunc)() const, double min, double max)
Get a sorted list of all the measures that have values in a given ragen.
void measureUnIgnored(ControlMeasure *measure)
Updates the connections for the ControlNet graph associated with the measure's serial number to refle...
QHash< QString, ControlPoint * > * points
hash ControlPoints by ControlPoint Id
Definition ControlNet.h:424
void SetImages(const QString &imageListFile)
Creates the ControlNet's image cameras based on an input file.
QString GetUserName() const
Return the user name.
QMap< QString, int > p_cameraValidMeasuresMap
A map from serialnumber to #measures.
Definition ControlNet.h:473
int GetNumberOfValidMeasuresInImage(const QString &serialNumber)
Return the number of measures in image specified by serialNumber.
Network m_controlGraph
The serial number -> vertex hash used by the graph.
Definition ControlNet.h:462
int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber)
Return the number of jigsaw rejected measures in image specified by serialNumber.
void Write(const QString &filename, bool pvl=false)
Writes out the control network.
void SetCoordType(SurfacePoint::CoordinateType coordType)
Sets the control point coordinate type.
void emitNetworkStructureModified()
This method is a wrapper to emit the networkStructureModified() signal.
int GetNumValidMeasures()
Return the number of valid (non-ignored) measures for all control points in the network.
std::map< ImageVertex, size_t > VertexIndexMap
Represents the edges of the graph.
Definition ControlNet.h:452
int GetNumValidPoints()
Returns the number of non-ignored control points.
Network::edge_descriptor ImageConnection
Reprents the verticies of the graph.
Definition ControlNet.h:449
void pointAdded(ControlPoint *point)
Adds a whole point to the control net graph.
void measureAdded(ControlMeasure *measure)
Updates the ControlNet graph for the measure's serial number to reflect the addition.
QVector< Isis::Camera * > p_cameraList
Vector of image number to camera.
Definition ControlNet.h:476
QList< QString > GetPointIds() const
Return QList of ControlPoint Ids used in hash, in order of addition.
int GetNumIgnoredMeasures()
Return the total number of ignored measures for all control points in the network.
ControlPoint * FindClosest(QString serialNumber, double sample, double line)
Finds and returns a pointer to the closest ControlPoint to the ControlMeasure with the given serial n...
void SetCreatedDate(const QString &date)
Set the creation time.
QString GetTarget() const
Return the target name.
double AverageResidual()
Compute the average error of all points in the network.
QMap< QString, Isis::Camera * > p_cameraMap
A map from serialnumber to camera.
Definition ControlNet.h:472
bool ContainsPoint(QString pointId) const
void clear()
Clear the contents of this object.
ModType
Control Point Modification Types.
Definition ControlNet.h:274
QString p_created
Creation Date.
Definition ControlNet.h:468
boost::associative_property_map< VertexIndexMap > VertexIndexMapAdaptor
Converts VertexIndexMap into the appropriate form to be used by boost.
Definition ControlNet.h:455
~ControlNet()
Destructor removes allocated memory.
Isis::Camera * Camera(int index)
Returns the camera list from the given image number.
bool m_ownPoints
Specifies ownership of point list. True if owned by this object.
Definition ControlNet.h:478
QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber)
Get all the measures pertaining to a given cube serial number.
void SetUserName(const QString &name)
Set the user name of the control network.
QString p_networkId
The Network Id.
Definition ControlNet.h:467
QList< ControlPoint * > GetPoints()
Return QList of all the ControlPoints in the network.
void ClearJigsawRejected()
Sets jigsaw rejected flag to false for all points and measures.
void SetMutex(QMutex *mutex)
Set mutex to lock for making Naif calls.
void UpdatePointReference(ControlPoint *point, QString oldId)
Updates the key reference (poind Id) from the old one to what the point id was changet to.
void measureDeleted(ControlMeasure *measure)
Updates the node for this measure's serial number to reflect the deletion.
boost::graph_traits< Network >::adjacency_iterator AdjacencyIterator
Iterates over adjacent verticies.
Definition ControlNet.h:458
void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the measureModified() signal and is called whenever a change is made...
void ComputeResiduals()
Compute error for each point in the network.
bool removeEdge(QString sourceSerial, QString targetSerial)
In the ControlNet graph, decrements the strength on the edge between the two serial numbers.
int DeletePoint(ControlPoint *point)
Delete a ControlPoint from the network by the point's address.
void pointUnIgnored(ControlPoint *point)
Update the ControlNet's internal structure when a ControlPoint is un-ignored.
void swap(ControlNet &other)
Swaps the member data with the given control net.
bool addEdge(QString sourceSerial, QString targetSerial)
In the ControlNet graph: adds an edge between the verticies associated with the two serial numbers pr...
QList< QString > GetCubeSerials() const
Use this method to get a complete list of all the cube serial numbers in the network.
void SetNetworkId(const QString &id)
Set the network id.
QString p_userName
The user who created the network.
Definition ControlNet.h:471
void SetModifiedDate(const QString &date)
Set the last modified date.
QList< ControlMeasure * > GetValidMeasuresInCube(QString serialNumber)
Get all the valid measures pertaining to a given cube serial number.
void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber)
Increment number of jigsaw rejected measures in image specified by serialNumber.
int GetNumEditLockMeasures()
Return the total number of edit locked measures for all control points in the network.
void SetTarget(const QString &target)
Sets the target name and target radii, if available.
void measureIgnored(ControlMeasure *measure)
Updates the edges in the ControlNet graph to reflect the ignored measure.
QList< ControlPoint * > take()
Transfer ownership of all points to caller.
bool ValidateSerialNumber(QString serialNumber) const
Does a check to ensure that the given serial number is contained within the network.
A single control point.
ModType
Control Point Modification Types.
Program progress reporter.
Definition Progress.h:42
Serial Number list generator.
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
@ Latitudinal
Planetocentric latitudinal (lat/lon/rad) coordinates.
This is free and unencumbered software released into the public domain.
Definition ControlNet.h:32
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.
Definition Process.h:16
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
QSharedPointer< ControlNet > ControlNetQsp
Typedef for QSharedPointer to control network. This typedef is for future implementation of target bo...
Definition ControlNet.h:484
Used to define the edges of the graph.
Definition ControlNet.h:434
Used to define the verticies of the graph.
Definition ControlNet.h:427
QHash< ControlPoint *, ControlMeasure * > measures
The serial number associated with the image The measures on the image, hashed by pointers to their pa...
Definition ControlNet.h:430