LSST Applications g0265f82a02+c6dfa2ddaf,g1162b98a3f+b2075782a9,g2079a07aa2+1b2e822518,g2bbee38e9b+c6dfa2ddaf,g337abbeb29+c6dfa2ddaf,g3ddfee87b4+a60788ef87,g50ff169b8f+2eb0e556e8,g52b1c1532d+90ebb246c7,g555ede804d+a60788ef87,g591dd9f2cf+ba8caea58f,g5ec818987f+864ee9cddb,g858d7b2824+9ee1ab4172,g876c692160+a40945ebb7,g8a8a8dda67+90ebb246c7,g8cdfe0ae6a+4fd9e222a8,g99cad8db69+5e309b7bc6,g9ddcbc5298+a1346535a5,ga1e77700b3+df8f93165b,ga8c6da7877+aa12a14d27,gae46bcf261+c6dfa2ddaf,gb0e22166c9+8634eb87fb,gb3f2274832+d0da15e3be,gba4ed39666+1ac82b564f,gbb8dafda3b+5dfd9c994b,gbeb006f7da+97157f9740,gc28159a63d+c6dfa2ddaf,gc86a011abf+9ee1ab4172,gcf0d15dbbd+a60788ef87,gdaeeff99f8+1cafcb7cd4,gdc0c513512+9ee1ab4172,ge79ae78c31+c6dfa2ddaf,geb67518f79+ba1859f325,geb961e4c1e+f9439d1e6f,gee10cc3b42+90ebb246c7,gf1cff7945b+9ee1ab4172,w.2024.12
LSST Data Management Base Package
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | Static Public Attributes | Static Protected Attributes | List of all members
lsst.ip.isr.assembleCcdTask.AssembleCcdTask Class Reference
Inheritance diagram for lsst.ip.isr.assembleCcdTask.AssembleCcdTask:

Public Member Functions

 __init__ (self, **kwargs)
 
 assembleCcd (self, assembleInput)
 
 postprocessExposure (self, outExposure, inExposure)
 

Public Attributes

 allKeysToRemove
 

Static Public Attributes

 ConfigClass = AssembleCcdConfig
 

Static Protected Attributes

str _DefaultName = "assembleCcd"
 

Detailed Description

Assemble a set of amplifier images into a full detector size set of
pixels.

The keys for removal specified in
`lsst.ip.isr.AssembleCcdConfig.keysToRemove` are added to a default set:
('DATASEC', 'BIASSEC', 'TRIMSEC', 'GAIN').

Definition at line 46 of file assembleCcdTask.py.

Constructor & Destructor Documentation

◆ __init__()

lsst.ip.isr.assembleCcdTask.AssembleCcdTask.__init__ ( self,
** kwargs )

Definition at line 57 of file assembleCcdTask.py.

57 def __init__(self, **kwargs):
58 pipeBase.Task.__init__(self, **kwargs)
59
60 self.allKeysToRemove = ('DATASEC', 'BIASSEC', 'TRIMSEC', 'GAIN') + tuple(self.config.keysToRemove)
61

Member Function Documentation

◆ assembleCcd()

lsst.ip.isr.assembleCcdTask.AssembleCcdTask.assembleCcd ( self,
assembleInput )
Assemble a set of amps into a single CCD size image.

Parameters
----------
assembleInput : `dict` [`str`, `lsst.afw.image.Exposure`] or \
                `lsst.afw.image.Exposure`
    Either a dictionary of amp exposures, or a single exposure
    containing all raw amps. If a dictionary of amp exposures, the key
    should be the amp name.

Returns
-------
assembledCcd : `lsst.afw.image.Exposure`
    An exposure of the assembled amp sections.

Raises
------
TypeError
    Raised if the input exposures to be assembled do not adhere to the
    required format.
RuntimeError
    Raised if the detector set on the input exposure is not set.

Definition at line 62 of file assembleCcdTask.py.

