LSST Applications g180d380827+46ec7ae9a6,g2079a07aa2+86d27d4dc4,g2305ad1205+561f0b4c6e,g2bbee38e9b+c6a8a0fb72,g337abbeb29+c6a8a0fb72,g33d1c0ed96+c6a8a0fb72,g3a166c0a6a+c6a8a0fb72,g3d1719c13e+4b175340dc,g3ddfee87b4+e72d28e2d1,g487adcacf7+2f6f39ce3c,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+a10213cc50,g62aa8f1a4b+bf10eb883e,g858d7b2824+4b175340dc,g991b906543+4b175340dc,g99cad8db69+af57a9dece,g9c22b2923f+e2510deafe,g9ddcbc5298+9a081db1e4,g9fbc5161f1+30b2b595e6,ga1e77700b3+03d07e1c1f,gb0e22166c9+60f28cb32d,gb23b769143+4b175340dc,gba4ed39666+c2a2e4ac27,gbb8dafda3b+6155d6700f,gbd998247f1+585e252eca,gbeadb96d05+67a36bdf6a,gc120e1dc64+7a34493dbd,gc28159a63d+c6a8a0fb72,gc3e9b769f7+95821ff628,gcf0d15dbbd+e72d28e2d1,gdaeeff99f8+f9a426f77a,ge6526c86ff+3d1b9a9f4a,ge79ae78c31+c6a8a0fb72,gee10cc3b42+585e252eca,w.2024.18
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"
25#include <lsst/utils/python.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::class_<Amplifier, std::shared_ptr<Amplifier>>;
41using PyAmplifierBuilder = py::class_<Amplifier::Builder, Amplifier, std::shared_ptr<Amplifier::Builder>>;
42
43void wrapAmplifier(lsst::utils::python::WrapperCollection &wrappers) {
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
T copy(T... args)
T end(T... args)
py::class_< Amplifier, std::shared_ptr< Amplifier > > PyAmplifier
Definition _amplifier.cc:40
py::class_< Amplifier::Builder, Amplifier, std::shared_ptr< Amplifier::Builder > > PyAmplifierBuilder
Definition _amplifier.cc:41
void wrapAmplifier(lsst::utils::python::WrapperCollection &wrappers)
Definition _amplifier.cc:43
T size(T... args)