Class PhotoCalib¶
Defined in File PhotoCalib.h
Inheritance Relationships¶
Base Types¶
public lsst::afw::table::io::PersistableFacade< PhotoCalib >(Template Class PersistableFacade)public Storable
Class Documentation¶
-
class
PhotoCalib: public lsst::afw::table::io::PersistableFacade<PhotoCalib>, public Storable¶ The photometric calibration of an exposure.
A PhotoCalib is a BoundedField (a function with a specified domain) that converts from post-ISR counts-on-chip (ADU) to flux and magnitude. It is defined such that a calibration of 1 means one count is equal to one nanojansky (nJy, 10^-35 W/m^2/Hz in SI units). The nJy was chosen because it represents a linear flux unit with values in a convenient range (e.g. LSST’s single image depth of 24.5 is 575 nJy). See more detailed discussion in: https://pstn-001.lsst.io/
PhotoCalib is immutable.
The spatially varying flux calibration has units of nJy/ADU, and is defined such that, at a position (x,y) in the domain of the boundedField calibration and for a given measured source instFlux:
\[ instFlux*calibration(x,y) = flux [nJy] \]while the errors (constant on the domain) are defined as:\[ sqrt((instFluxErr/instFlux)^2 + (calibrationErr/calibration)^2)*flux = fluxErr [nJy] \]This implies that the conversions from instFlux and instFlux error to magnitude and magnitude error are as follows:\[ -2.5*log_{10}(instFlux*calibration(x,y)*1e-9/referenceFlux) = magnitude \]where referenceFlux is the AB Magnitude reference flux from Oke & Gunn 1983 (first equation),
\[ referenceFlux = 1e23 * 10^{(48.6/-2.5)} \]and\[ 2.5/log(10)*sqrt((instFluxErr/instFlux)^2 + (calibrationErr/calibration)^2) = magnitudeErr \]Note that this is independent of referenceFlux.Public Functions
-
PhotoCalib(PhotoCalib const&)¶
-
PhotoCalib(PhotoCalib&&)¶
-
PhotoCalib &
operator=(PhotoCalib const&)¶
-
PhotoCalib &
operator=(PhotoCalib&&)¶
-
~PhotoCalib()¶
-
PhotoCalib()¶ Create a empty, zeroed calibration.
-
PhotoCalib(double calibrationMean, double calibrationErr = 0, lsst::geom::Box2I const &bbox = lsst::geom::Box2I())¶ Create a non-spatially-varying calibration.
- Parameters
[in] calibrationMean: The spatially-constant calibration (must be non-negative).[in] calibrationErr: The error on the calibration (must be non-negative).[in] bbox: The bounding box on which this PhotoCalib is valid. If not specified, this PhotoCalib is valid at any point (i.e. an empty bbox).
Create a spatially-varying calibration.
- Parameters
[in] calibration: The spatially varying photometric calibration (must have non-negative mean).[in] calibrationErr: The error on the calibration (must be non-negative).
Create a calibration with a pre-computed mean. Primarily for de-persistence.
- Parameters
[in] calibrationMean: The mean of the calibration() over its bounding box (must be non-negative).[in] calibrationErr: The error on the calibration (must be non-negative).[in] calibration: The spatially varying photometric calibration.[in] isConstant: Is this PhotoCalib spatially constant?
-
double
instFluxToNanojansky(double instFlux, lsst::geom::Point<double, 2> const &point) const¶ Convert instFlux in ADU to nJy at a point in the BoundedField.
If passed point, use the exact calculation at that point, otherwise, use the mean scaling factor.
- Return
The flux in nJy.
- Parameters
[in] instFlux: The source instFlux in ADU.[in] point: The point that instFlux is measured at.
-
double
instFluxToNanojansky(double instFlux) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
Measurement
instFluxToNanojansky(double instFlux, double instFluxErr, lsst::geom::Point<double, 2> const &point) const¶ Convert instFlux and error in instFlux (ADU) to nJy and nJy error.
If passed point, use the exact calculation at that point, otherwise, use the mean scaling factor.
- Return
The flux in nJy and error.
- Parameters
[in] instFlux: The source fluxinstFlux in ADU.[in] instFluxErr: The instFlux error.[in] point: The point that instFlux is measured at.
-
Measurement
instFluxToNanojansky(double instFlux, double instFluxErr) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
Measurement
instFluxToNanojansky(const afw::table::SourceRecord &sourceRecord, std::string const &instFluxField) const¶ Convert
sourceRecord[instFluxField_instFlux](ADU) at location(sourceRecord.get("x"), sourceRecord.get("y"))(pixels) to flux and flux error (in nJy).- Return
The flux in nJy and error for this source.
- Parameters
[in] sourceRecord: The source record to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”
-
ndarray::Array<double, 2, 2>
instFluxToNanojansky(afw::table::SourceCatalog const &sourceCatalog, std::string const &instFluxField) const¶ Convert
sourceCatalog[instFluxField_instFlux](ADU) at locations(sourceCatalog.get("x"), sourceCatalog.get("y"))(pixels) to nJy.- Return
The flux in nJy and error for this source.
- Parameters
[in] sourceCatalog: The source catalog to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”
-
void
instFluxToNanojansky(afw::table::SourceCatalog &sourceCatalog, std::string const &instFluxField, std::string const &outField) const¶ Convert
sourceCatalog[instFluxField_instFlux](ADU) at locations(sourceCatalog.get("x"), sourceCatalog.get("y"))(pixels) to nJy and write the results back tosourceCatalog[outField_mag].- Parameters
[in] sourceCatalog: The source catalog to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”[in] outField: The field to write the nJy and magnitude errors to. Keys of the form “*_instFlux” and “*_instFluxErr” must exist in the schema.
-
double
instFluxToMagnitude(double instFlux, lsst::geom::Point<double, 2> const &point) const¶ Convert instFlux in ADU to AB magnitude.
If passed point, use the exact calculation at that point, otherwise, use the mean scaling factor.
- Return
The AB magnitude.
- Parameters
[in] instFlux: The source instFlux in ADU.[in] point: The point that instFlux is measured at.
-
double
instFluxToMagnitude(double instFlux) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
Measurement
instFluxToMagnitude(double instFlux, double instFluxErr, lsst::geom::Point<double, 2> const &point) const¶ Convert instFlux and error in instFlux (ADU) to AB magnitude and magnitude error.
If passed point, use the exact calculation at that point, otherwise, use the mean scaling factor.
- Return
The AB magnitude and error.
- Parameters
[in] instFlux: The source instFlux in ADU.[in] instFluxErr: The instFlux error (standard deviation).[in] point: The point that instFlux is measured at.
-
Measurement
instFluxToMagnitude(double instFlux, double instFluxErr) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
Measurement
instFluxToMagnitude(afw::table::SourceRecord const &sourceRecord, std::string const &instFluxField) const¶ Convert
sourceRecord[instFluxField_instFlux](ADU) at location(sourceRecord.get("x"), sourceRecord.get("y"))(pixels) to AB magnitude.- Return
The magnitude and magnitude error for this source.
- Parameters
[in] sourceRecord: The source record to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”
-
ndarray::Array<double, 2, 2>
instFluxToMagnitude(afw::table::SourceCatalog const &sourceCatalog, std::string const &instFluxField) const¶ Convert
sourceCatalog[instFluxField_instFlux](ADU) at locations(sourceCatalog.get("x"), sourceCatalog.get("y"))(pixels) to AB magnitudes.- Return
The magnitudes and magnitude errors for the sources.
- Parameters
[in] sourceCatalog: The source catalog to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”
-
void
instFluxToMagnitude(afw::table::SourceCatalog &sourceCatalog, std::string const &instFluxField, std::string const &outField) const¶ Convert instFluxes in a catalog to AB magnitudes and write back into the catalog.
Convert
sourceCatalog[instFluxField_instFlux](ADU) at locations(sourceCatalog.get("x"), sourceCatalog.get("y"))(pixels) to AB magnitudes and write the results back tosourceCatalog[outField_mag].- Parameters
[in] sourceCatalog: The source catalog to get instFlux and position from.[in] instFluxField: The instFlux field: Keys of the form “*_instFlux” and “*_instFluxErr” must exist. For example: instFluxField=”slot_PsfFlux” will use the fields named: “slot_PsfFlux_instFlux”, “slot_PsfFlux_instFluxErr”[in] outField: The field to write the magnitudes and magnitude errors to. Keys of the form “*_instFlux”, “*_instFluxErr”, *_mag”, and “*_magErr” must exist in the schema.
-
MaskedImage<float>
calibrateImage(MaskedImage<float> const &maskedImage, bool includeScaleUncertainty = true) const¶ Return a flux calibrated image, with pixel values in nJy.
Mask pixels are propagated directly from the input image.
- Return
The calibrated masked image.
- Parameters
maskedImage: The masked image to calibrate.includeScaleUncertainty: Include the uncertainty on the calibration in the resulting variance?
-
afw::table::SourceCatalog
calibrateCatalog(afw::table::SourceCatalog const &catalog, std::vector<std::string> const &instFluxFields) const¶ Return a flux calibrated catalog, with new
_flux,_fluxErr,_mag, and_magErrfields.If the input catalog already has
_flux,_mag,_fluxErr, and/or_magErrfields matchinginstFluxFields, they will be replaced with the new fields.- Return
A deep copy of the input catalog, with new calibrated flux and magnitude fields. Elements of
instFluxFieldsthat have_instFluxErrwill be used to compute the_fluxErrand_magErrfields.- Parameters
catalog: The source catalog to compute calibrated fluxes for.instFluxFields: The fields to calibrate (optional). If not provided, every field ending with_instFluxwill be calibrated.
- Exceptions
lsst::pex::exceptions::NotFoundError: if any item ininstFluxFieldsdoes not have a corresponding*_instFluxfield in catalog.schema.
-
afw::table::SourceCatalog
calibrateCatalog(afw::table::SourceCatalog const &catalog) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
double
magnitudeToInstFlux(double magnitude, lsst::geom::Point<double, 2> const &point) const¶ Convert AB magnitude to instFlux (ADU).
If passed point, use the exact calculation at that point, otherwise, use the mean scaling factor.
Useful for inserting fake sources into an image.
- Return
Source instFlux in ADU.
- Parameters
[in] magnitude: The AB magnitude to convert.[in] point: The position that magnitude is to be converted at.
-
double
magnitudeToInstFlux(double magnitude) const¶ This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
-
double
getCalibrationMean() const¶ Get the mean photometric calibration.
This value is defined, for instFlux at (x,y), such that:
\[ instFlux*computeScaledCalibration()(x,y)*getCalibrationMean() = instFluxToNanojansky(instFlux, (x,y)) \]- See
PhotoCalib::computeScaledCalibration(), getCalibrationErr(), getInstFluxAtZeroMagnitude()
- Return
The spatial mean of this calibration.
-
double
getCalibrationErr() const¶ Get the mean photometric calibration error.
This value is defined such that for some instFluxErr, instFlux, and flux:
\[ sqrt((instFluxErr/instFlux)^2 + (calibrationErr/calibration(x,y))^2)*flux = fluxErr [nJy] \]- See
PhotoCalib::computeScaledCalibration(), getCalibrationMean()
- Return
The calibration error.
-
double
getInstFluxAtZeroMagnitude() const¶ Get the magnitude zero point (the instrumental flux corresponding to 0 magnitude).
This value is defined such that:
\[ instFluxToMagnitude(getInstFluxAtZeroMagnitude()) == 0 \]- See
PhotoCalib::computeScaledCalibration(), getCalibrationMean()
- Return
The instFlux magnitude zero point.
-
double
getLocalCalibration(lsst::geom::Point<double, 2> const &point) const¶ Get the local calibration at a point.
This value is defined such that:
\[ instFluxToNanojansky(instFlux, point) == localCalibration * inst \]Use getCalibrationErr() to get the spatially constant error on the calibration.
- See
- Return
The local calibration at a point.
- Parameters
[in] point: The position that magnitude is to be converted at.
-
std::shared_ptr<afw::math::BoundedField>
computeScaledCalibration() const¶ Calculates the spatially-variable calibration, normalized by the mean in the valid domain.
This value is defined, for instFlux at (x,y), such that:
\[ instFlux*computeScaledCalibration()(x,y)*getCalibrationMean() = instFluxToNanojansky(instFlux, (x,y)) \]- See
- Return
The normalized spatially-variable calibration.
Calculates the scaling between this PhotoCalib and another PhotoCalib.
The BoundedFields of these PhotoCalibs must have the same BBoxes (or one or both must be empty).
With:
c = instFlux at position (x,y)
this = this PhotoCalib
other = other PhotoCalib
return = BoundedField returned by this method the return value from this method is defined as:
\[ this.instFluxToNanojansky(c, (x,y))*return(x, y) = other.instFluxToNanojansky(c, (x,y)) \]
- Return
The BoundedField as defined above.
- Warning
Not implemented yet: See DM-10154.
- Parameters
[in] other: The PhotoCalib to scale to.
-
bool
operator==(PhotoCalib const &rhs) const¶ Two PhotoCalibs are equal if their component bounded fields and calibrationErr are equal.
-
bool
operator!=(PhotoCalib const &rhs) const¶ Two PhotoCalibs are equal if their component bounded fields and calibrationErr are equal.
-
bool
isPersistable() const¶
-
std::shared_ptr<typehandling::Storable>
cloneStorable() const¶ Create a new PhotoCalib that is a copy of this one.
-
std::string
toString() const¶ Create a string representation of this object.
-
bool
equals(typehandling::Storable const &other) const¶ Compare this object to another Storable.
- Return
*this == otherifotheris a PhotoCalib; otherwisefalse.
-