62 def assembleCcd(self, assembleInput):
63 """Assemble a set of amps into a single CCD size image.
64
65 Parameters
66 ----------
67 assembleInput : `dict` [`str`, `lsst.afw.image.Exposure`] or \
68 `lsst.afw.image.Exposure`
69 Either a dictionary of amp exposures, or a single exposure
70 containing all raw amps. If a dictionary of amp exposures, the key
71 should be the amp name.
72
73 Returns
74 -------
75 assembledCcd : `lsst.afw.image.Exposure`
76 An exposure of the assembled amp sections.
77
78 Raises
79 ------
80 TypeError
81 Raised if the input exposures to be assembled do not adhere to the
82 required format.
83 RuntimeError
84 Raised if the detector set on the input exposure is not set.
85 """
86 ccd = None
87 if isinstance(assembleInput, dict):
88 # assembleInput is a dictionary of amp name: amp exposure
89
90 # Assume all amps have the same detector, so get the detector from
91 # an arbitrary amp.
92 ccd = next(iter(assembleInput.values())).getDetector()
93
94 def getNextExposure(amp):
95 return assembleInput[amp.getName()]
96 elif hasattr(assembleInput, "getMaskedImage"):
97 # assembleInput is a single exposure
98 ccd = assembleInput.getDetector()
99
100 def getNextExposure(amp):
101 return assembleInput
102 else:
103 raise TypeError("Expected either a dictionary of amp exposures or a single raw exposure")
104
105 if ccd is None:
106 raise RuntimeError("No ccd detector found")
107
108 if not self.config.doTrim:
109 outBox = cameraGeomUtils.calcRawCcdBBox(ccd)
110 else:
111 outBox = ccd.getBBox()
112 outExposure = afwImage.ExposureF(outBox)
113 outMI = outExposure.getMaskedImage()
114
115 if self.config.doTrim:
116 assemble = cameraGeom.assembleAmplifierImage
117 else:
118 assemble = cameraGeom.assembleAmplifierRawImage
119
120 for amp in ccd:
121 inMI = getNextExposure(amp).getMaskedImage()
122 assemble(outMI, inMI, amp)
123 #
124 # If we are returning an "untrimmed" image (with overscans and
125 # extended register) we need to update the ampInfo table in the
126 # Detector as we've moved the amp images into
127 # place in a single Detector image
128 #
129 if not self.config.doTrim:
130 ccd = cameraGeom.makeUpdatedDetector(ccd)
131
132 outExposure.setDetector(ccd)
133 self.postprocessExposure(outExposure=outExposure, inExposure=getNextExposure(ccd[0]))
134
135 return outExposure
136

◆ postprocessExposure()

lsst.ip.isr.assembleCcdTask.AssembleCcdTask.postprocessExposure ( self,
outExposure,
inExposure )
Set exposure non-image attributes, including wcs and metadata and
display exposure (if requested).

Call after assembling the pixels.

Parameters
----------
outExposure : `lsst.afw.image.Exposure`
    The exposure to modify by copying metadata (after removing unwanted
    keywords), wcs, filter, and detector from ``inExposure``.
inExposure : `lsst.afw.image.Exposure`
    The input exposure providing metadata, wcs, filter, and detector.

Definition at line 137 of file assembleCcdTask.py.

137 def postprocessExposure(self, outExposure, inExposure):
138 """Set exposure non-image attributes, including wcs and metadata and
139 display exposure (if requested).
140
141 Call after assembling the pixels.
142
143 Parameters
144 ----------
145 outExposure : `lsst.afw.image.Exposure`
146 The exposure to modify by copying metadata (after removing unwanted
147 keywords), wcs, filter, and detector from ``inExposure``.
148 inExposure : `lsst.afw.image.Exposure`
149 The input exposure providing metadata, wcs, filter, and detector.
150 """
151 if inExposure.hasWcs():
152 outExposure.setWcs(inExposure.getWcs())
153
154 exposureMetadata = inExposure.getMetadata()
155 for key in self.allKeysToRemove:
156 if exposureMetadata.exists(key):
157 exposureMetadata.remove(key)
158 outExposure.setMetadata(exposureMetadata)
159
160 # note: don't copy PhotoCalib, because it is assumed to be unknown in
161 # raw data.
162 outExposure.info.id = inExposure.info.id
163 outExposure.setFilter(inExposure.getFilter())
164 outExposure.getInfo().setVisitInfo(inExposure.getInfo().getVisitInfo())
165
166 frame = getDebugFrame(self._display, "assembledExposure")
167 if frame:
168 afwDisplay.Display(frame=frame).mtv(outExposure, title="postprocessExposure")

Member Data Documentation

◆ _DefaultName

str lsst.ip.isr.assembleCcdTask.AssembleCcdTask._DefaultName = "assembleCcd"
staticprotected

Definition at line 55 of file assembleCcdTask.py.

◆ allKeysToRemove

lsst.ip.isr.assembleCcdTask.AssembleCcdTask.allKeysToRemove

Definition at line 60 of file assembleCcdTask.py.

◆ ConfigClass

lsst.ip.isr.assembleCcdTask.AssembleCcdTask.ConfigClass = AssembleCcdConfig
static

Definition at line 54 of file assembleCcdTask.py.


The documentation for this class was generated from the following file: