LSST Applications g04e9c324dd+8c5ae1fdc5,g134cb467dc+1b3060144d,g18429d2f64+f642bf4753,g199a45376c+0ba108daf9,g1fd858c14a+2dcf163641,g262e1987ae+7b8c96d2ca,g29ae962dfc+3bd6ecb08a,g2cef7863aa+aef1011c0b,g35bb328faa+8c5ae1fdc5,g3fd5ace14f+53e1a9e7c5,g4595892280+fef73a337f,g47891489e3+2efcf17695,g4d44eb3520+642b70b07e,g53246c7159+8c5ae1fdc5,g67b6fd64d1+2efcf17695,g67fd3c3899+b70e05ef52,g74acd417e5+317eb4c7d4,g786e29fd12+668abc6043,g87389fa792+8856018cbb,g89139ef638+2efcf17695,g8d7436a09f+3be3c13596,g8ea07a8fe4+9f5ccc88ac,g90f42f885a+a4e7b16d9b,g97be763408+ad77d7208f,g9dd6db0277+b70e05ef52,ga681d05dcb+a3f46e7fff,gabf8522325+735880ea63,gac2eed3f23+2efcf17695,gb89ab40317+2efcf17695,gbf99507273+8c5ae1fdc5,gd8ff7fe66e+b70e05ef52,gdab6d2f7ff+317eb4c7d4,gdc713202bf+b70e05ef52,gdfd2d52018+b10e285e0f,ge365c994fd+310e8507c4,ge410e46f29+2efcf17695,geaed405ab2+562b3308c0,gffca2db377+8c5ae1fdc5,w.2025.35
LSST Data Management Base Package
Loading...
Searching...
No Matches
_amplifier.cc
Go to the documentation of this file.
1/*
2 * This file is part of afw.
3 *
4 * Developed for the LSST Data Management System.
5 * This product includes software developed by the LSST Project
6 * (https://www.lsst.org).
7 * See the COPYRIGHT file at the top-level directory of this distribution
8 * for details of code ownership.
9 *
10 * This program is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
24#include "pybind11/pybind11.h"
26#include "pybind11/stl.h"
27
28#include "ndarray/pybind11.h"
29
32
33namespace py = pybind11;
34using namespace pybind11::literals;
35
36namespace lsst {
37namespace afw {
38namespace cameraGeom {
39
40using PyAmplifier = py::classh<Amplifier>;
41using PyAmplifierBuilder = py::classh<Amplifier::Builder, Amplifier>;
42
44 wrappers.addInheritanceDependency("lsst.afw.table");
45 wrappers.wrapType(py::enum_<ReadoutCorner>(wrappers.module, "ReadoutCorner"), [](auto &mod, auto &enm) {
46 enm.value("LL", ReadoutCorner::LL);
47 enm.value("LR", ReadoutCorner::LR);
48 enm.value("UR", ReadoutCorner::UR);
49 enm.value("UL", ReadoutCorner::UL);
50 });
51 wrappers.wrapType(py::enum_<AssemblyState>(wrappers.module, "AssemblyState"), [](auto &mod, auto &enm) {
52 enm.value("RAW", AssemblyState::RAW);
53 enm.value("SCIENCE", AssemblyState::SCIENCE);
54 });
55 auto amplifier = wrappers.wrapType(PyAmplifier(wrappers.module, "Amplifier"), [](auto &mod, auto &cls) {
56 cls.def_static("getRecordSchema", &Amplifier::getRecordSchema);
57 cls.def("toRecord", &Amplifier::toRecord);
58 cls.def("rebuild", &Amplifier::rebuild);
59 cls.def("getName", &Amplifier::getName);
60 cls.def("getBBox", &Amplifier::getBBox);
61 cls.def("getGain", &Amplifier::getGain);
62 cls.def("getReadNoise", &Amplifier::getReadNoise);
63 cls.def("getSaturation", &Amplifier::getSaturation);
64 cls.def("getSuspectLevel", &Amplifier::getSuspectLevel);
65 cls.def("getReadoutCorner", &Amplifier::getReadoutCorner);
66 cls.def("getLinearityCoeffs", &Amplifier::getLinearityCoeffs);
67 cls.def("getLinearityType", &Amplifier::getLinearityType);
68 cls.def("getLinearityThreshold", &Amplifier::getLinearityThreshold);
69 cls.def("getLinearityMaximum", &Amplifier::getLinearityMaximum);
70 cls.def("getLinearityUnits", &Amplifier::getLinearityUnits);
71 cls.def("getRawBBox", &Amplifier::getRawBBox);
72 cls.def("getRawDataBBox", &Amplifier::getRawDataBBox);
73 cls.def("getRawFlipX", &Amplifier::getRawFlipX);
74 cls.def("getRawFlipY", &Amplifier::getRawFlipY);
75 cls.def("getRawXYOffset", &Amplifier::getRawXYOffset);
76 cls.def("getRawHorizontalOverscanBBox", &Amplifier::getRawHorizontalOverscanBBox);
77 cls.def("getRawVerticalOverscanBBox", &Amplifier::getRawVerticalOverscanBBox);
78 cls.def("getRawPrescanBBox", &Amplifier::getRawPrescanBBox);
79 cls.def("getRawSerialOverscanBBox", &Amplifier::getRawSerialOverscanBBox);
80 cls.def("getRawParallelOverscanBBox", &Amplifier::getRawParallelOverscanBBox);
81 cls.def("getRawSerialPrescanBBox", &Amplifier::getRawSerialPrescanBBox);
82 cls.def("getRawHorizontalPrescanBBox", &Amplifier::getRawHorizontalPrescanBBox);
83 });
84 wrappers.wrapType(PyAmplifierBuilder(amplifier, "Builder"), [](auto &mod, auto &cls) {
85 cls.def_static("fromRecord", &Amplifier::Builder::fromRecord);
86 cls.def(py::init());
87 cls.def("finish", &Amplifier::Builder::finish);
88 cls.def("assign", [](Amplifier::Builder &self, Amplifier const &other) { self = other; });
89 cls.def("setName", &Amplifier::Builder::setName, "name"_a);
90 cls.def("setBBox", &Amplifier::Builder::setBBox, "bbox"_a);
91 cls.def("setGain", &Amplifier::Builder::setGain, "gain"_a);
92 cls.def("setReadNoise", &Amplifier::Builder::setReadNoise, "readNoise"_a);
93 cls.def("setSaturation", &Amplifier::Builder::setSaturation, "saturation"_a);
94 cls.def("setSuspectLevel", &Amplifier::Builder::setSuspectLevel, "suspectLevel"_a);
95 cls.def("setReadoutCorner", &Amplifier::Builder::setReadoutCorner, "corner"_a);
96 cls.def("setLinearityCoeffs", &Amplifier::Builder::setLinearityCoeffs, "coeffs"_a);
97 // Backwards compatibility: accept std::vector (list in Python) in
98 // addition to ndarray::Array (np.ndarray)
99 cls.def("setLinearityCoeffs", [](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
123} // namespace cameraGeom
124} // namespace afw
125} // namespace lsst
T begin(T... args)
A mutable Amplifier subclass class that can be used to incrementally construct or modify Amplifiers.
Definition Amplifier.h:305
void setSaturation(double saturation)
Level in ADU above which pixels are considered saturated; use nan if no such level applies.
Definition Amplifier.h:360
void setRawParallelOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of parallel overscan pixels (equivalent to vertical overscan pixels) in the image to...
Definition Amplifier.h:421
void setBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier pixels in the trimmed, assembled image.
Definition Amplifier.h:351
void setRawFlipY(bool rawFlipY)
Is this amplifier (and the image to which it is attached) flipped in the Y direction,...
Definition Amplifier.h:395
void setReadNoise(double readNoise)
Amplifier read noise, in e-.
Definition Amplifier.h:357
void setLinearityThreshold(double threshold)
Level in ADU above which linearity should be applied.
Definition Amplifier.h:377
void setLinearityCoeffs(ndarray::Array< double const, 1, 1 > const &coeffs)
Vector of linearity coefficients.
Definition Amplifier.h:369
void setRawSerialOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of serial overscan pixels (equivalent to horizontal overscan pixels) in the image to...
Definition Amplifier.h:416
void setRawHorizontalPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal/serial prescan pixels in the image to which it is attached,...
Definition Amplifier.h:431
static Builder fromRecord(table::BaseRecord const &record)
Construct a new Builder object from the fields in the given record.
Definition Amplifier.cc:286
void setRawHorizontalOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal overscan pixels in the image to which it is attached,...
Definition Amplifier.h:401
void setRawFlipX(bool rawFlipX)
Is this amplifier (and the image to which it is attached) flipped in the X direction,...
Definition Amplifier.h:392
void setGain(double gain)
Amplifier gain in e-/ADU.
Definition Amplifier.h:354
void setReadoutCorner(ReadoutCorner readoutCorner)
Readout corner in the trimmed, assembled image.
Definition Amplifier.h:366
void setRawDataBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier data pixels in the image to which it is attached, which is assumed to be un...
Definition Amplifier.h:389
std::shared_ptr< Amplifier const > finish() const
Construct an immutable Amplifier with the same values as the Builder.
Definition Amplifier.cc:282
void setLinearityMaximum(double maximum)
Level in ADU above which the linearity relation is poorly defined.
Definition Amplifier.h:380
void setSuspectLevel(double suspectLevel)
Level in ADU above which pixels are considered suspicious, meaning they may be affected by unknown sy...
Definition Amplifier.h:363
void setLinearityType(std::string const &type)
Name of linearity parameterization.
Definition Amplifier.h:374
void setRawVerticalOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of vertical overscan pixels in the image to which it is attached,...
Definition Amplifier.h:406
void setRawXYOffset(lsst::geom::Extent2I const &xy)
Offset in transformation from this amplifier (and the image to which it is attached) to trimmed,...
Definition Amplifier.h:398
void setRawPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of (horizontal) prescan pixels in the image to which it is attached,...
Definition Amplifier.h:411
void setRawSerialPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal/serial prescan pixels in the image to which it is attached,...
Definition Amplifier.h:426
void setName(std::string const &name)
Name of the amplifier.
Definition Amplifier.h:348
void setLinearityUnits(std::string const &units)
Units for the input to the linearity relation (DN).
Definition Amplifier.h:383
void setRawBBox(lsst::geom::Box2I const &bbox)
Bounding box of the untrimmed amplifier in the image to which it is attached, which is assumed to be ...
Definition Amplifier.h:386
Geometry and electronic information about raw amplifier images.
Definition Amplifier.h:86
A helper class for subdividing pybind11 module across multiple translation units (i....
Definition python.h:242
void addInheritanceDependency(std::string const &name)
Indicate an external module that provides a base class for a subsequent addType call.
Definition python.h:343
PyType wrapType(PyType cls, ClassWrapperCallback function, bool setModuleName=true)
Add a type (class or enum) wrapper, deferring method and other attribute definitions until finish() i...
Definition python.h:391
pybind11::module module
The module object passed to the PYBIND11_MODULE block that contains this WrapperCollection.
Definition python.h:448
T copy(T... args)
T end(T... args)
py::classh< Amplifier > PyAmplifier
Definition _amplifier.cc:40
py::classh< Amplifier::Builder, Amplifier > PyAmplifierBuilder
Definition _amplifier.cc:41
void wrapAmplifier(lsst::cpputils::python::WrapperCollection &wrappers)
Definition _amplifier.cc:43
T size(T... args)