LSSTApplications  17.0+124,17.0+14,17.0+73,18.0.0+37,18.0.0+80,18.0.0-4-g68ffd23+4,18.1.0-1-g0001055+12,18.1.0-1-g03d53ef+5,18.1.0-1-g1349e88+55,18.1.0-1-g2505f39+44,18.1.0-1-g5315e5e+4,18.1.0-1-g5e4b7ea+14,18.1.0-1-g7e8fceb+4,18.1.0-1-g85f8cd4+48,18.1.0-1-g8ff0b9f+4,18.1.0-1-ga2c679d+1,18.1.0-1-gd55f500+35,18.1.0-10-gb58edde+2,18.1.0-11-g0997b02+4,18.1.0-13-gfe4edf0b+12,18.1.0-14-g259bd21+21,18.1.0-19-gdb69f3f+2,18.1.0-2-g5f9922c+24,18.1.0-2-gd3b74e5+11,18.1.0-2-gfbf3545+32,18.1.0-26-g728bddb4+5,18.1.0-27-g6ff7ca9+2,18.1.0-3-g52aa583+25,18.1.0-3-g8ea57af+9,18.1.0-3-gb69f684+42,18.1.0-3-gfcaddf3+6,18.1.0-32-gd8786685a,18.1.0-4-gf3f9b77+6,18.1.0-5-g1dd662b+2,18.1.0-5-g6dbcb01+41,18.1.0-6-gae77429+3,18.1.0-7-g9d75d83+9,18.1.0-7-gae09a6d+30,18.1.0-9-gc381ef5+4,w.2019.45
LSSTDataManagementBasePackage
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 
92  static table::Schema getRecordSchema();
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 
139  ReadoutCorner getReadoutCorner() const { return getFields().readoutCorner; }
140 
142  ndarray::Array<double const, 1, 1> getLinearityCoeffs() const { return getFields().linearityCoeffs; }
143 
145  std::string getLinearityType() const { return getFields().linearityType; }
146 
150  double getLinearityThreshold() const { return getFields().linearityThreshold; }
151 
156  double getLinearityMaximum() const { return getFields().linearityMaximum; }
157 
159  std::string getLinearityUnits() const { return getFields().linearityUnits; }
160 
162  [[deprecated("Amplifier objects always have raw information; will be removed after 19.0.")]] // DM-21711
163  bool getHasRawInfo() const { return true; }
164 
169  lsst::geom::Box2I getRawBBox() const { return getFields().rawBBox; }
170 
175  lsst::geom::Box2I getRawDataBBox() const { return getFields().rawDataBBox; }
176 
181  bool getRawFlipX() const { return getFields().rawFlipX; }
182 
187  bool getRawFlipY() const { return getFields().rawFlipY; }
188 
193  lsst::geom::Extent2I getRawXYOffset() const { return getFields().rawXYOffset; }
194 
199  lsst::geom::Box2I getRawHorizontalOverscanBBox() const { return getFields().rawHorizontalOverscanBBox; }
200 
205  lsst::geom::Box2I getRawVerticalOverscanBBox() const { return getFields().rawVerticalOverscanBBox; }
206 
211  lsst::geom::Box2I getRawPrescanBBox() const { return getFields().rawPrescanBBox; }
212 
213 protected:
214 
215  struct Fields {
218  double gain = 0.0;
219  double readNoise = 0.0;
220  double saturation = 0.0;
221  double suspectLevel = 0.0;
223  ndarray::Array<double const, 1, 1> linearityCoeffs;
230  bool rawFlipX = false;
231  bool rawFlipY = false;
236  };
237 
238  // Amplifier construction and assignment is protected to avoid type-slicing
239  // but permit derived classes to implement safe versions of these.
240 
241  Amplifier() = default;
242 
243  Amplifier(Amplifier const &) = default;
244  Amplifier(Amplifier &&) = default;
245  Amplifier & operator=(Amplifier const &) = default;
246  Amplifier & operator=(Amplifier &&) = default;
247 
248  virtual Fields const & getFields() const = 0;
249 
250 };
251 
256 class Amplifier::Builder final : public Amplifier {
257 public:
258 
265  static Builder fromRecord(table::BaseRecord const & record);
266 
268  Builder() = default;
269 
271  Builder(Builder const &) = default;
272 
274  Builder(Builder &&) = default;
275 
277  Builder(Amplifier const & other);
278 
280  Builder & operator=(Builder const &) = default;
281 
283  Builder & operator=(Builder &&) = default;
284 
286  Builder & operator=(Amplifier const & other);
287 
288  ~Builder() noexcept override = default;
289 
296  std::shared_ptr<Amplifier const> finish() const;
297 
299  void setName(std::string const &name) { _fields.name = name; }
300 
302  void setBBox(lsst::geom::Box2I const &bbox) { _fields.bbox = bbox; }
303 
305  void setGain(double gain) { _fields.gain = gain; }
306 
308  void setReadNoise(double readNoise) { _fields.readNoise = readNoise; }
309 
311  void setSaturation(double saturation) { _fields.saturation = saturation; }
312 
314  void setSuspectLevel(double suspectLevel) { _fields.suspectLevel = suspectLevel; }
315 
317  void setReadoutCorner(ReadoutCorner readoutCorner) { _fields.readoutCorner = readoutCorner; }
318 
320  void setLinearityCoeffs(ndarray::Array<double const, 1, 1> const & coeffs) {
321  _fields.linearityCoeffs = coeffs;
322  }
323 
325  void setLinearityType(std::string const & type) { _fields.linearityType = type; }
326 
328  void setLinearityThreshold(double threshold) { _fields.linearityThreshold = threshold; }
329 
331  void setLinearityMaximum(double maximum) { _fields.linearityMaximum = maximum; }
332 
334  void setLinearityUnits(std::string const & units) { _fields.linearityUnits = units; }
335 
337  void setRawBBox(lsst::geom::Box2I const &bbox) { _fields.rawBBox = bbox; }
338 
340  void setRawDataBBox(lsst::geom::Box2I const &bbox) { _fields.rawDataBBox = bbox; }
341 
343  void setRawFlipX(bool rawFlipX) { _fields.rawFlipX = rawFlipX; }
344 
346  void setRawFlipY(bool rawFlipY) { _fields.rawFlipY = rawFlipY; }
347 
349  void setRawXYOffset(lsst::geom::Extent2I const &xy) { _fields.rawXYOffset = xy; }
350 
353  _fields.rawHorizontalOverscanBBox = bbox;
354  }
355 
358  _fields.rawVerticalOverscanBBox = bbox;
359  }
360 
363  _fields.rawPrescanBBox = bbox;
364  }
365 
366 protected:
367  Fields const & getFields() const override { return _fields; }
368 private:
369  Fields _fields;
370 };
371 
372 
373 
374 } // namespace cameraGeom
375 } // namespace afw
376 } // namespace lsst
377 
378 #endif // !LSST_AFW_CAMERAGEOM_AMPLIFIER_H_INCLUDED
AmpInfoBoxKey bbox
Definition: Amplifier.cc:117
Defines the fields and offsets for a table.
Definition: Schema.h:50
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:349
void setRawFlipY(bool rawFlipY)
Flip column order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR image?
Definition: Amplifier.h:346
lsst::geom::Box2I getRawPrescanBBox() const
The bounding box of (horizontal) prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:211
bool getHasRawInfo() const
Does this table have raw amplifier information?
Definition: Amplifier.h:163
AssemblyState
Assembly state of the amplifier, used to identify bounding boxes and component existence.
Definition: Amplifier.h:48
ndarray::Array< double const, 1, 1 > linearityCoeffs
Definition: Amplifier.h:223
void setRawHorizontalOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of horizontal overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:352
ndarray::Array< double const, 1, 1 > getLinearityCoeffs() const
Vector of linearity coefficients.
Definition: Amplifier.h:142
lsst::geom::Box2I getRawVerticalOverscanBBox() const
The bounding box of vertical overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:205
void setBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier pixels in the trimmed, assembled image.
Definition: Amplifier.h:302
void setLinearityThreshold(double threshold)
Level in ADU above which linearity should be applied.
Definition: Amplifier.h:328
void setRawPrescanBBox(lsst::geom::Box2I const &bbox)
The bounding box of (horizontal) prescan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:362
ItemVariant const * other
Definition: Schema.cc:56
table::Key< double > suspectLevel
Definition: Amplifier.cc:120
void setLinearityCoeffs(ndarray::Array< double const, 1, 1 > const &coeffs)
Vector of linearity coefficients.
Definition: Amplifier.h:320
double getGain() const
Amplifier gain in e-/ADU.
Definition: Amplifier.h:118
double getSuspectLevel() const
Level in ADU above which pixels are considered suspicious, meaning they may be affected by unknown sy...
Definition: Amplifier.h:136
lsst::geom::Box2I getRawBBox() const
Bounding box of all amplifier pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:169
void setSuspectLevel(double suspectLevel)
Level in ADU above which pixels are considered suspicious, meaning they may be affected by unknown sy...
Definition: Amplifier.h:314
void setGain(double gain)
Amplifier gain in e-/ADU.
Definition: Amplifier.h:305
void setRawFlipX(bool rawFlipX)
Flip row order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR i...
Definition: Amplifier.h:343
A mutable Amplifier subclass class that can be used to incrementally construct or modify Amplifiers...
Definition: Amplifier.h:256
STL class.
void setSaturation(double saturation)
Level in ADU above which pixels are considered saturated; use nan if no such level applies...
Definition: Amplifier.h:311
table::Key< double > saturation
Definition: Amplifier.cc:119
std::string getName() const
Name of the amplifier.
Definition: Amplifier.h:112
A base class for image defects.
table::Key< double > gain
Definition: Amplifier.cc:118
table::Key< double > readNoise
Definition: Amplifier.cc:121
table::Key< int > type
Definition: Detector.cc:163
void setLinearityType(std::string const &type)
Name of linearity parameterization.
Definition: Amplifier.h:325
void setName(std::string const &name)
Name of the amplifier.
Definition: Amplifier.h:299
void setLinearityMaximum(double maximum)
Level in ADU above which the linearity relation is poorly defined.
Definition: Amplifier.h:331
bool getRawFlipY() const
Flip column order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR image?
Definition: Amplifier.h:187
lsst::geom::Box2I getRawDataBBox() const
Bounding box of amplifier image pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:175
void setLinearityUnits(std::string const &units)
Units for the input to the linearity relation (DN).
Definition: Amplifier.h:334
void setRawDataBBox(lsst::geom::Box2I const &bbox)
Bounding box of amplifier image pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:340
Base class for all records.
Definition: BaseRecord.h:31
lsst::geom::Box2I getRawHorizontalOverscanBBox() const
The bounding box of horizontal overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:199
double getLinearityMaximum() const
Level in ADU above which the linearity relation is poorly defined.
Definition: Amplifier.h:156
void setRawVerticalOverscanBBox(lsst::geom::Box2I const &bbox)
The bounding box of vertical overscan pixels in the assembled, untrimmed raw image.
Definition: Amplifier.h:357
void setReadoutCorner(ReadoutCorner readoutCorner)
Readout corner in the trimmed, assembled image.
Definition: Amplifier.h:317
double getReadNoise() const
Amplifier read noise, in e-.
Definition: Amplifier.h:121
ReadoutCorner getReadoutCorner() const
Readout corner in the trimmed, assembled image.
Definition: Amplifier.h:139
lsst::geom::Extent2I getRawXYOffset() const
Offset in transformation from pre-raw, unassembled image to trimmed, assembled post-ISR image: final ...
Definition: Amplifier.h:193
void setRawBBox(lsst::geom::Box2I const &bbox)
Bounding box of all amplifier pixels on untrimmed, assembled raw image.
Definition: Amplifier.h:337
Geometry and electronic information about raw amplifier images.
Definition: Amplifier.h:86
bool getRawFlipX() const
Flip row order in transformation from untrimmed, assembled raw image to trimmed, assembled post-ISR i...
Definition: Amplifier.h:181
void setReadNoise(double readNoise)
Amplifier read noise, in e-.
Definition: Amplifier.h:308
lsst::geom::Box2I rawHorizontalOverscanBBox
Definition: Amplifier.h:233
table::Key< table::Flag > rawFlipX
Definition: Amplifier.cc:128
std::string getLinearityType() const
Name of linearity parameterization.
Definition: Amplifier.h:145
An integer coordinate rectangle.
Definition: Box.h:55
lsst::geom::Box2I getBBox() const
Bounding box of amplifier pixels in the trimmed, assembled image.
Definition: Amplifier.h:115
table::Key< int > readoutCorner
Definition: Amplifier.cc:122
double getLinearityThreshold() const
Level in ADU above which linearity should be applied.
Definition: Amplifier.h:150
table::Key< table::Flag > rawFlipY
Definition: Amplifier.cc:129
Fields const & getFields() const override
Definition: Amplifier.h:367
ReadoutCorner
Readout corner, in the frame of reference of the assembled image.
Definition: Amplifier.h:38
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