source: src/Fragmentation/Homology/HomologyGraph.hpp@ 12a24c

Action_Thermostats Add_AtomRandomPerturbation Add_FitFragmentPartialChargesAction Add_RotateAroundBondAction Add_SelectAtomByNameAction Added_ParseSaveFragmentResults AddingActions_SaveParseParticleParameters Adding_Graph_to_ChangeBondActions Adding_MD_integration_tests Adding_ParticleName_to_Atom Adding_StructOpt_integration_tests AtomFragments Automaking_mpqc_open AutomationFragmentation_failures Candidate_v1.5.4 Candidate_v1.6.0 Candidate_v1.6.1 ChangeBugEmailaddress ChangingTestPorts ChemicalSpaceEvaluator CombiningParticlePotentialParsing Combining_Subpackages Debian_Package_split Debian_package_split_molecuildergui_only Disabling_MemDebug Docu_Python_wait EmpiricalPotential_contain_HomologyGraph EmpiricalPotential_contain_HomologyGraph_documentation Enable_parallel_make_install Enhance_userguide Enhanced_StructuralOptimization Enhanced_StructuralOptimization_continued Example_ManyWaysToTranslateAtom Exclude_Hydrogens_annealWithBondGraph FitPartialCharges_GlobalError Fix_BoundInBox_CenterInBox_MoleculeActions Fix_ChargeSampling_PBC Fix_ChronosMutex Fix_FitPartialCharges Fix_FitPotential_needs_atomicnumbers Fix_ForceAnnealing Fix_IndependentFragmentGrids Fix_ParseParticles Fix_ParseParticles_split_forward_backward_Actions Fix_PopActions Fix_QtFragmentList_sorted_selection Fix_Restrictedkeyset_FragmentMolecule Fix_StatusMsg Fix_StepWorldTime_single_argument Fix_Verbose_Codepatterns Fix_fitting_potentials Fixes ForceAnnealing_goodresults ForceAnnealing_oldresults ForceAnnealing_tocheck ForceAnnealing_with_BondGraph ForceAnnealing_with_BondGraph_continued ForceAnnealing_with_BondGraph_continued_betteresults ForceAnnealing_with_BondGraph_contraction-expansion FragmentAction_writes_AtomFragments FragmentMolecule_checks_bonddegrees GeometryObjects Gui_Fixes Gui_displays_atomic_force_velocity ImplicitCharges IndependentFragmentGrids IndependentFragmentGrids_IndividualZeroInstances IndependentFragmentGrids_IntegrationTest IndependentFragmentGrids_Sole_NN_Calculation JobMarket_RobustOnKillsSegFaults JobMarket_StableWorkerPool JobMarket_unresolvable_hostname_fix MoreRobust_FragmentAutomation ODR_violation_mpqc_open PartialCharges_OrthogonalSummation PdbParser_setsAtomName PythonUI_with_named_parameters QtGui_reactivate_TimeChanged_changes Recreated_GuiChecks Rewrite_FitPartialCharges RotateToPrincipalAxisSystem_UndoRedo SaturateAtoms_findBestMatching SaturateAtoms_singleDegree StoppableMakroAction Subpackage_CodePatterns Subpackage_JobMarket Subpackage_LinearAlgebra Subpackage_levmar Subpackage_mpqc_open Subpackage_vmg Switchable_LogView ThirdParty_MPQC_rebuilt_buildsystem TrajectoryDependenant_MaxOrder TremoloParser_IncreasedPrecision TremoloParser_MultipleTimesteps TremoloParser_setsAtomName Ubuntu_1604_changes stable
Last change on this file since 12a24c was 67db80, checked in by Frederik Heber <heber@…>, 12 years ago

Added serialization capabilities to FragmentEdge, FragmentNode, and HomologyGraph.

  • also added unit test function for each.
  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * HomologyGraph.hpp
