1 #ifndef CASM_OrbitGeneration
2 #define CASM_OrbitGeneration
13 template <
typename SymCompareType>
21 template <
typename _OrbitType>
22 struct OrbitGeneratorCompare;
24 template <
typename _OrbitType>
25 struct CanonicalGenerator;
31 template <
typename OrbitType>
33 std::set<typename OrbitType::Element, OrbitGeneratorCompare<OrbitType>>;
40 template <
typename _OrbitType>
43 typedef typename OrbitType::Element
Element;
49 std::pair<typename OrbitGeneratorSet<OrbitType>::iterator,
bool>
insert(
53 std::pair<typename OrbitGeneratorSet<OrbitType>::iterator,
bool>
57 template <
typename OrbitOutputIterator>
58 OrbitOutputIterator
make_orbits(OrbitOutputIterator result);
78 template <
typename SymCompareType>
80 std::vector<typename SymCompareType::Element>
const &generating_elements,
81 SymGroup const &generating_group, SymCompareType
const &sym_compare);
89 template <
typename _OrbitType>
92 typedef typename OrbitType::Element
Element;
108 template <
typename _OrbitType>
140 template <
typename _OrbitType>
149 IsCanonical(
const std::vector<SymOp> &_generating_group,
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
std::set< typename OrbitType::Element, OrbitGeneratorCompare< OrbitType > > OrbitGeneratorSet
An std::set of Orbit.
std::vector< Orbit< SymCompareType > > generate_orbits(std::vector< typename SymCompareType::Element > const &generating_elements, SymGroup const &generating_group, SymCompareType const &sym_compare)
Construct orbits from a vector of generating elements.
const SymOp & from_canonical() const
After using call operator, this can be checked.
OrbitType::Element Element
const SymOp & to_canonical() const
After using call operator, this can be checked.
CanonicalGenerator(const std::vector< SymOp > &_generating_group, const SymCompareType &_sym_compare)
const std::vector< SymOp > & generating_group
OrbitType::SymCompareType SymCompareType
const SymCompareType & sym_compare
Element operator()(const Element &e) const
Applies symmetry to return an equivalent Element in a canonical form.
const SymOp * m_to_canonical
Functor to find to check if element is in canonical form.
OrbitType::SymCompareType SymCompareType
OrbitType::Element Element
const std::vector< SymOp > & generating_group
const SymCompareType & sym_compare
IsCanonical(const std::vector< SymOp > &_generating_group, const SymCompareType &_sym_compare)
bool operator()(const Element &e) const
Applies symmetry to check if any Element is greater than e.
OrbitGeneratorCompare(const SymCompareType &_sym_compare)
const SymCompareType & sym_compare
OrbitType::Element Element
bool operator()(const Element &A, const Element &B) const
OrbitType::SymCompareType SymCompareType
Data structure that holds canonical generating elements and can then make sorted orbits.
OrbitGeneratorSet< OrbitType > elements
OrbitOutputIterator make_orbits(OrbitOutputIterator result)
Construct Orbit from all generating elements.
const SymCompareType & sym_compare
std::pair< typename OrbitGeneratorSet< OrbitType >::iterator, bool > insert(const Element &test)
Try inserting an element, after generating the canonical form.
OrbitType::SymCompareType SymCompareType
OrbitGenerators(const SymGroup &_group, const SymCompareType &_sym_compare)
std::pair< typename OrbitGeneratorSet< OrbitType >::iterator, bool > insert_canonical(const Element &test)
Try inserting an element, assuming it is in canonical form.
OrbitType::Element Element
CanonicalGenerator< OrbitType > m_generate_canonical
OrbitGeneratorCompare< OrbitType > m_element_compare