12 #ifndef INCLUDE_MOLASSEMBLER_STEREOPERMUTATION_COMPOSITES_H
13 #define INCLUDE_MOLASSEMBLER_STEREOPERMUTATION_COMPOSITES_H
20 #include "boost/optional.hpp"
23 namespace Molassembler {
24 namespace Stereopermutations {
75 std::vector<char> passCharacters,
76 std::size_t passIdentifier
83 std::vector<char> applyCharacterRotation(
const std::vector<Shapes::Vertex>& rotation)
const;
98 std::vector<Shapes::Vertex> findReductionMapping(
Shapes::Vertex reducedFusedVertex)
const;
115 std::vector<Shapes::Vertex> transformToCanonical();
123 void revert(
const std::vector<Shapes::Vertex>& reversionMapping);
138 return std::make_tuple(
141 applyCharacterRotation(findReductionMapping(reducedVertex))
153 EclipsedAndStaggered,
155 BetweenEclipsedAndStaggered
160 using DihedralTuple = std::tuple<Shapes::Vertex, Shapes::Vertex, double>;
161 using VertexPair = std::pair<Shapes::Vertex, Shapes::Vertex>;
163 bool close(
const std::vector<DihedralTuple>& comparisonDihedrals)
const;
178 static bool isDuplicate(
201 double deduplicationDegrees
206 double deduplicationDegrees=15
212 std::pair<Shapes::Permutation, Shapes::Permutation> reversionMappings;
213 std::pair<AngleGroup, AngleGroup> angleGroups;
214 std::pair<Eigen::MatrixXd, Eigen::MatrixXd>
coordinates;
231 Alignment alignment = Alignment::Eclipsed
239 Temple::Math::toRadians(1.0)
250 static std::vector<Shapes::Vertex> generateRotation(
253 const std::vector<Shapes::Vertex>& changedVertices
256 static std::vector<Shapes::Vertex> rotation(
259 const std::vector<Shapes::Vertex>& perpendicularPlaneVertices
265 void applyIdentifierPermutation(
const std::vector<std::size_t>& permutation);
271 const PermutationsList& allPermutations()
const;
277 bool isIsotropic()
const;
280 std::pair<unsigned, unsigned> orders()
const;
288 unsigned order()
const;
291 unsigned rotationalAxisSymmetryOrder()
const;
300 unsigned rankingEquivalentBase(
const unsigned permutation)
const;
303 std::vector<unsigned> nonEquivalentPermutationIndices()
const;
310 unsigned countNonEquivalentPermutations()
const;
316 Alignment alignment()
const;
322 PermutationsList::const_iterator begin()
const;
323 PermutationsList::const_iterator end()
const;
329 bool operator < (
const Composite& other)
const;
331 bool operator == (
const Composite& other)
const;
333 bool operator != (
const Composite& other)
const;
363 static double perpendicularSubstituentAngle(
364 double angleFromBoundShapeVertex,
365 double angleBetweenSubstituents
Alignment
Relative orientation of substituent groups along the dihedral.
Definition: Composites.h:147
Definition: Composites.h:177
Temple::OrderedPair< OrientationState > orientations_
Stores the relative orientation with which the permutations were generated.
Definition: Composites.h:340
double angle
The angle this group is placed at from the fused position.
Definition: Composites.h:40
Generates all operators using a method returning a tuple.
Definition: OperatorSuppliers.h:84
Alignment alignment_
Stores with which Alignment the stereopermutations were generated.
Definition: Composites.h:346
ShapeResult shape(const PositionCollection &normalizedPositions, Shape shape)
Forwarding function to calculate the continuous shape measure.
A group of shape vertices at an angle from the fused position.
Definition: Composites.h:38
auto tie() const
Full tuple-like lexicographical comparison of members in order of declaration.
Definition: Composites.h:135
std::vector< WideHashType > generate(const PrivateGraph &inner, boost::optional< const StereopermutatorList & > stereopermutatorsOption, AtomEnvironmentComponents bitmask)
Generates the hashes for every atom in a molecule's components.
Class representing a single rotational permutation.
Definition: Composites.h:159
PURITY_STRONG unsigned order(PointGroup group)
Returns the number of symmetry elements in a point group.
Encompasses the orientation of a shape along a fused bond.
Definition: Composites.h:55
Centralizes basic shape data in runtime types.
A class that imitates std::pair<T, U>, but whose template arguments are homogeneous and the stored va...
Definition: OrderedPair.h:36
constexpr Get< 1 > second
Calls std::get<1> on any argument it is invoked with.
Definition: Functor.h:125
PermutationsList stereopermutations_
List of dihedral sets that comprise all spatial arrangements.
Definition: Composites.h:343
std::vector< Permutation > PermutationsList
Relative orientation of substituent groups along the dihedral.
Definition: Composites.h:175
Alignment alignment
Alignment used to generate this permutation.
Definition: Composites.h:168
constexpr Get< 0 > first
Calls std::get<0> on any argument it is invoked with.
Definition: Functor.h:123
bool isotropic
Whether the ranking characters indicate that this group of shape vertices is isotropic.
Definition: Composites.h:47
Defines symmetry names and total count.
std::vector< char > characters
Abstract ranking-characters of the sites at their shape vertices.
Definition: Composites.h:61
Shape
Enumeration of all contained symmetry names.
Definition: Shapes.h:28
Shapes::Shape shape
The shape of either positional shape.
Definition: Composites.h:57
boost::optional< VertexPair > rankingEquivalentTo
Shape vertices this permutation is ranking equivalent to, if applicable.
Definition: Composites.h:172
std::size_t identifier
An identifier to the shape source.
Definition: Composites.h:69
Coordinates coordinates(const Shape shape)
Fetch a shape's idealized coordiantes.
Shapes::Vertex fusedVertex
The shape vertex of the local shape that the other is fused at.
Definition: Composites.h:59
VertexPair alignedVertices
Shape vertices aligned for this set of dihedrals.
Definition: Composites.h:166
An ordered homogeneous pair-like class.
std::vector< DihedralTuple > dihedrals
Set of dihedrals between all relevant vertices along the bond.
Definition: Composites.h:170
Helpers for comparing floating point values.
std::vector< Shapes::Vertex > vertices
The shape vertices making up this group.
Definition: Composites.h:42
Represents the composite of two shapes joined by a bond at arbitrary shape vertices.
Definition: Composites.h:33