15 #ifndef BORNAGAIN_CORE_LATTICE_LATTICE_H
16 #define BORNAGAIN_CORE_LATTICE_LATTICE_H
Visitor interface to visit ISample objects.
virtual void visit(const BasicLattice *)
Base class for tree-like structures containing parameterized objects.
Pure virtual base class for selection rules.
A lattice with three basis vectors.
bool m_cache_ok
Boolean indicating if the reciprocal vectors are already initialized in the cache.
std::vector< kvector_t > vectorsWithinRadius(const kvector_t input_vector, const ivector_t &nearest_coords, double radius, const kvector_t v1, const kvector_t v2, const kvector_t v3, const kvector_t rec1, const kvector_t rec2, const kvector_t rec3) const
void resetBasis(const kvector_t a1, const kvector_t a2, const kvector_t a3)
Resets the basis vectors.
void registerBasisVectors()
ivector_t getNearestLatticeVectorCoordinates(const kvector_t vector_in) const
Returns the nearest lattice point from a given vector.
static void computeInverseVectors(const kvector_t v1, const kvector_t v2, const kvector_t v3, kvector_t o1, kvector_t o2, kvector_t o3)
ivector_t getNearestReciprocalLatticeVectorCoordinates(const kvector_t vector_in) const
Returns the nearest reciprocal lattice point from a given vector.
void setSelectionRule(const ISelectionRule &p_selection_rule)
Sets a selection rule for the reciprocal vectors.
kvector_t getMillerDirection(double h, double k, double l) const
Returns normalized direction corresponding to the given Miller indices.
static Lattice createHCPLattice(double a, double c)
TODO: Clarify how this is meant: HCP is not a Bravais lattice.
kvector_t m_c
Basis vectors in real space.
void initialize() const
Initializes cached data.
kvector_t getBasisVectorB() const
Returns basis vector b.
static Lattice createBCTLattice(double a, double c)
Returns a body-centered cubic (cI) lattice with edge length a.
std::vector< kvector_t > reciprocalLatticeVectorsWithinRadius(const kvector_t input_vector, double radius) const
Computes a list of reciprocal lattice vectors within a specified distance of a given vector.
kvector_t m_rc
Cache of basis vectors in reciprocal space.
kvector_t getBasisVectorC() const
Returns basis vector c.
void accept(INodeVisitor *visitor) const override
Calls the INodeVisitor's visit method.
Lattice createTransformedLattice(const Transform3D &transform) const
Creates transformed lattice.
Lattice & operator=(const Lattice &lattice)
ISelectionRule * mp_selection_rule
double volume() const
Returns the volume of the unit cell.
static Lattice createTetragonalLattice(double a, double c)
Returns a primitive tetragonal (tP) lattice with square base edge a and height c.
void computeReciprocalVectors() const
kvector_t getBasisVectorA() const
Returns basis vector a.
static Lattice createFCCLattice(double a)
Returns a face-centered cubic (cF) lattice with edge length a.
static Lattice createHexagonalLattice(double a, double c)
Returns a primitive hexagonal (hP) lattice with hexagonal edge a and height c.
static Lattice createCubicLattice(double a)
Returns a primitive cubic (cP) lattice with edge length a.
void getReciprocalLatticeBasis(kvector_t &b1, kvector_t &b2, kvector_t &b3) const
Returns the reciprocal basis vectors.
void onChange() override
Action to be taken in inherited class when a parameter has changed.
const double radius(5 *Units::nanometer)