8 #ifndef INCLUDE_MOLASSEMBLER_DIRECTED_CONFORMER_GENERATOR_H
9 #define INCLUDE_MOLASSEMBLER_DIRECTED_CONFORMER_GENERATOR_H
15 #include "boost/variant/variant_fwd.hpp"
17 #include <unordered_map>
24 namespace Molassembler {
26 namespace outcome = OUTCOME_V2_NAMESPACE;
105 constexpr
static std::uint8_t unknownDecision = std::numeric_limits<std::uint8_t>::max();
110 AtomStereopermutatorPreconditionsUnmet,
112 HasAssignedBondStereopermutator,
114 HasTerminalConstitutingAtom,
186 static boost::variant<IgnoreReason, BondStereopermutator> considerBond(
222 const DecisionList& a,
223 const DecisionList& b,
224 const DecisionList& bounds
250 const BondList& bondsToConsider = {}
256 DirectedConformerGenerator(DirectedConformerGenerator&& other) noexcept;
257 DirectedConformerGenerator& operator = (DirectedConformerGenerator&& other) noexcept;
258 DirectedConformerGenerator(const DirectedConformerGenerator& other) = delete;
259 DirectedConformerGenerator& operator = (const DirectedConformerGenerator& other) = delete;
260 ~DirectedConformerGenerator();
283 DecisionList generateNewDecisionList(Random::Engine& engine =
randomnessEngine());
295 bool insert(const DecisionList& decisionList);
305 bool contains(const DecisionList& decisionList) const;
311 BondStereopermutator::Alignment alignment() const;
320 const BondList& bondList() const;
332 unsigned decisionListSetSize() const;
341 unsigned idealEnsembleSize() const;
356 const DecisionList& decisionList,
357 const DistanceGeometry::Configuration& configuration = DistanceGeometry::Configuration {},
372 const DecisionList& decisionList,
374 const DistanceGeometry::Configuration& configuration = DistanceGeometry::Configuration {},
382 Molecule conformationMolecule(
const DecisionList& decisionList)
const;
404 DecisionList getDecisionList(
405 const Utils::AtomCollection& atomCollection,
425 DecisionList getDecisionList(
426 const Utils::PositionCollection& positions,
433 : dihedralRetries(3),
491 void enumerateRandom(
493 const EnumerationSettings& settings = {}
497 Relabeler relabeler()
const;
500 std::vector<int> binMidpointIntegers(
const DecisionList& decision)
const;
505 std::unique_ptr<Impl> pImpl_;
522 std::vector<AtomIndex> is;
525 std::vector<AtomIndex> ls;
526 unsigned symmetryOrder;
528 using Interval = std::pair<double, double>;
529 using Intervals = std::vector<Interval>;
538 const std::vector<double>& dihedrals,
540 unsigned symmetryOrder = 1
563 std::vector<Intervals>
bins(
double delta=M_PI / 6)
const;
574 std::vector<std::vector<unsigned>>
binIndices(
575 const std::vector<Intervals>& allBins
580 const std::vector<std::vector<unsigned>>&
binIndices,
581 const std::vector<Intervals>& allBins
586 std::vector<DihedralInfo> sequences;
587 std::vector<std::vector<double>> observedDihedrals;
Models a molecule as a graph (connectivity of atoms) and a list of stereopermutators.
Definition: Molecule.h:73
outcome::result< Utils::PositionCollection > generateConformation(const Molecule &molecule, unsigned seed, const DistanceGeometry::Configuration &configuration=DistanceGeometry::Configuration{})
Generate a 3D structure of a Molecule.
A configuration object for distance geometry runs with sane defaults.
Definition: Conformers.h:75
At least one pair of substituents are staggered along the axis.
std::vector< unsigned > distance(AtomIndex i, const Graph &graph)
Calculates the graph distance from a single atom index to all others.
Choose whichever assignment best represents the geometry directly.
outcome::result< Utils::PositionCollection > generateRandomConformation(const Molecule &molecule, const DistanceGeometry::Configuration &configuration=DistanceGeometry::Configuration{})
Generate a 3D structure of a Molecule.
Positions must be close to the idealized assignment geometry.
std::size_t AtomIndex
Unsigned integer atom index type. Used to refer to particular atoms.
Definition: Types.h:51
Handle rotational arrangements of adjacent atom-centered shapes.
Type used to refer to particular bonds. Orders first < second.
Definition: Types.h:54
Centralizes the main customization points of the library's behavior.
FittingMode
Differentiates how viable assignments are chosen during fitting.
Definition: BondStereopermutator.h:67
Random::Engine & randomnessEngine()
Randomness source for the entire library.
Alignment
How dihedrals are aligned in the generation of stereopermutations.
Definition: BondStereopermutator.h:53