11 #ifndef INCLUDE_MOLASSEMBLER_MOLECULE_H
12 #define INCLUDE_MOLASSEMBLER_MOLECULE_H
15 #include "boost/optional.hpp"
23 using ElementTypeCollection = std::vector<ElementType>;
27 namespace Molassembler {
31 class StereopermutatorList;
32 struct RankingInformation;
33 class AtomStereopermutator;
34 struct PeriodicBoundaryDuplicates;
92 const std::vector<AtomIndex>& canonicalizationIndexMap,
126 Utils::ElementType a,
127 Utils::ElementType b,
128 BondType bondType = BondType::Single
167 const boost::optional<
168 std::vector<BondIndex>
169 >& bondStereopermutatorCandidatesOptional = boost::none
175 const boost::optional<
176 std::vector<BondIndex>
177 >& bondStereopermutatorCandidatesOptional,
191 MASM_NO_EXPORT Molecule(
194 boost::optional<AtomEnvironmentComponents> canonicalComponentsOption = boost::none
222 Utils::ElementType elementType,
224 BondType bondType = BondType::Single
255 BondType bondType = BondType::Single
304 void assignStereopermutator(
306 const boost::optional<unsigned>& assignmentOption
337 void assignStereopermutator(
339 const boost::optional<unsigned>& assignmentOption
426 std::vector<AtomIndex> canonicalize(
485 void removeBond(
const BondIndex& bond)
final;
491 bool removePermutator(
const BondIndex& bond);
546 Utils::ElementType elementType
588 void thermalizeStereopermutator(
AtomIndex a,
bool thermalization =
true);
596 MASM_NO_EXPORT
Graph& graph(unsafe_tag_t );
597 MASM_NO_EXPORT
void propagate(unsafe_tag_t );
610 bool canRemove(
const BondIndex& edge)
const final;
612 const Cycles& cycles() const final;
614 unsigned degree(
AtomIndex a) const final;
616 Utils::ElementType elementType(
AtomIndex a) const final;
620 unsigned E() const final;
675 std::
string dumpGraphviz() const;
681 const
Graph& graph() const;
705 std::
size_t hash() const;
735 const boost::optional<
737 >& explicitBondStereopermutatorCandidatesOption = boost::none
741 std::
string str() const;
770 const std::vector<
AtomIndex>& excludeAdjacent = {},
771 const boost::optional<AngstromPositions>& positionsOption = boost::none
794 bool canonicalCompare(
795 const Molecule& other,
832 boost::optional<std::vector<AtomIndex>> modularIsomorphism(
833 const Molecule& other,
857 bool operator == (
const Molecule& other)
const;
859 bool operator != (
const Molecule& other)
const;
865 std::unique_ptr<Impl> pImpl_;
Models a molecule as a graph (connectivity of atoms) and a list of stereopermutators.
Definition: Molecule.h:77
Interface class for the molecular graph.
Drives a PRNG.
Definition: Prng.h:24
double element(const PositionCollection &normalizedPositions, const Elements::Rotation &rotation)
Returns the CSM for a Rotation symmetry element along the rotation axis without optimizing the coordi...
A wrapper class around Utils' PositionCollection to emphasize that the positions stored therein are i...
Definition: AngstromPositions.h:25
ShapeResult shape(const PositionCollection &normalizedPositions, Shape shape)
Forwarding function to calculate the continuous shape measure.
Definition: Molecule.h:593
Represents the connectivity of atoms of a molecule.
Definition: Graph.h:54
boost::optional< Shapes::Shape > inferShape(const Graph &graph, AtomIndex index, const RankingInformation &ranking)
Forwards inference to appropriate model depending on environment.
AtomEnvironmentComponents
For bitmasks grouping components of immediate atom environments.
Definition: Types.h:103
Definition: GraphInterface.h:21
Wrapper class to make working with RDL in C++ more pleasant.
Definition: Cycles.h:44
std::ostream & operator<<(std::ostream &os, const Scine::Molassembler::Molecule &molecule)
Writes some information about a molecule to a stream.
Definition: PeriodicBoundaries.h:22
At least two shape vertices eclipse one another along the axis.
Handles specific relative arrangements of two atom stereopermutators joined by a bond.
Definition: BondStereopermutator.h:46
Manages all stereopermutators that are part of a Molecule.
Definition: StereopermutatorList.h:30
std::size_t AtomIndex
Unsigned integer atom index type. Used to refer to particular atoms.
Definition: Types.h:51
Permutation applyPermutation(const Permutation &occupation, const Permutation &permutation)
Rotates a passed list of indices with a specified rotation vector.
Handle rotational arrangements of adjacent atom-centered shapes.
BondType
Discrete bond type numeration.
Definition: Types.h:26
Type used to refer to particular bonds. Orders first < second.
Definition: Types.h:54
Centralizes the main customization points of the library's behavior.
WideHashType hash(AtomEnvironmentComponents bitmask, Utils::ElementType elementType, const std::vector< BondInformation > &sortedBonds, const boost::optional< Shapes::Shape > &shapeOptional, const boost::optional< unsigned > &assignedOptional)
Convolutes the atom's element type and bonds into an unsigned integer.
Shape
Enumeration of all contained symmetry names.
Definition: Shapes.h:28
Random::Engine & randomnessEngine()
Randomness source for the entire library.
Alignment
How dihedrals are aligned in the generation of stereopermutations.
Definition: BondStereopermutator.h:53