1 #ifndef CASM_symmetry_SimpleOrbit_impl
2 #define CASM_symmetry_SimpleOrbit_impl
12 template <
typename SymCompareType>
13 template <
typename GroupIterator>
15 typename SymCompareType::Element
const &_generating_element,
16 GroupIterator _group_begin, GroupIterator _group_end,
18 : m_sym_compare(_sym_compare),
19 m_invariants(_sym_compare.make_invariants(_generating_element)) {
24 typedef typename GroupIterator::value_type SymOpRepType;
25 std::map<Element, std::set<SymOpRepType>, decltype(
compare)> tmp{
compare};
26 for (
auto it = _group_begin; it != _group_end; ++it) {
33 for (
auto const &pair : tmp) {
34 if (tmp.begin()->second.size() != pair.second.size()) {
36 "Error in SimpleOrbit constructor: equivalence map is not "
42 for (
auto const &pair : tmp) {
48 template <
typename SymCompareType>
50 return m_sym_compare.inter_orbit_compare(prototype(), invariants(),
InvariantsType const & invariants() const
SimpleOrbit(typename SymCompareType::Element const &_generating_element, GroupIterator _group_begin, GroupIterator _group_end, SymCompareType const &_sym_compare)
Construct a SimpleOrbit using a range of SymOp or PermuteIterator.
typename _SymCompareType::Element Element
std::vector< Element > m_element
_SymCompareType SymCompareType
bool operator<(const SimpleOrbit &B) const
Compare orbits, using SymCompareType::inter_orbit_compare.
Element const & prototype() const
Identical to element(0)
SymCompareType m_sym_compare
bool compare(ClusterInvariants const &A, ClusterInvariants const &B, double tol)
Compare ClusterInvariants.