Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
995b14b
Pull in Zack's implementation of inverse distortion
kevindlewis23 Aug 8, 2024
1191eaf
sqrt fix for mac install
kevindlewis23 Aug 8, 2024
5e363cd
Use math defines
kevindlewis23 Aug 8, 2024
444249b
replace constexpr with const to fix stuff
kevindlewis23 Aug 8, 2024
7ab1c89
Including cmath so use_math_defines does something
kevindlewis23 Aug 8, 2024
9e2a000
Move up the math defines because eigen probably include cmath already.
kevindlewis23 Aug 8, 2024
524cd4b
Starting to port over eigen transforms
kevindlewis23 Aug 9, 2024
fa1a09e
setup.py
kevindlewis23 Aug 9, 2024
b05b9ca
Merge branch 'master' of https://github.com/HEXRD/hexrd into eigen-tr…
kevindlewis23 Aug 9, 2024
367391a
Fixed the function I broke
kevindlewis23 Aug 9, 2024
6688ce1
Update gvec_to_xy
kevindlewis23 Aug 9, 2024
67e21f9
Update import
kevindlewis23 Aug 12, 2024
e69237b
Merge branch 'master' of https://github.com/HEXRD/hexrd into eigen-tr…
kevindlewis23 Aug 12, 2024
69730dc
Merge branch 'eigen-transforms'
ZackAttack614 Jan 10, 2025
9dffd22
Update tests/transforms/test_gvec_to_xy_from_file.py
ZackAttack614 Jan 30, 2025
1b6f4b6
Update hexrd/transforms/cpp_sublibrary/src/transforms.cpp
ZackAttack614 Jan 30, 2025
ceed057
Apply suggestions from code review
ZackAttack614 Jan 30, 2025
c74f525
Apply clang-format
ZackAttack614 Jan 30, 2025
a65cb36
Change the name of the function at definition
ZackAttack614 Jan 30, 2025
f3297f0
put str here instead of pathlib Path. I think there are some versions…
kpwelsh Jan 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 25 additions & 14 deletions hexrd/transforms/cpp_sublibrary/src/inverse_distortion.cpp
Original file line number Diff line number Diff line change
@@ -1,31 +1,42 @@
#define _USE_MATH_DEFINES
#include <pybind11/pybind11.h>
#include <pybind11/eigen.h>
#define _USE_MATH_DEFINES
#include <Eigen/Core>
#include <xsimd/xsimd.hpp>
#include <cmath>
#include <pybind11/eigen.h>
#include <pybind11/pybind11.h>
#include <xsimd/xsimd.hpp>

namespace py = pybind11;
const double FOUR_THIRDS_PI = M_PI * 4.0 / 3.0;
const double N_THREE_HALVES_SQRT_3 = -3.0 / 2.0 * std::sqrt(3.0);
const double TWO_OVER_SQRT_THREE = 2.0 / std::sqrt(3.0);

Eigen::ArrayXXd ge_41rt_inverse_distortion(const Eigen::ArrayXXd& inputs, const double rhoMax, const Eigen::ArrayXd& params) {
Eigen::ArrayXXd ge_41rt_inverse_distortion(const Eigen::ArrayXXd &inputs,
const double rhoMax,
const Eigen::ArrayXd &params) {
Eigen::ArrayXd radii = inputs.matrix().rowwise().norm();
Eigen::ArrayXd inverted_radii = radii.cwiseInverse();
Eigen::ArrayXd cosines = inputs.col(0) * inverted_radii;
Eigen::ArrayXd cosine_double_angles = 2*cosines.square() - 1;
Eigen::ArrayXd cosine_quadruple_angles = 2*cosine_double_angles.square() - 1;
Eigen::ArrayXd sqrt_p_is = rhoMax / (-params[0]*cosine_double_angles - params[1]*cosine_quadruple_angles - params[2]).sqrt();
Eigen::ArrayXd solutions = TWO_OVER_SQRT_THREE*sqrt_p_is*(acos(N_THREE_HALVES_SQRT_3*radii/sqrt_p_is)/3 + FOUR_THIRDS_PI).cos();
Eigen::ArrayXXd results = solutions.rowwise().replicate(inputs.cols()).array() * inputs * inverted_radii.rowwise().replicate(inputs.cols()).array();
Eigen::ArrayXd cosine_double_angles = 2 * cosines.square() - 1;
Eigen::ArrayXd cosine_quadruple_angles =
2 * cosine_double_angles.square() - 1;
Eigen::ArrayXd sqrt_p_is =
rhoMax / (-params[0] * cosine_double_angles -
params[1] * cosine_quadruple_angles - params[2])
.sqrt();
Eigen::ArrayXd solutions =
TWO_OVER_SQRT_THREE * sqrt_p_is *
(acos(N_THREE_HALVES_SQRT_3 * radii / sqrt_p_is) / 3 + FOUR_THIRDS_PI)
.cos();
Eigen::ArrayXXd results =
solutions.rowwise().replicate(inputs.cols()).array() * inputs *
inverted_radii.rowwise().replicate(inputs.cols()).array();

return results;
}

PYBIND11_MODULE(inverse_distortion, m)
{
m.doc() = "HEXRD inverse distribution plugin";
PYBIND11_MODULE(inverse_distortion, m) {
m.doc() = "HEXRD inverse distribution plugin";

m.def("ge_41rt_inverse_distortion", &ge_41rt_inverse_distortion, "Inverse distortion for ge_41rt");
m.def("ge_41rt_inverse_distortion", &ge_41rt_inverse_distortion,
"Inverse distortion for ge_41rt");
}
Loading