8 #ifndef INCLUDE_MOLASSEMBLER_BOND_STEREOPERMUTATOR_IMPL_H
9 #define INCLUDE_MOLASSEMBLER_BOND_STEREOPERMUTATOR_IMPL_H
13 #include "boost/optional.hpp"
19 namespace Molassembler {
21 class StereopermutatorList;
29 std::underlying_type_t<Stereopermutations::Composite::Alignment>,
30 std::underlying_type_t<BondStereopermutator::Alignment>
32 "Underlying type of stereopermutation's Alignment and BondStereopermutator's must match"
36 "Staggered Alignment values do not match across Alignment types"
40 "Eclipsed Alignment values do not match across Alignment types"
44 "EclipsedAndStaggered Alignment values do not match across Alignment types"
48 "BetweenEclipsedAndStaggered Alignment values do not match across Alignment types"
62 std::tuple<AtomIndex, AtomIndex, double> dihedral,
97 void assign(boost::optional<unsigned> assignment);
101 void applyPermutation(
const std::vector<AtomIndex>& permutation);
105 std::pair<FittingReferences, FittingReferences> fittingReferences,
109 void propagateGraphChange(
116 void propagateVertexRemoval(
AtomIndex removedIndex);
121 boost::optional<unsigned> assigned()
const;
134 boost::optional<unsigned> indexOfPermutation()
const;
136 unsigned numAssignments()
const;
138 unsigned numStereopermutations()
const;
140 std::string info()
const;
142 std::string rankInfo()
const;
147 inline auto tie()
const {
148 return std::make_tuple(std::ref(
composite_), assigned());
At least one pair of substituents are staggered along the axis.
std::vector< unsigned > feasiblePermutations_
List of indices into allPermutations of composite_ that are not obviously infeasible.
Definition: BondStereopermutatorImpl.h:160
std::pair< SitePositions, SitePositions > SitePositionsPair
Spatial centroids of two atom stereopermutators' site atoms.
Definition: BondStereopermutator.h:77
Impl(const AtomStereopermutator &stereopermutatorA, const AtomStereopermutator &stereopermutatorB, BondIndex edge, Alignment alignment)
Constructor for use of BondStereopermutator in isolation.
Definition: BondStereopermutatorImpl.h:23
Generates all operators using a method returning a tuple.
Definition: OperatorSuppliers.h:78
Type helper for creating strong index types that are type-level distinct from their fundamental types...
Definition: StrongIndex.h:37
Drives a PRNG.
Definition: Prng.h:24
At least one pair of substituents are staggered along the axis.
std::tuple< RankingInformation, ShapeMap > PropagatedState
Old state dumped upon propagation.
Definition: AtomStereopermutator.h:102
Encompasses the orientation of a shape along a fused bond.
Definition: Composites.h:56
Handles the steric permutation of substituents of a non-terminal central atom.
Definition: AtomStereopermutator.h:79
At least two shape vertices eclipse one another along the axis.
Both eclipsed and staggered alignments.
Manages all stereopermutators that are part of a Molecule.
Definition: StereopermutatorList.h:30
Both eclipsed and staggered alignments.
std::size_t AtomIndex
Unsigned integer atom index type. Used to refer to particular atoms.
Definition: Types.h:51
static std::vector< unsigned > notObviouslyInfeasibleStereopermutations(const PrivateGraph &graph, const StereopermutatorList &stereopermutators, const Stereopermutations::Composite &composite)
Check whether a cycle is obviously infeasible.
Library internal graph class wrapping BGL types.
Definition: PrivateGraph.h:26
Handle rotational arrangements of adjacent atom-centered shapes.
boost::optional< unsigned > assignment_
Index optional into feasiblePermutations_ of the current assignment.
Definition: BondStereopermutatorImpl.h:162
At least two substituents eclipse one another along the axis.
Type used to refer to particular bonds. Orders first < second.
Definition: Types.h:54
BondIndex edge_
Edge this stereopermutator is placed on.
Definition: BondStereopermutatorImpl.h:158
static Stereopermutations::Stereopermutation::Occupation makeOccupation_(const RankingInformation::RankedSitesType &sitesRanking, const AtomStereopermutator::ShapeMap &shapeVertexMap)
Yields abstract site characters at their shape positions.
Data struct to store chiral constraints for DG.
static bool cycleObviouslyInfeasible(const PrivateGraph &graph, const StereopermutatorList &stereopermutators, const AtomStereopermutator &firstStereopermutator, const AtomStereopermutator &secondStereopermutator, std::tuple< AtomIndex, AtomIndex, double > dihedral, const RankingInformation::Link &link)
Check whether a cycle is obviously infeasible.
Offset exactly halfway between eclipsed and staggered alignments.
Stereopermutations::Composite composite_
Definition: BondStereopermutatorImpl.h:156
FittingMode
Differentiates how viable assignments are chosen during fitting.
Definition: BondStereopermutator.h:67
Alignment
How dihedrals are aligned in the generation of stereopermutations.
Definition: BondStereopermutator.h:53
Generate rotational orientations of two shapes fused over a bond.
Offset exactly halfway between eclipsed and staggered alignments.
Represents the composite of two shapes joined by a bond at arbitrary shape vertices.
Definition: Composites.h:34