LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
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 
169 
178 
184  bool getRawFlipX() const { return getFields().rawFlipX; }
185 
191  bool getRawFlipY() const { return getFields().rawFlipY; }
192 
199 
208 
217 
226 
237 
248 
258 
261 
262 protected:
263 
264  struct Fields {
267  double gain = 0.0;
268  double readNoise = 0.0;
269  double saturation = 0.0;
270  double suspectLevel = 0.0;
272  ndarray::Array<double const, 1, 1> linearityCoeffs;
279  bool rawFlipX = false;
280  bool rawFlipY = false;
285  };
286 
287  // Amplifier construction and assignment is protected to avoid type-slicing
288  // but permit derived classes to implement safe versions of these.
289 
290  Amplifier() = default;
291 
292  Amplifier(Amplifier const &) = default;
293  Amplifier(Amplifier &&) = default;
294  Amplifier & operator=(Amplifier const &) = default;
295  Amplifier & operator=(Amplifier &&) = default;
296 
297  virtual Fields const & getFields() const = 0;
298 
299 };
300 
306 public:
307 
314  static Builder fromRecord(table::BaseRecord const & record);
315 
317  Builder() = default;
318 
320  Builder(Builder const &) = default;
321 
323  Builder(Builder &&) = default;
324 
326  Builder(Amplifier const & other);
327 
329  Builder & operator=(Builder const &) = default;
330 
332  Builder & operator=(Builder &&) = default;
333 
335  Builder & operator=(Amplifier const & other);
336 
337  ~Builder() noexcept override = default;
338 
345  std::shared_ptr<Amplifier const> finish() const;
346 
348  void setName(std::string const &name) { _fields.name = name; }
349 
351  void setBBox(lsst::geom::Box2I const &bbox) { _fields.bbox = bbox; }
352 
354  void setGain(double gain) { _fields.gain = gain; }
355 
357  void setReadNoise(double readNoise) { _fields.readNoise = readNoise; }
358 
360  void setSaturation(double saturation) { _fields.saturation = saturation; }
361 
364 
367 
369  void setLinearityCoeffs(ndarray::Array<double const, 1, 1> const & coeffs) {
370  _fields.linearityCoeffs = coeffs;
371  }
372 
374  void setLinearityType(std::string const & type) { _fields.linearityType = type; }
375 
377  void setLinearityThreshold(double threshold) { _fields.linearityThreshold = threshold; }
378 
380  void setLinearityMaximum(double maximum) { _fields.linearityMaximum = maximum; }
381 
383  void setLinearityUnits(std::string const & units) { _fields.linearityUnits = units; }
384 
386  void setRawBBox(lsst::geom::Box2I const &bbox) { _fields.rawBBox = bbox; }
387 
390 
392  void setRawFlipX(bool rawFlipX) { _fields.rawFlipX = rawFlipX; }
393 
395  void setRawFlipY(bool rawFlipY) { _fields.rawFlipY = rawFlipY; }
396 
398  void setRawXYOffset(lsst::geom::Extent2I const &xy) { _fields.rawXYOffset = xy; }
399 
403  }
404 
407  _fields.rawVerticalOverscanBBox = bbox;
408  }
409 
412  _fields.rawPrescanBBox = bbox;
413  }
414 
418  }
419 
422  _fields.rawVerticalOverscanBBox = bbox;
423  }
424 
427  _fields.rawPrescanBBox = bbox;
428  }
429 
432  _fields.rawPrescanBBox = bbox;
433  }
434 
435 protected:
436  Fields const & getFields() const override { return _fields; }
437 private:
438  Fields _fields;
439 };
440 
441 
442 
443 } // namespace cameraGeom
444 } // namespace afw
445 } // namespace lsst
446 
447 #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
A mutable Amplifier subclass class that can be used to incrementally construct or modify Amplifiers.
Definition: Amplifier.h:305
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:360
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 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
Builder()=default
Construct a Builder with default values for all fields.
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
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 image to...
Definition: Amplifier.h:416
~Builder() noexcept override=default
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
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)
Is this amplifier (and the image to which it is attached) flipped in the X direction,...
Definition: Amplifier.h:392
Fields const & getFields() const override
Definition: Amplifier.h:436
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
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
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 image to which it is attached,...
Definition: Amplifier.h:216
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 image to which it is attached,...
Definition: Amplifier.h:257
Amplifier & operator=(Amplifier const &)=default
lsst::geom::Box2I getRawDataBBox() const
Bounding box of amplifier data pixels in the image to which it is attached, which is assumed to be un...
Definition: Amplifier.h:177
lsst::geom::Box2I getRawHorizontalOverscanBBox() const
The bounding box of horizontal overscan pixels in the image to which it is attached,...
Definition: Amplifier.h:207
bool getRawFlipX() const
Is this amplifier (and the image to which it is attached) flipped in the X direction,...
Definition: Amplifier.h:184
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 image to...
Definition: Amplifier.h:236
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 the untrimmed amplifier in the image to which it is attached, which is assumed to be ...
Definition: Amplifier.h:168
Amplifier(Amplifier const &)=default
lsst::geom::Box2I getRawHorizontalPrescanBBox() const
The bounding box of horizontal/serial prescan pixels in the image to which it is attached,...
Definition: Amplifier.h:260
lsst::geom::Box2I getRawParallelOverscanBBox() const
The bounding box of parallel overscan pixels (equivalent to vertical overscan pixels) in the image to...
Definition: Amplifier.h:247
lsst::geom::Extent2I getRawXYOffset() const
Offset in transformation from this amplifier (and the image to which it is attached) to trimmed,...
Definition: Amplifier.h:198
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
Is this amplifier (and the image to which it is attached) flipped in the Y direction,...
Definition: Amplifier.h:191
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 image to which it is attached,...
Definition: Amplifier.h:225
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:51
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:282
ndarray::Array< double const, 1, 1 > linearityCoeffs
Definition: Amplifier.h:272