Isis Developer Reference
ControlNet.h
Go to the documentation of this file.
1#ifndef ControlNet_h
2#define ControlNet_h
3
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 A, typename B > struct QPair;
35template< typename T > class QSet;
36
37class QMutex;
38class QString;
39
40namespace Isis {
41 class Camera;
42 class ControlMeasure;
43 class ControlPoint;
44 class Distance;
45 class Progress;
46 class Pvl;
47 class SerialNumberList;
48
258 class ControlNet : public QObject {
259 Q_OBJECT
260
261 friend class ControlMeasure;
262 friend class ControlPoint;
263
264 public:
265
279
281 ControlNet(const ControlNet &other);
282 ControlNet(const QString &filename, Progress *progress = 0,
284
285 ~ControlNet();
286
287 void clear();
288 QList< ControlPoint * > take();
289
290 void ReadControl(const QString &filename, Progress *progress = 0);
291 void Write(const QString &filename, bool pvl = false);
292
293 void AddPoint(ControlPoint *point);
294 int DeletePoint(ControlPoint *point);
295 int DeletePoint(QString pointId);
296 int DeletePoint(int index);
297 bool ContainsPoint(QString pointId) const;
298
300 QString GraphToString() const;
301 QList< QList< QString > > GetSerialConnections() const;
302 int getEdgeCount() const;
303 QList< QString > getAdjacentImages(QString serialNumber) const;
304 QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber);
305 QList< ControlMeasure * > GetValidMeasuresInCube(QString serialNumber);
306 QList< ControlMeasure * > sortedMeasureList(double(ControlMeasure::*statFunc)() const,
307 double min,double max);
308
309 void ComputeResiduals();
310 void ComputeApriori();
311
312 const ControlPoint *GetPoint(QString pointId) const;
313 ControlPoint *GetPoint(QString pointId);
314 const ControlPoint *GetPoint(int index) const;
315 ControlPoint *GetPoint(int index);
316
317 double AverageResidual();
318 Isis::Camera *Camera(int index);
319 Isis::Camera *Camera(QString serialNumber);
320 QString CreatedDate() const;
321 QString Description() const;
322 ControlPoint *FindClosest(QString serialNumber,
323 double sample, double line);
324 //bool IsValid() const;
325 double GetMaximumResidual();
326 QString GetNetworkId() const;
330 int GetNumberOfValidMeasuresInImage(const QString &serialNumber);
331 int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber);
332 void ClearJigsawRejected();
333 void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber);
334 void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber);
335 int GetNumMeasures() const;
336 int GetNumPoints() const;
338 int GetNumValidPoints();
339 QString GetTarget() const;
340 QString GetUserName() const;
341 QString GetLastModified() const;
342 QList< ControlPoint * > GetPoints();
345
346 void SetCreatedDate(const QString &date);
347 void SetDescription(const QString &newDescription);
348 void SetImages(const QString &imageListFile);
349 void SetImages(SerialNumberList &list, Progress *progress = 0);
350
351 void SetModifiedDate(const QString &date);
352 void SetMutex(QMutex *mutex);
353 void SetNetworkId(const QString &id);
354 void SetTarget(const QString &target);
355 void SetTarget(Pvl label);
356 void SetTarget(const ControlNet &other);
357 void SetUserName(const QString &name);
359
360 void swap(ControlNet &other);
361 ControlNet &operator=(const ControlNet &other);
362
363 const ControlPoint *operator[](QString id) const;
364 ControlPoint *operator[](QString id);
365 const ControlPoint *operator[](int id) const;
366 ControlPoint *operator[](int id);
367
368
369 signals:
372 void pointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
373 void measureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
378
379
380
381 private:
382 void nullify();
383 bool ValidateSerialNumber(QString serialNumber) const;
384 void measureAdded(ControlMeasure *measure);
385 void measureDeleted(ControlMeasure *measure);
386 void measureIgnored(ControlMeasure *measure);
387 void measureUnIgnored(ControlMeasure *measure);
388 void pointIgnored(ControlPoint *point);
389 void pointUnIgnored(ControlPoint *point);
390 void UpdatePointReference(ControlPoint *point, QString oldId);
391 void emitNetworkStructureModified();
392 void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue);
393 void emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue);
394 void pointAdded(ControlPoint *point);
395 bool addEdge(QString sourceSerial, QString targetSerial);
396 bool removeEdge(QString sourceSerial, QString targetSerial);
397
398 private: // graphing functions
404 class ControlMeasureLessThanFunctor :
405 public std::function<bool(ControlMeasure* const &,
406 ControlMeasure * const &)> {
407 public:
408 ControlMeasureLessThanFunctor(double(ControlMeasure::*accessorMethod)() const) {
409 m_accessor = accessorMethod;
410 }
411 ControlMeasureLessThanFunctor(ControlMeasureLessThanFunctor const &other) {
412 this->m_accessor = other.m_accessor;
413 }
414 ~ControlMeasureLessThanFunctor() {}
415
416 bool operator()(ControlMeasure* const &, ControlMeasure* const &);
417 ControlMeasureLessThanFunctor & operator=(ControlMeasureLessThanFunctor const &other);
418
419 private:
420 double(ControlMeasure::*m_accessor)() const;
421 };
422
423 private: // data
425 QHash< QString, ControlPoint * > * points;
426
428 struct Image {
429 QString serial;
431 QHash< ControlPoint *, ControlMeasure * > measures;
432 };
433
435 struct Connection {
436 Connection() : strength(0) {}
437 int strength;
438 };
439
443 typedef boost::adjacency_list<boost::setS,
444 boost::listS,
445 boost::undirectedS,
446 Image,
447 Connection> Network;
448
449 typedef Network::vertex_descriptor ImageVertex;
450 typedef Network::edge_descriptor ImageConnection;
451
453 typedef std::map<ImageVertex, size_t> VertexIndexMap;
454
456 typedef boost::associative_property_map<VertexIndexMap> VertexIndexMapAdaptor;
457
459 typedef boost::graph_traits<Network>::adjacency_iterator AdjacencyIterator;
460 typedef boost::graph_traits<Network>::vertex_iterator VertexIterator;
461
462 QHash<QString, ImageVertex> m_vertexMap;
463 Network m_controlGraph;
464 QStringList *pointIds;
465 QMutex *m_mutex;
466
467 QString p_targetName;
468 QString p_networkId;
469 QString p_created;
470 QString p_modified;
471 QString p_description;
472 QString p_userName;
473 QMap<QString, Isis::Camera *> p_cameraMap;
474 QMap<QString, int> p_cameraValidMeasuresMap;
475 QMap<QString, int> p_cameraRejectedMeasuresMap;
477 QVector<Isis::Camera *> p_cameraList;
478
479 bool m_ownPoints;
480 SurfacePoint::CoordinateType m_coordType;
481 };
482
485 typedef QSharedPointer<ControlNet> ControlNetQsp;
486}
487
490
491#endif
Q_DECLARE_METATYPE(Isis::ControlNet *)
This allows ControlNet *'s to be stored in a QVariant.
Definition Camera.h:236
a control measurement
Definition ControlMeasure.h:175
ModType
Control Measure Modification Types.
Definition ControlMeasure.h:232
a control network
Definition ControlNet.h:258
int GetNumEditLockPoints()
Returns the number of edit locked control points.
Definition ControlNet.cpp:1372
int GetNumMeasures() const
Returns the total number of measures for all control points in the network.
Definition ControlNet.cpp:1462
QString Description() const
Return the description of the network.
Definition ControlNet.cpp:1262
void pointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue)
int getEdgeCount() const
Definition ControlNet.cpp:999
ControlNet(SurfacePoint::CoordinateType=SurfacePoint::Latitudinal)
Creates an empty ControlNet object.
Definition ControlNet.cpp:58
const ControlPoint * GetPoint(QString pointId) const
Definition ControlNet.cpp:1823
QString GraphToString() const
Used for verifying graph intergrity.
Definition ControlNet.cpp:495
void AddPoint(ControlPoint *point)
Adds a ControlPoint to the ControlNet.
Definition ControlNet.cpp:350
QList< QList< QString > > GetSerialConnections() const
This method searches through all the cube serial numbers in the network.
Definition ControlNet.cpp:963
void measureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue)
QString GetLastModified() const
Return the last modified date.
Definition ControlNet.cpp:1526
double GetMaximumResidual()
Determine the maximum error of all points in the network.
Definition ControlNet.cpp:1331
void networkModified(ControlNet::ModType type)
QList< QString > getAdjacentImages(QString serialNumber) const
Get all images connected to a given image by common control points.
Definition ControlNet.cpp:1037
ControlNet & operator=(const ControlNet &other)
Assign other to this.
Definition ControlNet.cpp:1811
QString GetNetworkId() const
Definition ControlNet.cpp:1346
void newPoint(ControlPoint *)
friend class ControlMeasure
Definition ControlNet.h:261
void ReadControl(const QString &filename, Progress *progress=0)
Reads in the control points from the given file.
Definition ControlNet.cpp:269
void SetDescription(const QString &newDescription)
Set the description of the network.
Definition ControlNet.cpp:1564
int GetNumPoints() const
Return the number of control points in the network.
Definition ControlNet.cpp:1473
void ComputeApriori()
Compute aprior values for each point in the network.
Definition ControlNet.cpp:1181
SurfacePoint::CoordinateType GetCoordType()
Get the control point coordinate type (see the available types in SurfacePoint.h).
Definition ControlNet.cpp:1870
QString CreatedDate() const
Return the Created Date.
Definition ControlNet.cpp:1252
void DecrementNumberOfRejectedMeasuresInImage(const QString &serialNumber)
Decrement number of jigsaw rejected measures in image specified by serialNumber.
Definition ControlNet.cpp:1451
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.
Definition ControlNet.cpp:1129
void SetImages(const QString &imageListFile)
Creates the ControlNet's image cameras based on an input file.
Definition ControlNet.cpp:1574
QString GetUserName() const
Return the user name.
Definition ControlNet.cpp:1521
int GetNumberOfValidMeasuresInImage(const QString &serialNumber)
Return the number of measures in image specified by serialNumber.
Definition ControlNet.cpp:1407
void pointDeleted(ControlPoint *point)
int GetNumberOfJigsawRejectedMeasuresInImage(const QString &serialNumber)
Return the number of jigsaw rejected measures in image specified by serialNumber.
Definition ControlNet.cpp:1421
void Write(const QString &filename, bool pvl=false)
Writes out the control network.
Definition ControlNet.cpp:309
void SetCoordType(SurfacePoint::CoordinateType coordType)
Sets the control point coordinate type.
Definition ControlNet.cpp:857
int GetNumValidMeasures()
Return the number of valid (non-ignored) measures for all control points in the network.
Definition ControlNet.cpp:1487
int GetNumValidPoints()
Returns the number of non-ignored control points.
Definition ControlNet.cpp:1503
QList< QString > GetPointIds() const
Return QList of ControlPoint Ids used in hash, in order of addition.
Definition ControlNet.cpp:1544
void SetTarget(const ControlNet &other)
int GetNumIgnoredMeasures()
Return the total number of ignored measures for all control points in the network.
Definition ControlNet.cpp:1389
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...
Definition ControlNet.cpp:1279
void SetCreatedDate(const QString &date)
Set the creation time.
Definition ControlNet.cpp:1554
const ControlPoint * operator[](QString id) const
Definition ControlNet.cpp:1874
QString GetTarget() const
Return the target name.
Definition ControlNet.cpp:1515
double AverageResidual()
Compute the average error of all points in the network.
Definition ControlNet.cpp:1199
bool ContainsPoint(QString pointId) const
Definition ControlNet.cpp:947
void clear()
Clear the contents of this object.
Definition ControlNet.cpp:178
ModType
Control Point Modification Types.
Definition ControlNet.h:275
@ Swapped
Definition ControlNet.h:276
@ GraphModified
Definition ControlNet.h:277
~ControlNet()
Destructor removes allocated memory.
Definition ControlNet.cpp:131
Isis::Camera * Camera(int index)
Returns the camera list from the given image number.
Definition ControlNet.cpp:1228
QList< ControlMeasure * > GetMeasuresInCube(QString serialNumber)
Get all the measures pertaining to a given cube serial number.
Definition ControlNet.cpp:1061
void SetUserName(const QString &name)
Set the user name of the control network.
Definition ControlNet.cpp:1738
QList< ControlPoint * > GetPoints()
Return QList of all the ControlPoints in the network.
Definition ControlNet.cpp:1532
void ClearJigsawRejected()
Sets jigsaw rejected flag to false for all points and measures.
Definition ControlNet.cpp:1431
void SetMutex(QMutex *mutex)
Set mutex to lock for making Naif calls.
Definition ControlNet.cpp:1674
void ComputeResiduals()
Compute error for each point in the network.
Definition ControlNet.cpp:1165
void networkStructureModified()
int DeletePoint(ControlPoint *point)
Delete a ControlPoint from the network by the point's address.
Definition ControlNet.cpp:875
void swap(ControlNet &other)
Swaps the member data with the given control net.
Definition ControlNet.cpp:1757
QList< QString > GetCubeSerials() const
Use this method to get a complete list of all the cube serial numbers in the network.
Definition ControlNet.cpp:1012
void SetNetworkId(const QString &id)
Set the network id.
Definition ControlNet.cpp:1684
void SetModifiedDate(const QString &date)
Set the last modified date.
Definition ControlNet.cpp:1662
void newMeasure(ControlMeasure *)
void measureRemoved(ControlMeasure *)
QList< ControlMeasure * > GetValidMeasuresInCube(QString serialNumber)
Get all the valid measures pertaining to a given cube serial number.
Definition ControlNet.cpp:1077
void IncrementNumberOfRejectedMeasuresInImage(const QString &serialNumber)
Increment number of jigsaw rejected measures in image specified by serialNumber.
Definition ControlNet.cpp:1442
int GetNumEditLockMeasures()
Return the total number of edit locked measures for all control points in the network.
Definition ControlNet.cpp:1357
void SetTarget(const QString &target)
Sets the target name and target radii, if available.
Definition ControlNet.cpp:1700
QList< ControlPoint * > take()
Transfer ownership of all points to caller.
Definition ControlNet.cpp:224
A single control point.
Definition ControlPoint.h:356
ModType
Control Point Modification Types.
Definition ControlPoint.h:433
Program progress reporter.
Definition Progress.h:42
Container for cube-like labels.
Definition Pvl.h:119
Serial Number list generator.
Definition SerialNumberList.h:64
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
Definition SurfacePoint.h:139
@ Latitudinal
Planetocentric latitudinal (lat/lon/rad) coordinates.
Definition SurfacePoint.h:140
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.
Definition BoxcarCachingAlgorithm.h:13
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:485
This is free and unencumbered software released into the public domain.
Definition CubeIoHandler.h:23