oILAB
Loading...
Searching...
No Matches
LatticeDirectionBindings.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 7/3/25.
3//
4
5#ifndef OILAB_LATTICEDIRECTIONBINDINGS_H
6#define OILAB_LATTICEDIRECTIONBINDINGS_H
7
8#include <pybind11/pybind11.h>
9#include <pybind11/operators.h>
10#include <LatticeModule.h>
11#include <pybind11/numpy.h>
12#include <pybind11/eigen.h>
14
15
16
17
18namespace pyoilab{
19 template<int dim>
21 {
23
27
28 using IntScalarType = long long int;
29 using MatrixDimD = Eigen::Matrix<double, dim, dim>;
30 using VectorDimD = Eigen::Matrix<double, dim, 1>;
31 using VectorDimI = Eigen::Matrix<IntScalarType, dim, 1>;
32 using MatrixDimI = Eigen::Matrix<IntScalarType, dim, dim>;
33 public:
38 PyLatticeDirection(const VectorDimI& v, const Lattice& lat) : ld(v,lat){}
40 {
41 return ld.latticeVector();
42 }
43
45 return ld.cartesian();
46 }
47
49 return ld.latticeVector();
50 }
51
53 return ld.dot(other.rlv);
54 }
55 };
56
57 template<int dim>
58 void bind_LatticeDirection(py::module_ &m) {
59 using MatrixDimD = Eigen::Matrix<double, dim, dim>;
60 using VectorDimD = Eigen::Matrix<double, dim, 1>;
61 using VectorDimI = Eigen::Matrix<long long int, dim, 1>;
62
63 using Lattice = gbLAB::Lattice<dim>;
64 using LatticeDirection = gbLAB::LatticeDirection<dim>;
65 using LatticeVector = gbLAB::LatticeVector<dim>;
66
69
70 py::class_<PyLatticeDirection>(m, ("LatticeDirection" + std::to_string(dim) + "D").c_str())
71 .def(py::init<const PyLatticeVector&>())
72 .def(py::init<const PyLatticeDirection&>())
73 .def(py::init<const VectorDimI&, const Lattice&>())
74 .def("latticeVector",[](const PyLatticeDirection& ld) {
75 return PyLatticeVector(ld.latticeVector());
76 },"Get the lattice vector")
77 .def("cartesian",&PyLatticeDirection::cartesian, "Cartesian coordinates of the lattice direction.")
78 .def("integerCoordinates",&PyLatticeDirection::integerCoordinates,"Integer coordinates of the lattice direction.")
79 .def("dot",&PyLatticeDirection::dot,"dot product with a reciprocal lattice vector");
80 }
81}
82#endif //OILAB_LATTICEDIRECTIONBINDINGS_H
Lattice class.
Definition Lattice.h:34
LatticeVector class.
VectorDimD cartesian() const
IntScalarType dot(const ReciprocalLatticeVector< dim > &other) const
PyLatticeDirection(const PyLatticeVector &pv)
Eigen::Matrix< double, dim, dim > MatrixDimD
Eigen::Matrix< IntScalarType, dim, 1 > VectorDimI
Eigen::Matrix< double, dim, 1 > VectorDimD
PyLatticeDirection(const PyLatticeDirection &pld)
PyLatticeDirection(const LatticeDirection &ld)
const LatticeVector & latticeVector() const
PyLatticeDirection(const VectorDimI &v, const Lattice &lat)
Eigen::Matrix< IntScalarType, dim, dim > MatrixDimI
IntScalarType dot(const PyReciprocalLatticeVector< dim > &other) const
void bind_LatticeDirection(py::module_ &m)
LatticeDirection class.
const LatticeVector< dim > & latticeVector() const