3 *
4 * Created on: Sep 24, 2012
5 * Author: heber
6 */
7
8#ifndef HOMOLOGYGRAPH_HPP_
9#define HOMOLOGYGRAPH_HPP_
10
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include <boost/serialization/export.hpp>
18#include <boost/serialization/set.hpp>
19
20#include <set>
21#include <iosfwd>
22
23#include "Fragmentation/Homology/FragmentEdge.hpp"
24#include "Fragmentation/Homology/FragmentNode.hpp"
25
26class KeySet;
27
28/** This class contains the representation of a molecular fragment as a graph.
29 *
30 * Only, we do not store the full graph in here. We have to include symmetries
31 * such that two hydrogens may switch places. Eventually, we only look for the
32 * set of distances of a fragment. If two hydrogens switch places, then also in
33 * the set of distances some distances are interchanged but the whole fragment
34 * remains the same. Hence, we have to store the bond graph representation in
35 * such a way as to automatically include these symmetries.
36 *
37 * To this end, we use FragmentNode and FragmentEdge to store the vital
38 * information.
39 *
40 */
41class HomologyGraph
42{
43 //!> grant output operator access to internals
44 friend std::ostream& operator<<(std::ostream& ost, const HomologyGraph &graph);
45public:
46 //!> typedef for a set of nodes representing node information
47 typedef std::set<FragmentNode> nodes_t;
48 //!> typedef for a set of nodes representing edge information
49 typedef std::set<FragmentEdge> edges_t;
50public:
51 /** Default constructor for class HomologyGraph.
52 *
53 * This is required to allow placement in STL containers
54 *
55 */
56 HomologyGraph() {}
57
58 /** Constructor for class HomologyGraph.
59 *
60 * @param _nodes information on nodes of this graph
61 * @param _edges information on edges of this graph
62 */
63 HomologyGraph(const nodes_t &_nodes, const edges_t &_edges) :
64 nodes(_nodes),
65 edges(_edges)
66 {}
67
68 /** Constructor for class HomologyGraph from a keyset (i.e. from atoms in the World).
69 *
70 * @param keyset global ids of atoms to pick
71 */
72 HomologyGraph(const KeySet &keyset);
73
74 /** Destructor for class HomologyGraph.
75 *
76 */
77 ~HomologyGraph() {}
78
79 // comparators (allows sorting and hence quicker finding in STL containers)
80 bool operator<(const HomologyGraph &graph) const;
81 bool operator>(const HomologyGraph &graph) const;
82 bool operator==(const HomologyGraph &graph) const;
83 bool operator!=(const HomologyGraph &graph) const {
84 return (!(*this == graph));
85 }
86
87 /** Assignment operator for class HomologyGraph.
88 *
89 * This is required to allow placement in STL container as we need to
90 * const_cast override our const member variables.
91 *
92 */
93 HomologyGraph& operator=(const HomologyGraph &graph);
94
95private:
96 //!> information on the nodes of the graph
97 const nodes_t nodes;
98 //!> information on the edges of the graph
99 const edges_t edges;
100
101private:
102 friend class boost::serialization::access;
103 // serialization
104 template <typename Archive>
105 void serialize(Archive& ar, const unsigned int version)
106 {
107 ar & const_cast<nodes_t &>(nodes);
108 ar & const_cast<edges_t &>(edges);
109 }
110};
111
112std::ostream& operator<<(std::ostream& ost, const HomologyGraph &graph);
113
114// we need to give this class a unique key for serialization
115BOOST_CLASS_EXPORT_KEY(HomologyGraph)
116
117// define some helpers outside to allow for light-weight unit testing
118namespace detail {
119 const HomologyGraph::nodes_t getNodesFromKeySet(const KeySet &keyset);
120 const HomologyGraph::edges_t getEdgesFromKeySet(const KeySet &keyset);
121};
122
123
124#endif /* HOMOLOGYGRAPH_HPP_ */
Note: See TracBrowser for help on using the repository browser.