#include #include "nmie.hpp" #include "nmie-basic.hpp" #include "nmie-nearfield.hpp" template void declare_nmie(py::module &m, const std::string &typestr) { using mie_typed = nmie::MultiLayerMie; std::string pyclass_name = std::string("mie") + typestr; py::class_(m, pyclass_name.c_str(), py::buffer_protocol(), py::dynamic_attr()) .def(py::init<>()) .def("GetPECLayer", &mie_typed::GetPECLayer) .def("SetPECLayer", &mie_typed::SetPECLayer) .def("SetMaxTerms", &mie_typed::SetMaxTerms) .def("GetMaxTerms", &mie_typed::GetMaxTerms) .def("SetModeNmaxAndType", &mie_typed::SetModeNmaxAndType) .def("RunMieCalculation", &mie_typed::RunMieCalculation) .def("calcScattCoeffs", &mie_typed::calcScattCoeffs) .def("calcExpanCoeffs", &mie_typed::calcExpanCoeffs) .def("RunFieldCalculation", &mie_typed::RunFieldCalculation) .def("RunFieldCalculationPolar", &mie_typed::RunFieldCalculationPolar) .def("GetPECLayer", &mie_typed::GetPECLayer) .def("SetLayersSize", static_cast< void (mie_typed::*) (const py::array_t&)> (&mie_typed::SetLayersSize) ) .def("SetLayersIndex", static_cast< void (mie_typed::*) (const py::array_t, py::array::c_style | py::array::forcecast> &)> (&mie_typed::SetLayersIndex) ) .def("SetAngles", static_cast< void (mie_typed::*) (const py::array_t&)> (&mie_typed::SetAngles) ) .def("SetFieldCoords", static_cast< void (mie_typed::*) ( const py::array_t &py_Xp, const py::array_t &py_Yp, const py::array_t &py_Zp )> (&mie_typed::SetFieldCoords) ) .def("GetQext", &mie_typed::GetQext) .def("GetQsca", &mie_typed::GetQsca) .def("GetQabs", &mie_typed::GetQabs) .def("GetQpr", &mie_typed::GetQpr) .def("GetQbk", &mie_typed::GetQbk) .def("GetAsymmetryFactor", &mie_typed::GetAsymmetryFactor) .def("GetAlbedo", &mie_typed::GetAlbedo) .def("GetS1", &mie_typed::GetS1) .def("GetS2", &mie_typed::GetS2) .def("GetAn", &mie_typed::GetAn) .def("GetBn", &mie_typed::GetBn) .def("GetFieldE", &mie_typed::GetFieldE) .def("GetFieldH", &mie_typed::GetFieldH) .def("GetLayerAn", &mie_typed::GetLayerAn) .def("GetLayerBn", &mie_typed::GetLayerBn) .def("GetLayerCn", &mie_typed::GetLayerCn) .def("GetLayerDn", &mie_typed::GetLayerDn) ; } // wrap as Python module #ifdef MULTI_PRECISION std::string precision_name = "_mp"; PYBIND11_MODULE(scattnlay_mp, m) #else std::string precision_name = "_dp"; PYBIND11_MODULE(scattnlay_dp, m) #endif // MULTI_PRECISION { m.doc() = "The Python version of scattnlay"; declare_nmie(m, precision_name); }