22__all__ = [
"IsrMockConfig",
"IsrMock",
"RawMock",
"TrimmedRawMock",
"RawDictMock",
23 "CalibratedRawMock",
"MasterMock",
24 "BiasMock",
"DarkMock",
"FlatMock",
"FringeMock",
"UntrimmedFringeMock",
25 "BfKernelMock",
"DefectMock",
"CrosstalkCoeffMock",
"TransmissionMock",
26 "MockDataContainer",
"MockFringeContainer"]
40from .crosstalk
import CrosstalkCalib
41from .defects
import Defects
45 """Configuration parameters for isrMock.
47 These parameters produce generic fixed position signals from
48 various sources,
and combine them
in a way that matches how those
49 signals are combined to create real data. The camera used
is the
50 test camera defined by the afwUtils code.
53 isLsstLike = pexConfig.Field(
56 doc=
"If True, products have one raw image per amplifier, otherwise, one raw image per detector.",
58 plateScale = pexConfig.Field(
61 doc=
"Plate scale used in constructing mock camera.",
63 radialDistortion = pexConfig.Field(
66 doc=
"Radial distortion term used in constructing mock camera.",
68 isTrimmed = pexConfig.Field(
71 doc=
"If True, amplifiers have been trimmed and mosaicked to remove regions outside the data BBox.",
73 detectorIndex = pexConfig.Field(
76 doc=
"Index for the detector to use. The default value uses a standard 2x4 array of amps.",
78 rngSeed = pexConfig.Field(
81 doc=
"Seed for random number generator used to add noise.",
84 gain = pexConfig.Field(
87 doc=
"Gain for simulated data in e^-/DN.",
89 readNoise = pexConfig.Field(
92 doc=
"Read noise of the detector in e-.",
94 expTime = pexConfig.Field(
97 doc=
"Exposure time for simulated data.",
101 skyLevel = pexConfig.Field(
104 doc=
"Background contribution to be generated from 'the sky' in DN.",
106 sourceFlux = pexConfig.ListField(
109 doc=
"Peak flux level (in DN) of simulated 'astronomical sources'.",
111 sourceAmp = pexConfig.ListField(
114 doc=
"Amplifier to place simulated 'astronomical sources'.",
116 sourceX = pexConfig.ListField(
119 doc=
"Peak position (in amplifier coordinates) of simulated 'astronomical sources'.",
121 sourceY = pexConfig.ListField(
124 doc=
"Peak position (in amplifier coordinates) of simulated 'astronomical sources'.",
126 overscanScale = pexConfig.Field(
129 doc=
"Amplitude (in DN) of the ramp function to add to overscan data.",
131 biasLevel = pexConfig.Field(
134 doc=
"Background contribution to be generated from the bias offset in DN.",
136 darkRate = pexConfig.Field(
139 doc=
"Background level contribution (in e-/s) to be generated from dark current.",
141 darkTime = pexConfig.Field(
144 doc=
"Exposure time for the dark current contribution.",
146 flatDrop = pexConfig.Field(
149 doc=
"Fractional flux drop due to flat from center to edge of detector along x-axis.",
151 fringeScale = pexConfig.ListField(
154 doc=
"Peak fluxes for the components of the fringe ripple in DN.",
156 fringeX0 = pexConfig.ListField(
159 doc=
"Center position for the fringe ripples.",
161 fringeY0 = pexConfig.ListField(
164 doc=
"Center position for the fringe ripples.",
168 doAddSky = pexConfig.Field(
171 doc=
"Apply 'sky' signal to output image.",
173 doAddSource = pexConfig.Field(
176 doc=
"Add simulated source to output image.",
178 doAddCrosstalk = pexConfig.Field(
181 doc=
"Apply simulated crosstalk to output image. This cannot be corrected by ISR, "
182 "as detector.hasCrosstalk()==False.",
184 doAddOverscan = pexConfig.Field(
187 doc=
"If untrimmed, add overscan ramp to overscan and data regions.",
189 doAddBias = pexConfig.Field(
192 doc=
"Add bias signal to data.",
194 doAddDark = pexConfig.Field(
197 doc=
"Add dark signal to data.",
199 doAddFlat = pexConfig.Field(
202 doc=
"Add flat signal to data.",
204 doAddFringe = pexConfig.Field(
207 doc=
"Add fringe signal to data.",
211 doTransmissionCurve = pexConfig.Field(
214 doc=
"Return a simulated transmission curve.",
216 doDefects = pexConfig.Field(
219 doc=
"Return a simulated defect list.",
221 doBrighterFatter = pexConfig.Field(
224 doc=
"Return a simulated brighter-fatter kernel.",
226 doCrosstalkCoeffs = pexConfig.Field(
229 doc=
"Return the matrix of crosstalk coefficients.",
231 doDataRef = pexConfig.Field(
234 doc=
"Return a simulated gen2 butler dataRef.",
236 doGenerateImage = pexConfig.Field(
239 doc=
"Return the generated output image if True.",
241 doGenerateData = pexConfig.Field(
244 doc=
"Return a non-image data structure if True.",
246 doGenerateAmpDict = pexConfig.Field(
249 doc=
"Return a dict of exposure amplifiers instead of an afwImage.Exposure.",
254 """Class to generate consistent mock images for ISR testing.
256 ISR testing currently relies on one-off fake images that do not
257 accurately mimic the full set of detector effects. This
class
258 uses the test camera/detector/amplifier structure defined
in
260 dependent on any of the actual obs package formats.
262 ConfigClass = IsrMockConfig
263 _DefaultName = "isrMock"
267 self.
rng = np.random.RandomState(self.config.rngSeed)
269 [1e-2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
270 [1e-2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
271 [1e-2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
272 [1e-2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
273 [1e-2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
274 [1e-2, 0.0, 0.0, 2.2e-2, 0.0, 0.0, 0.0, 0.0],
275 [1e-2, 5e-3, 5e-4, 3e-3, 4e-2, 5e-3, 5e-3, 0.0]])
278 [4., 16., 26., 16., 4.],
279 [7., 26., 41., 26., 7.],
280 [4., 16., 26., 16., 4.],
281 [1., 4., 7., 4., 1.]]) / 273.0
284 """Generate a mock ISR product, and return it.
289 Simulated ISR image with signals added.
291 Simulated ISR data products.
293 Returned
if no valid configuration was found.
298 Raised
if both doGenerateImage
and doGenerateData are specified.
300 if self.config.doGenerateImage
and self.config.doGenerateData:
301 raise RuntimeError(
"Only one of doGenerateImage and doGenerateData may be specified.")
302 elif self.config.doGenerateImage:
304 elif self.config.doGenerateData:
310 """Generate simulated ISR data.
313 matrix, brighter-fatter kernel, a constant unity transmission
314 curve,
or a simple single-entry defect list can be generated.
319 Simulated ISR data product.
321 if sum(map(bool, [self.config.doBrighterFatter,
322 self.config.doDefects,
323 self.config.doTransmissionCurve,
324 self.config.doCrosstalkCoeffs])) != 1:
325 raise RuntimeError(
"Only one data product can be generated at a time.")
326 elif self.config.doBrighterFatter
is True:
328 elif self.config.doDefects
is True:
330 elif self.config.doTransmissionCurve
is True:
332 elif self.config.doCrosstalkCoeffs
is True:
338 """Generate a simple Gaussian brighter-fatter kernel.
342 kernel : `numpy.ndarray`
343 Simulated brighter-fatter kernel.
348 """Generate a simple single-entry defect list.
352 defectList : `lsst.meas.algorithms.Defects`
353 Simulated defect list
359 """Generate the simulated crosstalk coefficients.
363 coeffs : `numpy.ndarray`
364 Simulated crosstalk coefficients.
370 """Generate a simulated flat transmission curve.
375 Simulated transmission curve.
378 return afwImage.TransmissionCurve.makeIdentity()
381 """Generate a simulated ISR image.
386 Simulated ISR image data.
390 This method currently constructs a
"raw" data image by:
392 * Generating a simulated sky
with noise
393 * Adding a single Gaussian
"star"
394 * Adding the fringe signal
395 * Multiplying the frame by the simulated flat
396 * Adding dark current (
and noise)
397 * Adding a bias offset (
and noise)
398 * Adding an overscan gradient parallel to the pixel y-axis
399 * Simulating crosstalk by adding a scaled version of each
400 amplifier to each other amplifier.
402 The exposure
with image data constructed this way
is in one of
405 * A single image,
with overscan
and prescan regions retained
406 * A single image,
with overscan
and prescan regions trimmed
407 * A `dict`, containing the amplifer data indexed by the
410 The nonlinearity, CTE,
and brighter fatter are currently
not
413 Note that this method generates an image
in the reverse
414 direction
as the ISR processing,
as the output image here has
415 had a series of instrument effects added to an idealized
420 for idx, amp
in enumerate(exposure.getDetector()):
422 if self.config.isTrimmed
is True:
425 bbox = amp.getRawDataBBox()
427 ampData = exposure.image[bbox]
429 if self.config.doAddSky
is True:
430 self.
amplifierAddNoise(ampData, self.config.skyLevel, np.sqrt(self.config.skyLevel))
432 if self.config.doAddSource
is True:
433 for sourceAmp, sourceFlux, sourceX, sourceY
in zip(self.config.sourceAmp,
434 self.config.sourceFlux,
436 self.config.sourceY):
440 if self.config.doAddFringe
is True:
442 x0=np.array(self.config.fringeX0),
443 y0=np.array(self.config.fringeY0))
445 if self.config.doAddFlat
is True:
446 if ampData.getArray().sum() == 0.0:
448 u0 = exposure.getDimensions().getX()
449 v0 = exposure.getDimensions().getY()
452 if self.config.doAddDark
is True:
454 self.config.darkRate * self.config.darkTime / self.config.gain,
455 np.sqrt(self.config.darkRate
456 * self.config.darkTime / self.config.gain))
458 if self.config.doAddCrosstalk
is True:
460 for idxS, ampS
in enumerate(exposure.getDetector()):
461 for idxT, ampT
in enumerate(exposure.getDetector()):
462 ampDataT = exposure.image[ampT.getBBox()
463 if self.config.isTrimmed
else ampT.getRawDataBBox()]
464 outAmp = ctCalib.extractAmp(exposure.getImage(), ampS, ampT,
465 isTrimmed=self.config.isTrimmed)
468 for amp
in exposure.getDetector():
470 if self.config.isTrimmed
is True:
473 bbox = amp.getRawDataBBox()
475 ampData = exposure.image[bbox]
477 if self.config.doAddBias
is True:
479 self.config.readNoise / self.config.gain)
481 if self.config.doAddOverscan
is True:
482 oscanBBox = amp.getRawHorizontalOverscanBBox()
483 oscanData = exposure.image[oscanBBox]
485 self.config.readNoise / self.config.gain)
488 1.0 * self.config.overscanScale)
490 1.0 * self.config.overscanScale)
492 if self.config.doGenerateAmpDict
is True:
494 for amp
in exposure.getDetector():
495 expDict[amp.getName()] = exposure
502 """Construct a test camera object.
506 camera : `lsst.afw.cameraGeom.camera`
509 cameraWrapper = afwTestUtils.CameraWrapper(
510 plateScale=self.config.plateScale,
511 radialDistortion=self.config.radialDistortion,
512 isLsstLike=self.config.isLsstLike,
514 camera = cameraWrapper.camera
518 """Construct a test exposure.
520 The test exposure has a simple WCS set, as well
as a list of
521 unlikely header keywords that can be removed during ISR
522 processing to exercise that code.
526 exposure : `lsst.afw.exposure.Exposure`
527 Construct exposure containing masked image of the
531 detector = camera[self.config.detectorIndex]
532 image = afwUtils.makeImageFromCcd(detector,
533 isTrimmed=self.config.isTrimmed,
537 imageFactory=afwImage.ImageF)
539 var = afwImage.ImageF(image.getDimensions())
545 exposure.setDetector(detector)
546 exposure.setWcs(self.
getWcs())
548 visitInfo =
afwImage.VisitInfo(exposureTime=self.config.expTime, darkTime=self.config.darkTime)
549 exposure.getInfo().setVisitInfo(visitInfo)
551 metadata = exposure.getMetadata()
552 metadata.add(
"SHEEP", 7.3,
"number of sheep on farm")
553 metadata.add(
"MONKEYS", 155,
"monkeys per tree")
554 metadata.add(
"VAMPIRES", 4,
"How scary are vampires.")
556 ccd = exposure.getDetector()
557 newCcd = ccd.rebuild()
560 newAmp = amp.rebuild()
561 newAmp.setLinearityCoeffs((0., 1., 0., 0.))
562 newAmp.setLinearityType(
"Polynomial")
563 newAmp.setGain(self.config.gain)
564 newAmp.setSuspectLevel(25000.0)
565 newAmp.setSaturation(32000.0)
566 newCcd.append(newAmp)
567 exposure.setDetector(newCcd.finish())
569 exposure.image.array[:] = np.zeros(exposure.getImage().getDimensions()).transpose()
570 exposure.mask.array[:] = np.zeros(exposure.getMask().getDimensions()).transpose()
571 exposure.variance.array[:] = np.zeros(exposure.getVariance().getDimensions()).transpose()
576 """Construct a dummy WCS object.
578 Taken from the deprecated ip_isr/examples/exampleUtils.py.
580 This
is not guaranteed, given the distortion
and pixel scale
581 listed
in the afwTestUtils camera definition.
593 """Convert between a local amplifier coordinate and the full
598 ampData : `lsst.afw.image.ImageF`
599 Amplifier image to use for conversions.
601 X-coordinate of the point to transform.
603 Y-coordinate of the point to transform.
608 Transformed x-coordinate.
610 Transformed y-coordinate.
614 The output
is transposed intentionally here, to match the
615 internal transpose between numpy
and afw.image coordinates.
617 u = x + ampData.getBBox().getBeginX()
618 v = y + ampData.getBBox().getBeginY()
624 """Add Gaussian noise to an amplifier's image data.
626 This method operates in the amplifier coordinate frame.
630 ampData : `lsst.afw.image.ImageF`
631 Amplifier image to operate on.
633 Mean value of the Gaussian noise.
635 Sigma of the Gaussian noise.
637 ampArr = ampData.array
638 ampArr[:] = ampArr[:] + self.rng.normal(mean, sigma,
639 size=ampData.getDimensions()).transpose()
642 """Add a y-axis linear gradient to an amplifier's image data.
644 This method operates in the amplifier coordinate frame.
648 ampData : `lsst.afw.image.ImageF`
649 Amplifier image to operate on.
651 Start value of the gradient (at y=0).
653 End value of the gradient (at y=ymax).
655 nPixY = ampData.getDimensions().getY()
656 ampArr = ampData.array
657 ampArr[:] = ampArr[:] + (np.interp(range(nPixY), (0, nPixY - 1), (start, end)).reshape(nPixY, 1)
658 + np.zeros(ampData.getDimensions()).transpose())
661 """Add a single Gaussian source to an amplifier.
663 This method operates in the amplifier coordinate frame.
667 ampData : `lsst.afw.image.ImageF`
668 Amplifier image to operate on.
670 Peak flux of the source to add.
672 X-coordinate of the source peak.
674 Y-coordinate of the source peak.
676 for x
in range(0, ampData.getDimensions().getX()):
677 for y
in range(0, ampData.getDimensions().getY()):
678 ampData.array[y][x] = (ampData.array[y][x]
679 + scale * np.exp(-0.5 * ((x - x0)**2 + (y - y0)**2) / 3.0**2))
682 """Add a scaled copy of an amplifier to another, simulating crosstalk.
684 This method operates in the amplifier coordinate frame.
688 ampDataSource : `lsst.afw.image.ImageF`
689 Amplifier image to add scaled copy
from.
690 ampDataTarget : `lsst.afw.image.ImageF`
691 Amplifier image to add scaled copy to.
693 Flux scale of the copy to add to the target.
697 This simulates simple crosstalk between amplifiers.
699 ampDataTarget.array[:] = (ampDataTarget.array[:]
700 + scale * ampDataSource.array[:])
704 """Add a fringe-like ripple pattern to an amplifier's image data.
708 amp : `~lsst.afw.ampInfo.AmpInfoRecord`
709 Amplifier to operate on. Needed for amp<->exp coordinate
711 ampData : `lsst.afw.image.ImageF`
712 Amplifier image to operate on.
713 scale : `numpy.array`
or `float`
714 Peak intensity scaling
for the ripple.
715 x0 : `numpy.array`
or `float`, optional
717 y0 : `numpy.array`
or `float`, optional
722 This uses an offset sinc function to generate a ripple
723 pattern.
True fringes have much finer structure, but this
724 pattern should be visually identifiable. The (x, y)
725 coordinates are
in the frame of the amplifier,
and (u, v)
in
726 the frame of the full trimmed image.
728 for x
in range(0, ampData.getDimensions().getX()):
729 for y
in range(0, ampData.getDimensions().getY()):
731 ampData.getArray()[y][x] = np.sum((ampData.getArray()[y][x]
732 + scale * np.sinc(((u - x0) / 50)**2
733 + ((v - y0) / 50)**2)))
736 """Multiply an amplifier's image data by a flat-like pattern.
740 amp : `lsst.afw.ampInfo.AmpInfoRecord`
741 Amplifier to operate on. Needed for amp<->exp coordinate
743 ampData : `lsst.afw.image.ImageF`
744 Amplifier image to operate on.
746 Fractional drop
from center to edge of detector along x-axis.
748 Peak location
in detector coordinates.
750 Peak location
in detector coordinates.
754 This uses a 2-d Gaussian to simulate an illumination pattern
755 that falls off towards the edge of the detector. The (x, y)
756 coordinates are
in the frame of the amplifier,
and (u, v)
in
757 the frame of the full trimmed image.
760 raise RuntimeError(
"Flat fractional drop cannot be greater than 1.0")
762 sigma = u0 / np.sqrt(-2.0 * np.log(fracDrop))
764 for x
in range(0, ampData.getDimensions().getX()):
765 for y
in range(0, ampData.getDimensions().getY()):
767 f = np.exp(-0.5 * ((u - u0)**2 + (v - v0)**2) / sigma**2)
768 ampData.array[y][x] = (ampData.array[y][x] * f)
772 """Generate a raw exposure suitable for ISR.
776 self.config.isTrimmed =
False
777 self.config.doGenerateImage =
True
778 self.config.doGenerateAmpDict =
False
779 self.config.doAddOverscan =
True
780 self.config.doAddSky =
True
781 self.config.doAddSource =
True
782 self.config.doAddCrosstalk =
False
783 self.config.doAddBias =
True
784 self.config.doAddDark =
True
788 """Generate a trimmed raw exposure.
792 self.config.isTrimmed =
True
793 self.config.doAddOverscan =
False
797 """Generate a trimmed raw exposure.
801 self.config.isTrimmed =
True
802 self.config.doGenerateImage =
True
803 self.config.doAddOverscan =
False
804 self.config.doAddSky =
True
805 self.config.doAddSource =
True
806 self.config.doAddCrosstalk =
False
808 self.config.doAddBias =
False
809 self.config.doAddDark =
False
810 self.config.doAddFlat =
False
811 self.config.doAddFringe =
True
813 self.config.biasLevel = 0.0
814 self.config.readNoise = 10.0
818 """Generate a raw exposure dict suitable for ISR.
822 self.config.doGenerateAmpDict =
True
826 """Parent class for those that make master calibrations.
830 self.config.isTrimmed =
True
831 self.config.doGenerateImage =
True
832 self.config.doAddOverscan =
False
833 self.config.doAddSky =
False
834 self.config.doAddSource =
False
835 self.config.doAddCrosstalk =
False
837 self.config.doAddBias =
False
838 self.config.doAddDark =
False
839 self.config.doAddFlat =
False
840 self.config.doAddFringe =
False
844 """Simulated master bias calibration.
848 self.config.doAddBias =
True
849 self.config.readNoise = 10.0
853 """Simulated master dark calibration.
857 self.config.doAddDark =
True
858 self.config.darkTime = 1.0
862 """Simulated master flat calibration.
866 self.config.doAddFlat =
True
870 """Simulated master fringe calibration.
874 self.config.doAddFringe =
True
878 """Simulated untrimmed master fringe calibration.
882 self.config.isTrimmed =
False
886 """Simulated brighter-fatter kernel.
890 self.config.doGenerateImage =
False
891 self.config.doGenerateData =
True
892 self.config.doBrighterFatter =
True
893 self.config.doDefects =
False
894 self.config.doCrosstalkCoeffs =
False
895 self.config.doTransmissionCurve =
False
899 """Simulated defect list.
903 self.config.doGenerateImage =
False
904 self.config.doGenerateData =
True
905 self.config.doBrighterFatter =
False
906 self.config.doDefects =
True
907 self.config.doCrosstalkCoeffs =
False
908 self.config.doTransmissionCurve =
False
912 """Simulated crosstalk coefficient matrix.
916 self.config.doGenerateImage =
False
917 self.config.doGenerateData =
True
918 self.config.doBrighterFatter =
False
919 self.config.doDefects =
False
920 self.config.doCrosstalkCoeffs =
True
921 self.config.doTransmissionCurve =
False
925 """Simulated transmission curve.
929 self.config.doGenerateImage =
False
930 self.config.doGenerateData =
True
931 self.config.doBrighterFatter =
False
932 self.config.doDefects =
False
933 self.config.doCrosstalkCoeffs =
False
934 self.config.doTransmissionCurve =
True
938 """Container for holding ISR mock objects.
940 dataId = "isrMock Fake Data"
948 if 'config' in kwargs.keys():
956 self.
config.doGenerateImage =
True
957 self.
config.doGenerateData =
False
962 self.
config.doGenerateImage =
False
963 self.
config.doGenerateData =
True
965 def get(self, dataType, **kwargs):
966 """Return an appropriate data product.
971 Type of data product to return.
975 mock : IsrMock.run() result
978 if "_filename" in dataType:
980 return tempfile.mktemp(),
"mock"
981 elif 'transmission_' in dataType:
984 elif dataType ==
'ccdExposureId':
987 elif dataType ==
'camera':
990 elif dataType ==
'raw':
993 elif dataType ==
'bias':
996 elif dataType ==
'dark':
999 elif dataType ==
'flat':
1002 elif dataType ==
'fringe':
1005 elif dataType ==
'defects':
1008 elif dataType ==
'bfKernel':
1011 elif dataType ==
'linearizer':
1013 elif dataType ==
'crosstalkSources':
1016 raise RuntimeError(
"ISR DataRefMock cannot return %s.", dataType)
1020 """Container for mock fringe data.
1022 dataId = "isrMock Fake Data"
1030 if 'config' in kwargs.keys():
1034 self.
config.isTrimmed =
True
1035 self.
config.doAddFringe =
True
1036 self.
config.readNoise = 10.0
1038 def get(self, dataType, **kwargs):
1039 """Return an appropriate data product.
1044 Type of data product to return.
1048 mock : IsrMock.run() result
1051 if "_filename" in dataType:
1052 return tempfile.mktemp(),
"mock"
1053 elif 'transmission_' in dataType:
1055 elif dataType ==
'ccdExposureId':
1057 elif dataType ==
'camera':
1059 elif dataType ==
'raw':
1061 elif dataType ==
'bias':
1063 elif dataType ==
'dark':
1065 elif dataType ==
'flat':
1067 elif dataType ==
'fringe':
1069 configCopy = copy.deepcopy(self.
config)
1070 for scale, x, y
in zip(self.
config.fringeScale, self.
config.fringeX0, self.
config.fringeY0):
1071 configCopy.fringeScale = [1.0]
1072 configCopy.fringeX0 = [x]
1073 configCopy.fringeY0 = [y]
1074 fringes.append(
FringeMock(config=configCopy).run())
1076 elif dataType ==
'defects':
1078 elif dataType ==
'bfKernel':
1080 elif dataType ==
'linearizer':
1082 elif dataType ==
'crosstalkSources':
table::Key< table::Array< float > > crosstalk
table::Key< std::string > object
A 2-dimensional celestial WCS that transform pixels to ICRS RA/Dec, using the LSST standard for pixel...
A class to contain the data, WCS, and other information needed to describe an image of the sky.
Represent a 2-dimensional array of bitmask pixels.
A spatially-varying transmission curve as a function of wavelength.
Information about a single exposure of an imaging camera.
An integer coordinate rectangle.
Point in an unspecified spherical coordinate system.
localCoordToExpCoord(self, ampData, x, y)
amplifierAddSource(self, ampData, scale, x0, y0)
amplifierMultiplyFlat(self, amp, ampData, fracDrop, u0=100.0, v0=100.0)
amplifierAddYGradient(self, ampData, start, end)
makeTransmissionCurve(self)
amplifierAddNoise(self, ampData, mean, sigma)
amplifierAddCT(self, ampDataSource, ampDataTarget, scale)
amplifierAddFringe(self, amp, ampData, scale, x0=100, y0=0)
get(self, dataType, **kwargs)
get(self, dataType, **kwargs)
std::shared_ptr< SkyWcs > makeSkyWcs(daf::base::PropertySet &metadata, bool strip=false)
Construct a SkyWcs from FITS keywords.
Eigen::Matrix2d makeCdMatrix(lsst::geom::Angle const &scale, lsst::geom::Angle const &orientation=0 *lsst::geom::degrees, bool flipX=false)
Make a WCS CD matrix.
MaskedImage< ImagePixelT, MaskPixelT, VariancePixelT > * makeMaskedImage(typename std::shared_ptr< Image< ImagePixelT > > image, typename std::shared_ptr< Mask< MaskPixelT > > mask=Mask< MaskPixelT >(), typename std::shared_ptr< Image< VariancePixelT > > variance=Image< VariancePixelT >())
A function to return a MaskedImage of the correct type (cf.
std::shared_ptr< Exposure< ImagePixelT, MaskPixelT, VariancePixelT > > makeExposure(MaskedImage< ImagePixelT, MaskPixelT, VariancePixelT > &mimage, std::shared_ptr< geom::SkyWcs const > wcs=std::shared_ptr< geom::SkyWcs const >())
A function to return an Exposure of the correct type (cf.