LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+ae94e5adf4,21.0.0-10-g2408eff+ad7fe00a3b,21.0.0-10-g560fb7b+5d30037bff,21.0.0-10-gcf60f90+7fd8e8fd04,21.0.0-11-g25eff31+491f1498e8,21.0.0-11-gd78879e+d13a45ff19,21.0.0-12-g1e69a3f+69d54d99d8,21.0.0-17-g6590b197+c8c705a94e,21.0.0-2-g103fe59+29086b68f8,21.0.0-2-g1367e85+d793a9824f,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+d793a9824f,21.0.0-2-g7f82c8f+7178d1fb8b,21.0.0-2-g8f08a60+fd0b970de5,21.0.0-2-g8faa9b5+3b24369756,21.0.0-2-ga326454+7178d1fb8b,21.0.0-2-gde069b7+ca45a81b40,21.0.0-2-gecfae73+3609a557ba,21.0.0-2-gfc62afb+d793a9824f,21.0.0-22-g2a5702db6+f385fa6f38,21.0.0-3-g357aad2+673ab9f056,21.0.0-3-g4be5c26+d793a9824f,21.0.0-3-g65f322c+45176dc65e,21.0.0-3-g7d9da8d+3b24369756,21.0.0-3-ge02ed75+d05e6d1be4,21.0.0-4-g591bb35+d05e6d1be4,21.0.0-4-g65b4814+5d30037bff,21.0.0-4-gccdca77+a631590478,21.0.0-4-ge8a399c+7f1b116a8b,21.0.0-5-gb7b9a9f+d793a9824f,21.0.0-5-gd00fb1e+de3bd29da1,21.0.0-55-g0be6b205+66ae927d20,21.0.0-6-g2d4f3f3+04719a4bac,21.0.0-7-g04766d7+510a52a951,21.0.0-7-g98eecf7+adb4d61a8d,21.0.0-9-g39e06b5+d05e6d1be4,master-gac4afde19b+d05e6d1be4,w.2021.12
LSST Data Management Base Package
amplifier.cc
Go to the documentation of this file.
1 /*
2  * LSST Data Management System
3  * Copyright 2008-2017 AURA/LSST.
4  *
5  * This product includes software developed by the
6  * LSST Project (http://www.lsst.org/).
7  *
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the LSST License Statement and
19  * the GNU General Public License along with this program. If not,
20  * see <https://www.lsstcorp.org/LegalNotices/>.
21  */
22 
23 #include "pybind11/pybind11.h"
24 #include "pybind11/stl.h"
25 
26 #include "ndarray/pybind11.h"
27 
30 
31 namespace py = pybind11;
32 using namespace pybind11::literals;
33 
34 namespace lsst {
35 namespace afw {
36 namespace cameraGeom {
37 namespace {
38 
39 using PyAmplifier = py::class_<Amplifier, std::shared_ptr<Amplifier>>;
40 using PyAmplifierBuilder = py::class_<Amplifier::Builder, Amplifier, std::shared_ptr<Amplifier::Builder>>;
41 
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);
79  return cls;
80 }
81 
82 void declarePyAmplifierBuilder(PyAmplifier & parent) {
83  PyAmplifierBuilder cls(parent, "Builder");
84  cls.def_static("fromRecord", &Amplifier::Builder::fromRecord);
85  cls.def(py::init());
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);
96  // Backwards compatibility: accept std::vector (list in Python) in
97  // addition to ndarray::Array (np.ndarray)
98  cls.def("setLinearityCoeffs",
99  [](Amplifier::Builder & self, std::vector<double> const & coeffs) {
100  ndarray::Array<double, 1, 1> array = ndarray::allocate(coeffs.size());
101  std::copy(coeffs.begin(), coeffs.end(), array.begin());
102  self.setLinearityCoeffs(array);
103  });
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);
120 }
121 
122 PYBIND11_MODULE(amplifier, mod) {
123  auto cls = declarePyAmplifier(mod);
124  declarePyAmplifierBuilder(cls);
125 }
126 
127 } // namespace
128 } // namespace cameraGeom
129 } // namespace afw
130 } // namespace lsst
ItemVariant const * other
Definition: Schema.cc:56
T begin(T... args)
T copy(T... args)
T end(T... args)
PYBIND11_MODULE(camera, mod)
Definition: camera.cc:133
std::string const & getName() const noexcept
Return a filter's name.
Definition: Filter.h:78
def init()
Definition: tests.py:59
A base class for image defects.
T size(T... args)