4 #include <boost/iterator/transform_iterator.hpp>
42 template <
typename _SymCompareType>
46 using Element =
typename _SymCompareType::Element;
147 template <
typename SymOpIterator>
177 template <
typename GeneratorIterator,
typename SymCompareType,
178 typename OrbitOutputIterator>
180 GeneratorIterator gen_end,
182 const SymCompareType &sym_compare,
183 OrbitOutputIterator result) {
184 using OrbitType =
typename OrbitOutputIterator::container_type::value_type;
185 for (; gen_begin != gen_end; ++gen_begin) {
186 *(result++) = OrbitType(*gen_begin, generating_group, sym_compare);
194 template <
typename OrbitIterator,
typename Element>
195 OrbitIterator
find_orbit(OrbitIterator begin, OrbitIterator end, Element e);
198 template <
typename OrbitType>
199 typename OrbitType::Element
const &
operator()(
const OrbitType &orbit)
const {
200 return orbit.prototype();
204 template <
typename OrbitIterator>
206 boost::transform_iterator<GetPrototype, OrbitIterator>;
209 template <
typename OrbitIterator>
211 return boost::make_transform_iterator(orbit_it,
GetPrototype());
215 template <
typename OrbitType>
217 const OrbitType &orbit)
const {
218 return orbit.invariants();
222 template <
typename OrbitIterator>
224 boost::transform_iterator<GetInvariants, OrbitIterator>;
227 template <
typename OrbitIterator>
229 return boost::make_transform_iterator(orbit_it,
GetInvariants());
InvariantsType const & invariants() const
InvariantsType m_invariants
Orbit invariants.
const std::vector< Element > & elements() const
const Access vector of Element
Orbit(Element generating_element, SymGroup const &generating_group, SymCompareType const &sym_compare)
Construct an Orbit from a generating_element Element, using provided symmetry group.
std::vector< Element > m_element
All symmetrically equivalent elements (excluding those that SymCompare equivalent)
void _construct_canonization_rep() const
std::pair< const_symop_iterator, const_symop_iterator > equivalence_map(size_type index) const
Return the equivalence map for element[index].
const multivector< SymOp >::X< 2 > & equivalence_map() const
Return the equivalence map.
const_iterator begin() const
typename std::vector< SymOp >::const_iterator const_symop_iterator
const SymCompareType & sym_compare() const
Return the SymCompare functor reference.
Orbit & apply_sym(const SymOp &op)
Apply symmetry to Orbit.
const_iterator end() const
const Element & prototype() const
Identical to element(0)
multivector< SymOp >::X< 2 > m_equivalence_map
element(i) compares equivalent to prototype().copy_apply(m_equivalence_map[i][j]) for all j
SymGroup m_generating_group
Group used to generate the orbit.
const SymGroup & generating_group() const
Return the generating SymGroup.
const_iterator cbegin() const
const_iterator find(const Element &e) const
Find element in Orbit.
SymGroupRepID canonization_rep_ID() const
Return the canonization symmetry representation ID.
typename _SymCompareType::InvariantsType InvariantsType
SymGroupRepID m_canonization_rep_ID
ID of symmetry representation that describes the effect of each SymOp with respect to the canonical e...
void _construct(Element generating_element, SymOpIterator begin, SymOpIterator end)
Construct an Orbit from a generating_element Element, using provided symmetry rep.
typename std::vector< Element >::const_iterator const_iterator
bool operator<(const Orbit &B) const
Compare orbits, using SymCompareType::inter_orbit_compare.
const Element & element(size_type index) const
Equivalent to operator[](size_type index) const.
typename _SymCompareType::Element Element
SymCompareType m_sym_compare
Functor used to check compare Element, including symmetry rules, and make canonical forms.
_SymCompareType SymCompareType
bool contains(const Element &e) const
Check if element is in Orbit.
const_iterator cend() const
const Element & operator[](size_type index) const
Return Element at index, without bounds checking.
SymGroup is a collection of symmetry operations that satisfy the group property The symmetry operatio...
Type-safe ID object for communicating and accessing Symmetry representation info.
bool empty() const
Returns true if SymGroupRepID has not been initialized with valid group_index or rep_index.
SymOp is the Coordinate representation of a symmetry operation it keeps fraction (FRAC) and Cartesian...
OrbitOutputIterator make_orbits(OrbitBranchSpecsIterator begin, OrbitBranchSpecsIterator end, const std::vector< IntegralClusterOrbitGenerator > &custom_generators, OrbitOutputIterator result, std::ostream &status)
Generate orbits of IntegralCluster using OrbitBranchSpecs.
OrbitIterator find_orbit(OrbitIterator begin, OrbitIterator end, Element e)
Find orbit containing an element in a range of Orbit.
boost::transform_iterator< GetInvariants, OrbitIterator > InvariantsIterator
boost::transform_iterator< GetPrototype, OrbitIterator > PrototypeIterator
InvariantsIterator< OrbitIterator > invariants_iterator(OrbitIterator orbit_it)
Convert an Orbit iterator to an invariants iterator.
PrototypeIterator< OrbitIterator > prototype_iterator(OrbitIterator orbit_it)
Convert an Orbit iterator to a prototype iterator.
OrbitType::InvariantsType const & operator()(const OrbitType &orbit) const
OrbitType::Element const & operator()(const OrbitType &orbit) const
typename multivector_impl::multivector_tmp< T, N >::type X
Implements other comparisons in terms of '<'.