23 #include "pybind11/pybind11.h"
24 #include "pybind11/stl.h"
26 #include "ndarray/pybind11.h"
32 using namespace pybind11::literals;
36 namespace cameraGeom {
39 using PyAmplifier = py::class_<Amplifier, std::shared_ptr<Amplifier>>;
40 using PyAmplifierBuilder = py::class_<Amplifier::Builder, Amplifier, std::shared_ptr<Amplifier::Builder>>;
42 PyAmplifier declarePyAmplifier(
py::module & mod) {
43 py::enum_<ReadoutCorner>(mod,
"ReadoutCorner")
44 .value(
"LL", ReadoutCorner::LL)
45 .value(
"LR", ReadoutCorner::LR)
46 .value(
"UR", ReadoutCorner::UR)
47 .value(
"UL", ReadoutCorner::UL);
48 py::enum_<AssemblyState>(mod,
"AssemblyState")
49 .value(
"RAW", AssemblyState::RAW)
50 .value(
"SCIENCE", AssemblyState::SCIENCE);
51 PyAmplifier
cls(mod,
"Amplifier");
52 cls.def_static(
"getRecordSchema", &Amplifier::getRecordSchema);
53 cls.def(
"toRecord", &Amplifier::toRecord);
54 cls.def(
"rebuild", &Amplifier::rebuild);
55 cls.def(
"getName", &Amplifier::getName);
56 cls.def(
"getBBox", &Amplifier::getBBox);
57 cls.def(
"getGain", &Amplifier::getGain);
58 cls.def(
"getReadNoise", &Amplifier::getReadNoise);
59 cls.def(
"getSaturation", &Amplifier::getSaturation);
60 cls.def(
"getSuspectLevel", &Amplifier::getSuspectLevel);
61 cls.def(
"getReadoutCorner", &Amplifier::getReadoutCorner);
62 cls.def(
"getLinearityCoeffs", &Amplifier::getLinearityCoeffs);
63 cls.def(
"getLinearityType", &Amplifier::getLinearityType);
64 cls.def(
"getLinearityThreshold", &Amplifier::getLinearityThreshold);
65 cls.def(
"getLinearityMaximum", &Amplifier::getLinearityMaximum);
66 cls.def(
"getLinearityUnits", &Amplifier::getLinearityUnits);
67 cls.def(
"getRawBBox", &Amplifier::getRawBBox);
68 cls.def(
"getRawDataBBox", &Amplifier::getRawDataBBox);
69 cls.def(
"getRawFlipX", &Amplifier::getRawFlipX);
70 cls.def(
"getRawFlipY", &Amplifier::getRawFlipY);
71 cls.def(
"getRawXYOffset", &Amplifier::getRawXYOffset);
72 cls.def(
"getRawHorizontalOverscanBBox", &Amplifier::getRawHorizontalOverscanBBox);
73 cls.def(
"getRawVerticalOverscanBBox", &Amplifier::getRawVerticalOverscanBBox);
74 cls.def(
"getRawPrescanBBox", &Amplifier::getRawPrescanBBox);
75 cls.def(
"getRawSerialOverscanBBox", &Amplifier::getRawSerialOverscanBBox);
76 cls.def(
"getRawParallelOverscanBBox", &Amplifier::getRawParallelOverscanBBox);
77 cls.def(
"getRawSerialPrescanBBox", &Amplifier::getRawSerialPrescanBBox);
78 cls.def(
"getRawHorizontalPrescanBBox", &Amplifier::getRawHorizontalPrescanBBox);
82 void declarePyAmplifierBuilder(PyAmplifier & parent) {
83 PyAmplifierBuilder
cls(parent,
"Builder");
84 cls.def_static(
"fromRecord", &Amplifier::Builder::fromRecord);
86 cls.def(
"finish", &Amplifier::Builder::finish);
87 cls.def(
"assign", [](Amplifier::Builder &
self, Amplifier
const &
other) {
self =
other; });
88 cls.def(
"setName", &Amplifier::Builder::setName,
"name"_a);
89 cls.def(
"setBBox", &Amplifier::Builder::setBBox,
"bbox"_a);
90 cls.def(
"setGain", &Amplifier::Builder::setGain,
"gain"_a);
91 cls.def(
"setReadNoise", &Amplifier::Builder::setReadNoise,
"readNoise"_a);
92 cls.def(
"setSaturation", &Amplifier::Builder::setSaturation,
"saturation"_a);
93 cls.def(
"setSuspectLevel", &Amplifier::Builder::setSuspectLevel,
"suspectLevel"_a);
94 cls.def(
"setReadoutCorner", &Amplifier::Builder::setReadoutCorner,
"corner"_a);
95 cls.def(
"setLinearityCoeffs", &Amplifier::Builder::setLinearityCoeffs,
"coeffs"_a);
98 cls.def(
"setLinearityCoeffs",
100 ndarray::Array<double, 1, 1> array = ndarray::allocate(coeffs.
size());
102 self.setLinearityCoeffs(array);
104 cls.def(
"setLinearityType", &Amplifier::Builder::setLinearityType,
"type"_a);
105 cls.def(
"setLinearityThreshold", &Amplifier::Builder::setLinearityThreshold,
"threshold"_a);
106 cls.def(
"setLinearityMaximum", &Amplifier::Builder::setLinearityMaximum,
"maximum"_a);
107 cls.def(
"setLinearityUnits", &Amplifier::Builder::setLinearityUnits,
"units"_a);
108 cls.def(
"setRawBBox", &Amplifier::Builder::setRawBBox,
"bbox"_a);
109 cls.def(
"setRawDataBBox", &Amplifier::Builder::setRawDataBBox,
"bbox"_a);
110 cls.def(
"setRawFlipX", &Amplifier::Builder::setRawFlipX,
"rawFlipX"_a);
111 cls.def(
"setRawFlipY", &Amplifier::Builder::setRawFlipY,
"rawFlipY"_a);
112 cls.def(
"setRawXYOffset", &Amplifier::Builder::setRawXYOffset,
"offset"_a);
113 cls.def(
"setRawHorizontalOverscanBBox", &Amplifier::Builder::setRawHorizontalOverscanBBox,
"bbox"_a);
114 cls.def(
"setRawVerticalOverscanBBox", &Amplifier::Builder::setRawVerticalOverscanBBox,
"bbox"_a);
115 cls.def(
"setRawPrescanBBox", &Amplifier::Builder::setRawPrescanBBox,
"bbox"_a);
116 cls.def(
"setRawSerialOverscanBBox", &Amplifier::Builder::setRawSerialOverscanBBox,
"bbox"_a);
117 cls.def(
"setRawParallelOverscanBBox", &Amplifier::Builder::setRawParallelOverscanBBox,
"bbox"_a);
118 cls.def(
"setRawSerialPrescanBBox", &Amplifier::Builder::setRawSerialPrescanBBox,
"bbox"_a);
119 cls.def(
"setRawHorizontalPrescanBBox", &Amplifier::Builder::setRawHorizontalPrescanBBox,
"bbox"_a);
123 auto cls = declarePyAmplifier(mod);
124 declarePyAmplifierBuilder(
cls);