allow ints, doubles, implicit conversions

This commit is contained in:
2026-04-16 16:07:02 +02:00
parent 97ed713d4d
commit f925c5b1a6
6 changed files with 36 additions and 19 deletions
+2
View File
@@ -35,6 +35,8 @@ currentSrcParameters = _slsdet.currentSrcParameters
DurationWrapper = _slsdet.DurationWrapper
pedestalParameters = _slsdet.pedestalParameters
Hz = _slsdet.Hz
kHz = _slsdet.kHz
MHz = _slsdet.MHz
import os
def read_version():
+23 -8
View File
@@ -4,23 +4,38 @@
This file contains Python bindings for the Hz and for conversion to other units from and to string.
*/
#include "py_headers.h"
#include <cmath>
#include "sls/ToString.h"
#include "sls/sls_detector_defs.h"
namespace py = pybind11;
constexpr double kHz = 1e3;
constexpr double MHz = 1e6;
void init_freq(py::module &m) {
py::class_<slsDetectorDefs::Hz> Hz(m, "Hz");
Hz.def(py::init<int v) {
return slsDetectorDefs::Hz(v * 1000000);
}));
Hz.def(py::init([](const std::string &s) {
return sls::StringTo<slsDetectorDefs::Hz>(s);
Hz.def(py::init<int>());
Hz.def(py::init([](double v) {
return slsDetectorDefs::Hz(static_cast<int>(std::round(v)));
}));
Hz.def_readwrite("value", &slsDetectorDefs::Hz::value);
Hz.def("__repr__", [](const slsDetectorDefs::Hz &f) { return sls::ToString(f); });
Hz.def("__str__", [](const slsDetectorDefs::Hz &f) { return sls::ToString(f); });
Hz.def("__repr__", [](const slsDetectorDefs::Hz &f) {
return sls::ToString(f);
});
Hz.def("__str__", [](const slsDetectorDefs::Hz &f) {
return sls::ToString(f);
});
Hz.def(py::self == py::self);
py::implicitly_convertible<std::string, slsDetectorDefs::Hz>();
m.def("kHz", [](double v) {
return slsDetectorDefs::Hz(static_cast<int>(std::round(v * kHz)));
});
m.def("MHz", [](double v) {
return slsDetectorDefs::Hz(static_cast<int>(std::round(v * MHz)));
});
py::implicitly_convertible<int, slsDetectorDefs::Hz>();
py::implicitly_convertible<double, slsDetectorDefs::Hz>();
}