37     : m_prim_lattice(), m_q1(q1), m_q2(q2), m_ind1{index1}, m_ind2{index2}
 
   40         throw std::runtime_error(
"MillerIndexOrientation constructor: " 
   41                                  "invalid alignment parameters");
 
   63     auto dir_2_parallel = dir_2.
project(dir_1);
 
   64     dir_2 = (dir_2 - dir_2_parallel).unit();
 
   67     Eigen::Matrix3d rot_matrix;
 
   89     return (index.
h != 0.0 || index.
k != 0.0 || index.
l != 0.0);
 
   94     if (index2.
h != 0.0) {
 
   95         ratio = index1.
h / index2.
h;
 
   96     } 
else if (index2.
k != 0.0) {
 
   97         ratio = index1.
k / index2.
k;
 
   98     } 
else if (index2.
l != 0.0) {
 
   99         ratio = index1.
l / index2.
l;
 
  103     return (index1.
h == ratio * index2.
h && index1.
k == ratio * index2.
k 
  104             && index1.
l == ratio * index2.
l);
 
  127     for (
int j = 0; j < 3; ++j)
 
Defines interface ILatticeOrientation and subclasses.
 
BasicVector3D< T > project(const BasicVector3D< T > &v) const
Returns projection of this onto other vector: (this*v)*v/|v|^2.
 
virtual ~ILatticeOrientation()
 
A lattice with three basis vectors.
 
void resetBasis(const kvector_t a1, const kvector_t a2, const kvector_t a3)
Resets the basis vectors.
 
kvector_t getMillerDirection(double h, double k, double l) const
Returns normalized direction corresponding to the given Miller indices.
 
kvector_t getBasisVectorB() const
Returns basis vector b.
 
kvector_t getBasisVectorC() const
Returns basis vector c.
 
kvector_t getBasisVectorA() const
Returns basis vector a.
 
Specifies a rotation of a lattice through the Miller indices of two coordinate axes.
 
Transform3D transformationMatrix() const override
 
~MillerIndexOrientation() override
 
void usePrimitiveLattice(const Lattice &lattice) override
 
bool checkAlignment() const
 
MillerIndexOrientation(QComponent q1, MillerIndex index1, QComponent q2, MillerIndex index2)
This constructor is best explained by an example.
 
MillerIndexOrientation * clone() const override
 
MillerIndexOrientation::QComponent ThirdQComponent(MillerIndexOrientation::QComponent q1, MillerIndexOrientation::QComponent q2)
 
bool ParallelMillerIndices(MillerIndex index1, MillerIndex index2)
 
double SignForCrossProduct(MillerIndexOrientation::QComponent q1, MillerIndexOrientation::QComponent q2)
 
bool ValidMillerIndex(MillerIndex index)
 
void FillVectorInRow(Eigen::Matrix3d &matrix, kvector_t vec, MillerIndexOrientation::QComponent row)
 
A direction in reciprocal space, specified by double-valued indices hkl.
 
MillerIndex(double h_, double k_, double l_)