LSST Applications  21.0.0+04719a4bac,21.0.0-1-ga51b5d4+f5e6047307,21.0.0-11-g2b59f77+a9c1acf22d,21.0.0-11-ga42c5b2+86977b0b17,21.0.0-12-gf4ce030+76814010d2,21.0.0-13-g1721dae+760e7a6536,21.0.0-13-g3a573fe+768d78a30a,21.0.0-15-g5a7caf0+f21cbc5713,21.0.0-16-g0fb55c1+b60e2d390c,21.0.0-19-g4cded4ca+71a93a33c0,21.0.0-2-g103fe59+bb20972958,21.0.0-2-g45278ab+04719a4bac,21.0.0-2-g5242d73+3ad5d60fb1,21.0.0-2-g7f82c8f+8babb168e8,21.0.0-2-g8f08a60+06509c8b61,21.0.0-2-g8faa9b5+616205b9df,21.0.0-2-ga326454+8babb168e8,21.0.0-2-gde069b7+5e4aea9c2f,21.0.0-2-gecfae73+1d3a86e577,21.0.0-2-gfc62afb+3ad5d60fb1,21.0.0-25-g1d57be3cd+e73869a214,21.0.0-3-g357aad2+ed88757d29,21.0.0-3-g4a4ce7f+3ad5d60fb1,21.0.0-3-g4be5c26+3ad5d60fb1,21.0.0-3-g65f322c+e0b24896a3,21.0.0-3-g7d9da8d+616205b9df,21.0.0-3-ge02ed75+a9c1acf22d,21.0.0-4-g591bb35+a9c1acf22d,21.0.0-4-g65b4814+b60e2d390c,21.0.0-4-gccdca77+0de219a2bc,21.0.0-4-ge8a399c+6c55c39e83,21.0.0-5-gd00fb1e+05fce91b99,21.0.0-6-gc675373+3ad5d60fb1,21.0.0-64-g1122c245+4fb2b8f86e,21.0.0-7-g04766d7+cd19d05db2,21.0.0-7-gdf92d54+04719a4bac,21.0.0-8-g5674e7b+d1bd76f71f,master-gac4afde19b+a9c1acf22d,w.2021.13
LSST Data Management Base Package
Amplifier.h
Go to the documentation of this file.
1 // -*- lsst-c++ -*-
2 /*
3  * Developed for the LSST Data Management System.
4  * This product includes software developed by the LSST Project
5  * (https://www.lsst.org).
6  * See the COPYRIGHT file at the top-level directory of this distribution
7  * for details of code ownership.
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 #ifndef LSST_AFW_CAMERAGEOM_AMPLIFIER_H_INCLUDED
23 #define LSST_AFW_CAMERAGEOM_AMPLIFIER_H_INCLUDED
24 
25 #include <string>
26 
27 #include "lsst/afw/table/fwd.h"
28 #include "lsst/geom/Box.h"
29 #include "lsst/geom/Extent.h"
30 
31 namespace lsst {
32 namespace afw {
33 namespace cameraGeom {
34 
38 enum class ReadoutCorner {
39  LL,
40  LR,
41  UR,
42  UL,
43 };
44 
48 enum class AssemblyState {
49  RAW,
50  SCIENCE,
51 };
52 
86 class Amplifier {
87 public:
88 
89  class Builder;
90 
93 
94  virtual ~Amplifier() noexcept = default;
95 
102  void toRecord(table::BaseRecord & record) const;
103 
109  Builder rebuild() const;
110 
112  std::string getName() const { return getFields().name; }
113 
115  lsst::geom::Box2I getBBox() const { return getFields().bbox; }
116 
118  double getGain() const { return getFields().gain; }
119 
121  double getReadNoise() const { return getFields().readNoise; }
122 
127  double getSaturation() const { return getFields().saturation; }
128 
136  double getSuspectLevel() const { return getFields().suspectLevel; }
137 
140 
142  ndarray::Array<double const, 1, 1> getLinearityCoeffs() const { return getFields().linearityCoeffs; }
143 
146 
151 
156  double getLinearityMaximum() const { return getFields().linearityMaximum; }
157 
160 
166 
172 
177  bool getRawFlipX() const { return getFields().rawFlipX; }
178 
183  bool getRawFlipY() const { return getFields().rawFlipY; }
184 
190 
196 
202 
208 
215 
222 
229 
232 
233 protected:
234 
235  struct Fields {
238  double gain = 0.0;
239  double readNoise = 0.0;
240  double saturation = 0.0;
241  double suspectLevel = 0.0;
243  ndarray::Array<double const, 1, 1> linearityCoeffs;
250  bool rawFlipX = false;
251  bool rawFlipY = false;
256  };
257 
258  // Amplifier construction and assignment is protected to avoid type-slicing
259  // but permit derived classes to implement safe versions of these.
260 
261  Amplifier() = default;
262 
263  Amplifier(Amplifier const &) = default;
264  Amplifier(Amplifier &&) = default;
265  Amplifier & operator=(Amplifier const &) = default;
266  Amplifier & operator=(Amplifier &&) = default;
267 
268  virtual Fields const & getFields() const = 0;
269 
270 };
271 
277 public:
278 
285  static Builder fromRecord(table::BaseRecord const & record);
286 
288  Builder() = default;
289 
291  Builder(Builder const &) = default;
292 
294  Builder(Builder &&) = default;
295 
297  Builder(Amplifier const & other);
298 
300  Builder & operator=(Builder const &) = default;
301 
303  Builder & operator=(Builder &&) = default;
304 
306  Builder & operator=(Amplifier const & other);
307 
308  ~Builder() noexcept override = default;
309 
316  std::shared_ptr<Amplifier const> finish() const;
317 
319  void setName(std::string const &name) { _fields.name = name; }
320 
322  void setBBox(lsst::geom::Box2I const &bbox) { _fields.bbox = bbox; }
323 
325  void setGain(double gain) { _fields.gain = gain; }
326 
328  void setReadNoise(double readNoise) { _fields.readNoise = readNoise; }
329 
331  void setSaturation(double saturation) { _fields.saturation = saturation; }
332 
335 
338 
340  void setLinearityCoeffs(ndarray::Array<double const, 1, 1> const & coeffs) {
341  _fields.linearityCoeffs = coeffs;
342  }
343 
345  void setLinearityType(std::string const & type) { _fields.linearityType = type; }
346 
348  void setLinearityThreshold(double threshold) { _fields.linearityThreshold = threshold; }
349 
351  void setLinearityMaximum(double maximum) { _fields.linearityMaximum = maximum; }
352 
354  void setLinearityUnits(std::string const & units) { _fields.linearityUnits = units; }
355 
357  void setRawBBox(lsst::geom::Box2I const &bbox) { _fields.rawBBox = bbox; }
358 
361 
363  void setRawFlipX(bool rawFlipX) { _fields.rawFlipX = rawFlipX; }
364 
366  void setRawFlipY(bool rawFlipY) { _fields.rawFlipY = rawFlipY; }
367 
369  void setRawXYOffset(lsst::geom::Extent2I const &xy) { _fields.rawXYOffset = xy; }
370 
374  }
375 
378  _fields.rawVerticalOverscanBBox = bbox;
379  }
380 
383  _fields.rawPrescanBBox = bbox;
384  }
385 
389  }
390 
393  _fields.rawVerticalOverscanBBox = bbox;
394  }
395 
398  _fields.rawPrescanBBox = bbox;
399  }
400 
403  _fields.rawPrescanBBox = bbox;
404  }
405 
406 protected:
407  Fields const & getFields() const override { return _fields; }
408 private:
409  Fields _fields;
410 };
411 
412 
413 
414 } // namespace cameraGeom
415 } // namespace afw
416 } // namespace lsst
417 
418 #endif // !LSST_AFW_CAMERAGEOM_AMPLIFIER_H_INCLUDED
table::Key< std::string > name
Definition: Amplifier.cc:116
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
table::Key< double > gain
Definition: Amplifier.cc:118
table::Key< double > saturation
Definition: Amplifier.cc:119
table::Key< double > readNoise
Definition: Amplifier.cc:121
table::Key< table::Flag > rawFlipX
Definition: Amplifier.cc:128
table::Key< int > readoutCorner
Definition: Amplifier.cc:122
table::Key< table::Flag > rawFlipY
Definition: Amplifier.cc:129
table::Key< double > suspectLevel
Definition: Amplifier.cc:120
table::Key< int > type
Definition: Detector.cc:163
ItemVariant const * other
Definition: Schema.cc:56
A mutable Amplifier subclass class that can be used to incrementally construct or modify Amplifiers.
Definition: Amplifier.h:276
Builder & operator=(Builder const &)=default
Standard copy assignment.
void setSaturation(double saturation)
Level in ADU above which pixels are considered saturated; use nan if no such level applies.
Definition: Amplifier.h:331
Builder & operator=(Builder &&)=default
Standard move assignment.
void setRawParallelOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of parallel overscan pixels (equivalent to vertical overscan pixels) in the assemble...
Definition: Amplifier.h:392
void setBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier pixels in the trimmed, assembled image.
Definition: Amplifier.h:322
void setRawFlipY(bool rawFlipY)
Flip column order in transformation from untrimmed, assembled raw image to trimmed,...
Definition: Amplifier.h:366
Builder()=default
Construct a Builder with default values for all fields.
void setReadNoise(double readNoise)
Amplifier read noise, in e-.
Definition: Amplifier.h:328
void setLinearityThreshold(double threshold)
Level in ADU above which linearity should be applied.
Definition: Amplifier.h:348
void setLinearityCoeffs(ndarray::Array< double const, 1, 1 > const &coeffs)
Vector of linearity coefficients.
Definition: Amplifier.h:340
Builder(Builder &&)=default
Standard move constructor.
Builder(Builder const &)=default
Standard copy constructor.
void setRawSerialOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of serial overscan pixels (equivalent to horizontal overscan pixels) in the assemble...
Definition: Amplifier.h:387
~Builder() noexcept override=default
void setRawHorizontalPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal/serial prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:402
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 assembled, untrimmed raw image.
Definition: Amplifier.h:372
std::shared_ptr< Amplifier const > finish() const
Construct an immutable Amplifier with the same values as the Builder.
Definition: Amplifier.cc:282
void setRawFlipX(bool rawFlipX)
Flip row order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR i...
Definition: Amplifier.h:363
Fields const & getFields() const override
Definition: Amplifier.h:407
void setGain(double gain)
Amplifier gain in e-/ADU.
Definition: Amplifier.h:325
void setReadoutCorner(ReadoutCorner readoutCorner)
Readout corner in the trimmed, assembled image.
Definition: Amplifier.h:337
void setRawDataBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier image pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:360
void setLinearityMaximum(double maximum)
Level in ADU above which the linearity relation is poorly defined.
Definition: Amplifier.h:351
void setSuspectLevel(double suspectLevel)
Level in ADU above which pixels are considered suspicious, meaning they may be affected by unknown sy...
Definition: Amplifier.h:334
void setLinearityType(std::string const &type)
Name of linearity parameterization.
Definition: Amplifier.h:345
void setRawVerticalOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of vertical overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:377
void setRawXYOffset(lsst::geom::Extent2I const &xy)
Offset in transformation from pre-raw, unassembled image to trimmed, assembled post-ISR image: final ...
Definition: Amplifier.h:369
void setRawPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of (horizontal) prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:382
void setRawSerialPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal/serial prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:397
void setName(std::string const &name)
Name of the amplifier.
Definition: Amplifier.h:319
void setLinearityUnits(std::string const &units)
Units for the input to the linearity relation (DN).
Definition: Amplifier.h:354
void setRawBBox(lsst::geom::Box2I const &bbox)
Bounding box of all amplifier pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:357
Geometry and electronic information about raw amplifier images.
Definition: Amplifier.h:86
Amplifier(Amplifier &&)=default
Builder rebuild() const
Return a Builder object initialized with the fields of this.
Definition: Amplifier.cc:271
lsst::geom::Box2I getRawVerticalOverscanBBox() const
The bounding box of vertical overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:201
ndarray::Array< double const, 1, 1 > getLinearityCoeffs() const
Vector of linearity coefficients.
Definition: Amplifier.h:142
lsst::geom::Box2I getRawSerialPrescanBBox() const
The bounding box of horizontal/serial prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:228
Amplifier & operator=(Amplifier const &)=default
lsst::geom::Box2I getRawDataBBox() const
Bounding box of amplifier image pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:171
lsst::geom::Box2I getRawHorizontalOverscanBBox() const
The bounding box of horizontal overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:195
bool getRawFlipX() const
Flip row order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR i...
Definition: Amplifier.h:177
ReadoutCorner getReadoutCorner() const
Readout corner in the trimmed, assembled image.
Definition: Amplifier.h:139
lsst::geom::Box2I getRawSerialOverscanBBox() const
The bounding box of serial overscan pixels (equivalent to horizontal overscan pixels) in the assemble...
Definition: Amplifier.h:214
void toRecord(table::BaseRecord &record) const
Copy the Amplifier's fields into the given record.
Definition: Amplifier.cc:322
lsst::geom::Box2I getRawBBox() const
Bounding box of all amplifier pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:165
Amplifier(Amplifier const &)=default
lsst::geom::Box2I getRawHorizontalPrescanBBox() const
The bounding box of horizontal/serial prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:231
lsst::geom::Box2I getRawParallelOverscanBBox() const
The bounding box of parallel overscan pixels (equivalent to vertical overscan pixels) in the assemble...
Definition: Amplifier.h:221
lsst::geom::Extent2I getRawXYOffset() const
Offset in transformation from pre-raw, unassembled image to trimmed, assembled post-ISR image: final ...
Definition: Amplifier.h:189
std::string getName() const
Name of the amplifier.
Definition: Amplifier.h:112
virtual Fields const & getFields() const =0
double getLinearityMaximum() const
Level in ADU above which the linearity relation is poorly defined.
Definition: Amplifier.h:156
static table::Schema getRecordSchema()
Return the schema used in the afw.table representation of amplifiers.
Definition: Amplifier.cc:267
double getSaturation() const
Level in ADU above which pixels are considered saturated; use nan if no such level applies.
Definition: Amplifier.h:127
std::string getLinearityUnits() const
Units for the input to the linearity relation (DN).
Definition: Amplifier.h:159
virtual ~Amplifier() noexcept=default
double getSuspectLevel() const
Level in ADU above which pixels are considered suspicious, meaning they may be affected by unknown sy...
Definition: Amplifier.h:136
bool getRawFlipY() const
Flip column order in transformation from untrimmed, assembled raw image to trimmed,...
Definition: Amplifier.h:183
Amplifier & operator=(Amplifier &&)=default
std::string getLinearityType() const
Name of linearity parameterization.
Definition: Amplifier.h:145
lsst::geom::Box2I getRawPrescanBBox() const
The bounding box of (horizontal) prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:207
double getReadNoise() const
Amplifier read noise, in e-.
Definition: Amplifier.h:121
double getGain() const
Amplifier gain in e-/ADU.
Definition: Amplifier.h:118
double getLinearityThreshold() const
Level in ADU above which linearity should be applied.
Definition: Amplifier.h:150
lsst::geom::Box2I getBBox() const
Bounding box of amplifier pixels in the trimmed, assembled image.
Definition: Amplifier.h:115
Base class for all records.
Definition: BaseRecord.h:31
Defines the fields and offsets for a table.
Definition: Schema.h:50
An integer coordinate rectangle.
Definition: Box.h:55
ReadoutCorner
Readout corner, in the frame of reference of the assembled image.
Definition: Amplifier.h:38
AssemblyState
Assembly state of the amplifier, used to identify bounding boxes and component existence.
Definition: Amplifier.h:48
class[[deprecated("Removed with no replacement (but see lsst::afw::image::TransmissionCurve). Will be " "removed after v22.")]] FilterProperty final
Describe the properties of a Filter (e.g.
Definition: Filter.h:53
A base class for image defects.
STL namespace.
lsst::geom::Box2I rawHorizontalOverscanBBox
Definition: Amplifier.h:253
ndarray::Array< double const, 1, 1 > linearityCoeffs
Definition: Amplifier.h:243