CrosstalkCalib¶
- class lsst.ip.isr.CrosstalkCalib(detector=None, nAmp=0, **kwargs)¶
Bases:
IsrCalib
Calibration of amp-to-amp crosstalk coefficients.
- Parameters:
- detector
lsst.afw.cameraGeom.Detector
, optional Detector to use to pull coefficients from.
- nAmp
int
, optional Number of amplifiers to initialize.
- log
logging.Logger
, optional Log to write messages to.
- **kwargs
Parameters to pass to parent constructor.
- detector
Notes
The crosstalk attributes stored are:
- hasCrosstalk
bool
Whether there is crosstalk defined for this detector.
- nAmp
int
Number of amplifiers in this detector.
- crosstalkShape
tuple
[int
,int
] A tuple containing the shape of the
coeffs
matrix. This should be equivalent to (nAmp
,nAmp
).- coeffs
numpy.ndarray
A matrix containing the crosstalk coefficients. coeff[i][j] contains the coefficients to calculate the contribution amplifier_j has on amplifier_i (each row[i] contains the corrections for detector_i).
- coeffErr
numpy.ndarray
, optional A matrix (as defined by
coeffs
) containing the standard distribution of the crosstalk measurements.- coeffNum
numpy.ndarray
, optional A matrix containing the number of pixel pairs used to measure the
coeffs
andcoeffErr
.- coeffValid
numpy.ndarray
, optional A matrix of Boolean values indicating if the coefficient is valid, defined as abs(coeff) > coeffErr / sqrt(coeffNum).
- coeffsSqr
numpy.ndarray
, optional A matrix containing potential quadratic crosstalk coefficients (see e.g., Snyder+21, 2001.03223). coeffsSqr[i][j] contains the coefficients to calculate the contribution amplifier_j has on amplifier_i (each row[i] contains the corrections for detector_i).
- coeffErrSqr
numpy.ndarray
, optional A matrix (as defined by
coeffsSqr
) containing the standard distribution of the quadratic term of the crosstalk measurements.- interChip
dict
[numpy.ndarray
] A dictionary keyed by detectorName containing
coeffs
matrices used to correct for inter-chip crosstalk with a source on the detector indicated.
Version 1.1 adds quadratic coefficients, a matrix with the ratios of amplifiers gains per detector, and a field to indicate the units of the numerator and denominator of the source and target signals, with “adu” meaning “ADU / ADU” and “electron” meaning “e- / e-“.
Version 1.2 adds the original gains used in the crosstalk fit.
Attributes Summary
Methods Summary
apply
(target)Method to apply the calibration to the target object.
calculateBackground
(mi[, badPixels])Estimate median background in image.
calibInfoFromDict
(dictionary)Handle common keywords.
determineCalibClass
(metadata, message)Attempt to find calibration class in metadata.
extractAmp
(image, amp, ampTarget[, ...])Extract the image data from an amp, flipped to match ampTarget.
fromDetector
(detector[, coeffVector, ...])Set calibration parameters from the detector.
fromDict
(dictionary)Construct a calibration from a dictionary of properties.
fromTable
(tableList)Construct calibration from a list of tables.
Retrieve metadata associated with this calibration.
readFits
(filename, **kwargs)Read calibration data from a FITS file.
readText
(filename, **kwargs)Read calibration representation from a yaml/ecsv file.
setMetadata
(metadata)Store a copy of the supplied metadata with this calibration.
subtractCrosstalk
(thisExposure[, ...])Subtract the crosstalk from thisExposure, optionally using a different source.
toDict
()Return a dictionary containing the calibration properties.
toTable
()Construct a list of tables containing the information in this calibration.
updateMetadata
([setDate])Update calibration metadata.
updateMetadataFromExposures
(exposures)Extract and unify metadata information.
validate
([other])Validate that this calibration is defined and can be used.
writeFits
(filename)Write calibration data to a FITS file.
writeText
(filename[, format])Write the calibration data to a text file.
Attributes Documentation
- metadata¶
- requiredAttributes¶
Methods Documentation
- apply(target)¶
Method to apply the calibration to the target object.
- static calculateBackground(mi, badPixels=['BAD'])¶
Estimate median background in image.
Getting a great background model isn’t important for crosstalk correction, since the crosstalk is at a low level. The median should be sufficient.
- calibInfoFromDict(dictionary)¶
Handle common keywords.
This isn’t an ideal solution, but until all calibrations expect to find everything in the metadata, they still need to search through dictionaries.
- Parameters:
- dictionary
dict
orlsst.daf.base.PropertyList
Source for the common keywords.
- dictionary
- Raises:
- RuntimeError
Raised if the dictionary does not match the expected OBSTYPE.
- classmethod determineCalibClass(metadata, message)¶
Attempt to find calibration class in metadata.
- Parameters:
- Returns:
- calibClass
object
The class to use to read the file contents. Should be an
lsst.ip.isr.IsrCalib
subclass.
- calibClass
- Raises:
- ValueError
Raised if the resulting calibClass is the base
lsst.ip.isr.IsrClass
(which does not implement the content methods).
- static extractAmp(image, amp, ampTarget, isTrimmed=False, fullAmplifier=False, parallelOverscan=False)¶
Extract the image data from an amp, flipped to match ampTarget.
- Parameters:
- image
lsst.afw.image.Image
orlsst.afw.image.MaskedImage
Image containing the amplifier of interest.
- amp
lsst.afw.cameraGeom.Amplifier
Amplifier on image to extract.
- ampTarget
lsst.afw.cameraGeom.Amplifier
Target amplifier that the extracted image will be flipped to match.
- isTrimmed
bool
, optional The image is already trimmed. TODO : DM-15409 will resolve this.
- fullAmplifier
bool
, optional Use full amplifier and not just imaging region.
- parallelOverscan
bool
, optional Extract parallel overscan region instead of imaging region. Cannot be used if isTrimmed or fullAmplifier True.
- image
- Returns:
- output
lsst.afw.image.Image
Image of the amplifier in the desired configuration.
- output
- fromDetector(detector, coeffVector=None, coeffSqrVector=None)¶
Set calibration parameters from the detector.
- Parameters:
- detector
lsst.afw.cameraGeom.Detector
Detector to use to set parameters from.
- coeffVector
numpy.array
, optional Use the detector geometry (bounding boxes and flip information), but use
coeffVector
instead of the output ofdetector.getCrosstalk()
.- coeffSqrVector
numpy.array
, optional Quadratic crosstalk coefficients.
- detector
- Returns:
- calib
lsst.ip.isr.CrosstalkCalib
The calibration constructed from the detector.
- calib
- classmethod fromDict(dictionary)¶
Construct a calibration from a dictionary of properties.
Must be implemented by the specific calibration subclasses.
- Parameters:
- dictionary
dict
Dictionary of properties.
- dictionary
- Returns:
- calib
lsst.ip.isr.CalibType
Constructed calibration.
- calib
- Raises:
- RuntimeError
Raised if the supplied dictionary is for a different calibration.
- classmethod fromTable(tableList)¶
Construct calibration from a list of tables.
This method uses the
fromDict
method to create the calibration, after constructing an appropriate dictionary from the input tables.- Parameters:
- tableList
list
[lsst.afw.table.Table
] List of tables to use to construct the crosstalk calibration.
- tableList
- Returns:
- calib
lsst.ip.isr.CrosstalkCalib
The calibration defined in the tables.
- calib
- getMetadata()¶
Retrieve metadata associated with this calibration.
- Returns:
- meta
lsst.daf.base.PropertyList
Metadata. The returned
PropertyList
can be modified by the caller and the changes will be written to external files.
- meta
- classmethod readFits(filename, **kwargs)¶
Read calibration data from a FITS file.
- Parameters:
- Returns:
- calib
lsst.ip.isr.IsrCalib
Calibration contained within the file.
- calib
- classmethod readText(filename, **kwargs)¶
Read calibration representation from a yaml/ecsv file.
- Parameters:
- Returns:
- calib
IsrCalibType
Calibration class.
- calib
- Raises:
- RuntimeError
Raised if the filename does not end in “.ecsv” or “.yaml”.
- setMetadata(metadata)¶
Store a copy of the supplied metadata with this calibration.
- Parameters:
- metadata
lsst.daf.base.PropertyList
Metadata to associate with the calibration. Will be copied and overwrite existing metadata.
- metadata
- subtractCrosstalk(thisExposure, sourceExposure=None, crosstalkCoeffs=None, crosstalkCoeffsSqr=None, crosstalkCoeffsValid=None, badPixels=['BAD'], minPixelToMask=45000, doSubtrahendMasking=False, crosstalkStr='CROSSTALK', isTrimmed=False, backgroundMethod='None', doSqrCrosstalk=False, fullAmplifier=False, parallelOverscan=False, detectorConfig=None, badAmpDict=None)¶
Subtract the crosstalk from thisExposure, optionally using a different source.
We set the mask plane indicated by
crosstalkStr
in a target amplifier for pixels in a source amplifier that exceedminPixelToMask
. Note that the correction is applied to all pixels in the amplifier, but only those that have a substantial crosstalk are masked withcrosstalkStr
.The uncorrected image is used as a template for correction. This is good enough if the crosstalk is small (e.g., coefficients < ~ 1e-3), but if it’s larger you may want to iterate.
- Parameters:
- thisExposure
lsst.afw.image.Exposure
Exposure for which to subtract crosstalk.
- sourceExposure
lsst.afw.image.Exposure
, optional Exposure to use as the source of the crosstalk. If not set, thisExposure is used as the source (intra-detector crosstalk).
- crosstalkCoeffs
numpy.ndarray
, optional. Coefficients to use to correct crosstalk.
- crosstalkCoeffsSqr
numpy.ndarray
, optional. Quadratic coefficients to use to correct crosstalk.
- crosstalkCoeffsValid
numpy.ndarray
, optional Boolean array that is True where coefficients are valid.
- badPixels
list
ofstr
, optional Mask planes to ignore.
- minPixelToMask
float
, optional Minimum pixel value (relative to the background level) in source amplifier for which to set
crosstalkStr
mask plane in target amplifier.- crosstalkStr
str
, optional Mask plane name for pixels greatly modified by crosstalk (above minPixelToMask).
- isTrimmed
bool
, optional The image is already trimmed. This should no longer be needed once DM-15409 is resolved.
- backgroundMethod
str
, optional Method used to subtract the background. “AMP” uses amplifier-by-amplifier background levels, “DETECTOR” uses full exposure/maskedImage levels. Any other value results in no background subtraction.
- doSqrCrosstalk: `bool`, optional
Should the quadratic crosstalk coefficients be used for the crosstalk correction?
- fullAmplifier
bool
, optional Use full amplifier and not just imaging region.
- parallelOverscan
bool
, optional Only correct the parallel overscan region.
- detectorConfig
lsst.ip.isr.overscanDetectorConfig
, optional Per-amplifier configs to use if parallelOverscan is True.
- badAmpDict
dict
[str
,bool
], optional Dictionary to identify bad amplifiers that should not be source or target for crosstalk correction.
- thisExposure
Notes
For a given image I, we want to find the crosstalk subtrahend image CT, such that
I_corrected = I - CT
The subtrahend image is the sum of all crosstalk contributions that appear in I, so we can build it up by amplifier. Each amplifier A in image I sees the contributions from all other amplifiers B_v != A. For the current linear model, we set
sImage
equal to the segment of the subtrahend image CT corresponding to amplifier A, and then build it up as: simage_linear = sum_v coeffsA_v * (B_v - bkg_v) where coeffsA_v is the vector of crosstalk coefficients for sources that cause images in amplifier A. The bkg_v term in this equation is identically 0.0 for all cameras except obs_subaru (and is only non-zero there for historical reasons). To include the non-linear term, we can again add to the subtrahend image using the same loop, as:- simage_nonlinear = sum_v (coeffsA_v * B_v) + (NLcoeffsA_v * B_v * B_v)
= sum_v linear_term_v + nonlinear_term_v
where coeffsA_v is the linear term, and NLcoeffsA_v are the quadratic component. For LSSTCam, it has been observed that the linear_term_v >> nonlinear_term_v.
- toDict()¶
Return a dictionary containing the calibration properties.
The dictionary should be able to be round-tripped through
fromDict
.- Returns:
- dictionary
dict
Dictionary of properties.
- dictionary
- toTable()¶
Construct a list of tables containing the information in this calibration.
The list of tables should create an identical calibration after being passed to this class’s fromTable method.
- Returns:
- tableList
list
[lsst.afw.table.Table
] List of tables containing the crosstalk calibration information.
- tableList
- updateMetadata(setDate=False, **kwargs)¶
Update calibration metadata.
This calls the base class’s method after ensuring the required calibration keywords will be saved.
- Parameters:
- setDate
bool
, optional Update the CALIBDATE fields in the metadata to the current time. Defaults to False.
- kwargs
Other keyword parameters to set in the metadata.
- setDate
- updateMetadataFromExposures(exposures)¶
Extract and unify metadata information.
- Parameters:
- exposures
list
Exposures or other calibrations to scan.
- exposures
- validate(other=None)¶
Validate that this calibration is defined and can be used.
- writeFits(filename)¶
Write calibration data to a FITS file.
- writeText(filename, format='auto')¶
Write the calibration data to a text file.
- Parameters:
- Returns:
- used
str
The name of the file used to write the data. This may differ from the input if the format is explicitly chosen.
- used
- Raises:
- RuntimeError
Raised if filename does not end in a known extension, or if all information cannot be written.
Notes
The file is written to YAML/ECSV format and will include any associated metadata.