233 self.
bfKernel = np.array([[4.83499829e-01, 8.10171823e-01, 5.31096720e-01,
234 3.54369868e-02, -8.44782871e-01, -1.64614462e+00,
235 -3.83933101e+00, -5.60243416e+00, -6.51691578e+00,
236 -5.60243416e+00, -3.83933101e+00, -1.64614462e+00,
237 -8.44782871e-01, 3.54369868e-02, 5.31096720e-01,
238 8.10171823e-01, 4.83499829e-01],
239 [1.12382749e+00, 2.22609074e+00, 1.27877807e+00,
240 4.55434098e-01, -1.76842385e+00, -1.90046460e+00,
241 -8.10874526e+00, -1.20534899e+01, -1.48627948e+01,
242 -1.20534899e+01, -8.10874526e+00, -1.90046460e+00,
243 -1.76842385e+00, 4.55434098e-01, 1.27877807e+00,
244 2.22609074e+00, 1.12382749e+00],
245 [1.78571940e+00, 4.38918110e+00, 3.95098587e+00,
246 3.70961649e-01, -3.48151981e+00, -9.61567736e+00,
247 -1.78621172e+01, -2.32278872e+01, -2.31833727e+01,
248 -2.32278872e+01, -1.78621172e+01, -9.61567736e+00,
249 -3.48151981e+00, 3.70961649e-01, 3.95098587e+00,
250 4.38918110e+00, 1.78571940e+00],
251 [1.62986900e+00, 3.67851228e+00, 5.68645252e+00,
252 2.15342566e-01, -8.89937202e+00, -1.44739813e+01,
253 -2.98952660e+01, -4.37420817e+01, -4.83160958e+01,
254 -4.37420817e+01, -2.98952660e+01, -1.44739813e+01,
255 -8.89937202e+00, 2.15342566e-01, 5.68645252e+00,
256 3.67851228e+00, 1.62986900e+00],
257 [1.05524430e+00, 1.71917897e+00, 1.73105590e+00,
258 -2.10088420e+00, -1.15118208e+01, -2.55007598e+01,
259 -4.73056159e+01, -6.97257685e+01, -8.09264433e+01,
260 -6.97257685e+01, -4.73056159e+01, -2.55007598e+01,
261 -1.15118208e+01, -2.10088420e+00, 1.73105590e+00,
262 1.71917897e+00, 1.05524430e+00],
263 [8.71929228e-01, 5.41025574e-01, 9.47560771e-01,
264 -5.75314708e-01, -7.46104027e+00, -4.42314481e+01,
265 -9.54126971e+01, -1.61603201e+02, -2.07520692e+02,
266 -1.61603201e+02, -9.54126971e+01, -4.42314481e+01,
267 -7.46104027e+00, -5.75314708e-01, 9.47560771e-01,
268 5.41025574e-01, 8.71929228e-01],
269 [1.89144704e+00, 3.57543979e+00, -6.91419168e-02,
270 -3.37950835e+00, -1.46695089e+01, -7.22850746e+01,
271 -1.65563055e+02, -3.10820425e+02, -4.70026655e+02,
272 -3.10820425e+02, -1.65563055e+02, -7.22850746e+01,
273 -1.46695089e+01, -3.37950835e+00, -6.91419168e-02,
274 3.57543979e+00, 1.89144704e+00],
275 [3.11841913e+00, 7.84024994e+00, 1.88495248e+00,
276 -7.69011009e+00, -2.71782400e+01, -1.04343326e+02,
277 -2.47561370e+02, -5.32959841e+02, -1.16529012e+03,
278 -5.32959841e+02, -2.47561370e+02, -1.04343326e+02,
279 -2.71782400e+01, -7.69011009e+00, 1.88495248e+00,
280 7.84024994e+00, 3.11841913e+00],
281 [2.74197956e+00, 4.73107997e+00, -9.48352966e-01,
282 -9.44822832e+00, -3.06477671e+01, -1.26788739e+02,
283 -3.22828411e+02, -8.47943472e+02, -3.87702420e+03,
284 -8.47943472e+02, -3.22828411e+02, -1.26788739e+02,
285 -3.06477671e+01, -9.44822832e+00, -9.48352966e-01,
286 4.73107997e+00, 2.74197956e+00],
287 [3.11841913e+00, 7.84024994e+00, 1.88495248e+00,
288 -7.69011009e+00, -2.71782400e+01, -1.04343326e+02,
289 -2.47561370e+02, -5.32959841e+02, -1.16529012e+03,
290 -5.32959841e+02, -2.47561370e+02, -1.04343326e+02,
291 -2.71782400e+01, -7.69011009e+00, 1.88495248e+00,
292 7.84024994e+00, 3.11841913e+00],
293 [1.89144704e+00, 3.57543979e+00, -6.91419168e-02,
294 -3.37950835e+00, -1.46695089e+01, -7.22850746e+01,
295 -1.65563055e+02, -3.10820425e+02, -4.70026655e+02,
296 -3.10820425e+02, -1.65563055e+02, -7.22850746e+01,
297 -1.46695089e+01, -3.37950835e+00, -6.91419168e-02,
298 3.57543979e+00, 1.89144704e+00],
299 [8.71929228e-01, 5.41025574e-01, 9.47560771e-01,
300 -5.75314708e-01, -7.46104027e+00, -4.42314481e+01,
301 -9.54126971e+01, -1.61603201e+02, -2.07520692e+02,
302 -1.61603201e+02, -9.54126971e+01, -4.42314481e+01,
303 -7.46104027e+00, -5.75314708e-01, 9.47560771e-01,
304 5.41025574e-01, 8.71929228e-01],
305 [1.05524430e+00, 1.71917897e+00, 1.73105590e+00,
306 -2.10088420e+00, -1.15118208e+01, -2.55007598e+01,
307 -4.73056159e+01, -6.97257685e+01, -8.09264433e+01,
308 -6.97257685e+01, -4.73056159e+01, -2.55007598e+01,
309 -1.15118208e+01, -2.10088420e+00, 1.73105590e+00,
310 1.71917897e+00, 1.05524430e+00],
311 [1.62986900e+00, 3.67851228e+00, 5.68645252e+00,
312 2.15342566e-01, -8.89937202e+00, -1.44739813e+01,
313 -2.98952660e+01, -4.37420817e+01, -4.83160958e+01,
314 -4.37420817e+01, -2.98952660e+01, -1.44739813e+01,
315 -8.89937202e+00, 2.15342566e-01, 5.68645252e+00,
316 3.67851228e+00, 1.62986900e+00],
317 [1.78571940e+00, 4.38918110e+00, 3.95098587e+00,
318 3.70961649e-01, -3.48151981e+00, -9.61567736e+00,
319 -1.78621172e+01, -2.32278872e+01, -2.31833727e+01,
320 -2.32278872e+01, -1.78621172e+01, -9.61567736e+00,
321 -3.48151981e+00, 3.70961649e-01, 3.95098587e+00,
322 4.38918110e+00, 1.78571940e+00],
323 [1.12382749e+00, 2.22609074e+00, 1.27877807e+00,
324 4.55434098e-01, -1.76842385e+00, -1.90046460e+00,
325 -8.10874526e+00, -1.20534899e+01, -1.48627948e+01,
326 -1.20534899e+01, -8.10874526e+00, -1.90046460e+00,
327 -1.76842385e+00, 4.55434098e-01, 1.27877807e+00,
328 2.22609074e+00, 1.12382749e+00],
329 [4.83499829e-01, 8.10171823e-01, 5.31096720e-01,
330 3.54369868e-02, -8.44782871e-01, -1.64614462+00,
331 -3.83933101e+00, -5.60243416e+00, -6.51691578e+00,
332 -5.60243416e+00, -3.83933101e+00, -1.64614462e+00,
333 -8.44782871e-01, 3.54369868e-02, 5.31096720e-01,
334 8.10171823e-01, 4.83499829e-01]]) * 1e-10
335 self.
aN = np.array([[-9.672222587932733e-07,
336 -1.854684055704316e-07,
337 -6.907109379361769e-08,
338 -3.434510010399494e-08,
339 -1.9612893321972894e-08,
340 -1.2070595598419123e-08,
341 -7.76166581456265e-09,
342 -5.1290591302737845e-09],
343 [-1.6934304508907508e-07,
344 -1.1294085770257732e-07,
345 -5.556904377844212e-08,
346 -3.0404816410630946e-08,
347 -1.8115835808147195e-08,
348 -1.1400565570822897e-08,
349 -7.428030253054874e-09,
350 -4.950482905137934e-09],
351 [-2.642765928047855e-08,
352 -4.2973020270862075e-08,
353 -3.288284786525552e-08,
354 -2.2008013659494064e-08,
355 -1.4526432244373923e-08,
356 -9.685865982318977e-09,
357 -6.540042976345181e-09,
358 -4.463016792299867e-09],
359 [-7.890607506673887e-09,
360 -1.7268817838939093e-08,
361 -1.7571215335862644e-08,
362 -1.4190808979745564e-08,
363 -1.0525091813951477e-08,
364 -7.557427069020145e-09,
365 -5.3601997909453895e-09,
366 -3.785262753932024e-09],
367 [-3.19819383283163e-09,
368 -7.907188860704256e-09,
369 -9.431108045148581e-09,
370 -8.734433800366836e-09,
371 -7.177446016048238e-09,
372 -5.548891364163135e-09,
373 -4.151829718274712e-09,
374 -3.050079142680274e-09],
375 [-1.5264788341295506e-09,
376 -4.007588259092475e-09,
377 -5.237227746197923e-09,
378 -5.325369481025145e-09,
379 -4.74494467703471e-09,
380 -3.915820474757527e-09,
381 -3.084461007593805e-09,
382 -2.3593738079733816e-09],
383 [-8.028826757431073e-10,
384 -2.1802562891610477e-09,
385 -3.013496348411789e-09,
386 -3.2665536558956744e-09,
387 -3.0954503870565042e-09,
388 -2.6975377326297753e-09,
389 -2.225243828554418e-09,
390 -1.7689041096437489e-09],
391 [-4.494359608433485e-10,
392 -1.2463111600402407e-09,
393 -1.7870048664861338e-09,
394 -2.0261729415646362e-09,
395 -2.0119440116912244e-09,
396 -1.8328866609412017e-09,
397 -1.5737323964832772e-09,
398 -1.2957141987086006e-09]])
400 self.
aE = np.array([[-6.777496868082258e-07,
401 -1.8380876162409285e-07,
402 -2.8018297221057767e-08,
403 -8.125248034789441e-09,
404 -3.2554136393266677e-09,
405 -1.5453475805766551e-09,
406 -8.104328349953093e-10,
407 -4.5288455522821904e-10],
408 [-1.6775243392445585e-07,
409 -1.0841387428867281e-07,
410 -4.332756930914473e-08,
411 -1.7516443134733466e-08,
412 -8.003213920226987e-09,
413 -4.046641342303334e-09,
414 -2.1977447699714067e-09,
415 -1.254855626337421e-09],
416 [-6.621450619914244e-08,
417 -5.399929099596603e-08,
418 -3.2620205287142746e-08,
419 -1.7612638233905413e-08,
420 -9.483506120439713e-09,
421 -5.269116790156857e-09,
422 -3.0311506399280317e-09,
423 -1.796806758939136e-09],
424 [-3.355107919271619e-08,
425 -2.983376538822224e-08,
426 -2.17864147917854e-08,
427 -1.4148255610378522e-08,
428 -8.742901288356405e-09,
429 -5.3404306089421096e-09,
430 -3.2783561039512352e-09,
431 -2.0341064582331245e-09],
432 [-1.93141015569346e-08,
433 -1.7872788139275774e-08,
434 -1.4392557125221263e-08,
435 -1.047378455931124e-08,
436 -7.165833862418497e-09,
437 -4.7471363350194744e-09,
438 -3.1007044557148345e-09,
439 -2.016814227704664e-09],
440 [-1.1934920937896483e-08,
441 -1.1282718164497807e-08,
442 -9.6076688011492e-09,
443 -7.516823026913443e-09,
444 -5.532490546520142e-09,
445 -3.911518551225112e-09,
446 -2.6981370339016726e-09,
447 -1.834970550556636e-09],
448 [-7.691827379621282e-09,
449 -7.364973173518246e-09,
450 -6.493299542676226e-09,
451 -5.331291165499783e-09,
452 -4.136757781512933e-09,
453 -3.077998169355289e-09,
454 -2.2233267681078023e-09,
455 -1.5738811344420306e-09],
456 [-5.089815731398664e-09,
457 -4.914168227172165e-09,
458 -4.434118887867189e-09,
459 -3.765280711029128e-09,
460 -3.0379496001714635e-09,
461 -2.3529138563027853e-09,
462 -1.76598680955912e-09,
463 -1.2947658524603495e-09]])
471 129.0, 151.9, 179.4, 211.9, 250.5, 296.2, 350.0,
472 413.5, 488.0, 576.0, 680.4, 753.0, 888.2, 1040.5,
473 1254.1, 1478.9, 1747.0, 2055.7, 2416.9, 2855.2,
474 3361.9, 3969.4, 4665.9, 5405.3, 6380.0, 7516.7,
475 8875.9, 10488.6, 12681.9, 14974.2, 17257.6, 20366.5,
476 24026.7, 28372.1, 33451.7, 39550.4, 46624.8, 55042.9,
477 64862.7, 76503.1, 90265.6, 106384.2, 0.0, 0.0, 0.0,
478 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1,
479 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.1, 0.0,
480 0.1, 0.2, 0.6, 0.1, 0.0, 0.1, 0.0, 0.6, 0.3, 0.5, 0.8,
481 0.8, 1.5, 2.0, 1.8, 2.4, 2.6, 3.7, 5.0, 6.4, 8.4, 10.9,
492 'driftScale': {
'C:0,0': 0.000127,
500 'decayTime': {
'C:0,0': 2.30,
508 'globalCti': {
'C:0,0': 5.25e-07,
516 'signals': {
'C:0,0': np.linspace(1.0e2, 1.0e5, 10),
517 'C:0,1': np.linspace(1.0e2, 1.0e5, 10),
518 'C:0,2': np.linspace(1.0e2, 1.0e5, 10),
519 'C:0,3': np.linspace(1.0e2, 1.0e5, 10),
520 'C:1,0': np.linspace(1.0e2, 1.0e5, 10),
521 'C:1,1': np.linspace(1.0e2, 1.0e5, 10),
522 'C:1,2': np.linspace(1.0e2, 1.0e5, 10),
523 'C:1,3': np.linspace(1.0e2, 1.0e5, 10)},
524 'serialEper': {
'C:0,0': np.full(10, 5.25e-07),
525 'C:0,1': np.full(10, 5.38e-07),
526 'C:0,2': np.full(10, 5.80e-07),
527 'C:0,3': np.full(10, 5.91e-07),
528 'C:1,0': np.full(10, 6.24e-07),
529 'C:1,1': np.full(10, 5.72e-07),
530 'C:1,2': np.full(10, 5.60e-07),
531 'C:1,3': np.full(10, 4.40e-07)},
532 'parallelEper': {
'C:0,0': np.full(10, 5.25e-07),
533 'C:0,1': np.full(10, 5.38e-07),
534 'C:0,2': np.full(10, 5.80e-07),
535 'C:0,3': np.full(10, 5.91e-07),
536 'C:1,0': np.full(10, 6.24e-07),
537 'C:1,1': np.full(10, 5.72e-07),
538 'C:1,2': np.full(10, 5.60e-07),
539 'C:1,3': np.full(10, 4.40e-07)},
540 'serialCtiTurnoff': {
'C:0,0': 1.0e5,
548 'parallelCtiTurnoff': {
'C:0,0': 1.0e5,
556 'serialCtiTurnoffSamplingErr': {
'C:0,0': 1.0e3,
564 'parallelCtiTurnoffSamplingErr': {
'C:0,0': 1.0e3,
572 'serialTraps': {
'C:0,0': {
'size': 20000.0,
575 'trap_type':
'spline',
577 'C:0,1': {
'size': 20000.0,
580 'trap_type':
'spline',
582 'C:0,2': {
'size': 20000.0,
585 'trap_type':
'spline',
587 'C:0,3': {
'size': 20000.0,
590 'trap_type':
'spline',
592 'C:1,0': {
'size': 20000.0,
595 'trap_type':
'spline',
597 'C:1,1': {
'size': 20000.0,
600 'trap_type':
'spline',
602 'C:1,2': {
'size': 20000.0,
605 'trap_type':
'spline',
607 'C:1,3': {
'size': 20000.0,
610 'trap_type':
'spline',
617 self.makeSubtask(
"assembleCcd")
646 """Generate a simulated ISR LSST image.
650 exposure : `lsst.afw.image.Exposure` or `dict`
651 Simulated ISR image data.
655 This method constructs a "raw" data image.
661 rngSky = np.random.RandomState(seed=self.config.rngSeed + 1)
662 rngDark = np.random.RandomState(seed=self.config.rngSeed + 2)
663 rng2DBias = np.random.RandomState(seed=self.config.rngSeed + 3)
664 rngOverscan = np.random.RandomState(seed=self.config.rngSeed + 4)
665 rngReadNoise = np.random.RandomState(seed=self.config.rngSeed + 5)
666 rngBrighterFatter = galsim.BaseDeviate(self.config.rngSeed + 6)
669 if self.config.doAddHighSignalNonlinearity:
675 for idx, amp
in enumerate(exposure.getDetector()):
678 if self.config.isTrimmed:
682 bbox = amp.getRawDataBBox()
683 bboxFull = amp.getRawBBox()
686 ampImageData = exposure.image[bbox]
688 ampFullData = exposure.image[bboxFull]
694 if self.config.doAddSky:
698 self.config.skyLevel,
699 np.sqrt(self.config.skyLevel),
703 if self.config.doAddSource:
704 for sourceAmp, sourceFlux, sourceX, sourceY
in zip(self.config.sourceAmp,
705 self.config.sourceFlux,
707 self.config.sourceY):
712 if self.config.doAddFringe:
716 np.array(self.config.fringeScale),
717 x0=np.array(self.config.fringeX0),
718 y0=np.array(self.config.fringeY0))
720 if self.config.doAddFlat:
721 if self.config.calibMode:
726 u0 = exposure.getDetector().getBBox().getDimensions().getX()/2.
727 v0 = exposure.getDetector().getBBox().getDimensions().getY()/2.
733 if self.config.doAddBrightDefects:
736 for defect
in defectList:
737 exposure.image[defect.getBBox()] = self.config.brightDefectLevel
739 for idx, amp
in enumerate(exposure.getDetector()):
742 if self.config.isTrimmed:
746 bbox = amp.getRawDataBBox()
747 bboxFull = amp.getRawBBox()
750 ampImageData = exposure.image[bbox]
752 ampFullData = exposure.image[bboxFull]
755 if self.config.doAddDark
or self.config.doAddDarkNoiseOnly:
756 if self.config.doAddDarkNoiseOnly:
759 darkLevel = self.config.darkRate * self.config.darkTime
760 if self.config.calibMode:
763 darkNoise = np.sqrt(self.config.darkRate * self.config.darkTime)
768 if self.config.doAddBrighterFatter
is True:
772 self.config.bfStrength,
777 if self.config.doAddDeferredCharge:
782 if self.config.doAdd2DBias:
789 self.config.noise2DBias,
797 if self.config.doAddClockInjectedOffset:
800 self.config.clockInjectedOffsetLevel,
806 if (self.config.doAddParallelOverscanRamp
or self.config.doAddSerialOverscanRamp)
and \
807 not self.config.isTrimmed:
809 if self.config.doAddParallelOverscanRamp:
812 1.0 * self.config.overscanScale)
814 if self.config.doAddSerialOverscanRamp:
817 1.0 * self.config.overscanScale)
821 if self.config.doAddHighSignalNonlinearity:
823 if linearizer.linearityType[amp.getName()] !=
"Spline":
824 raise RuntimeError(
"IsrMockLSST only supports spline non-linearity.")
826 coeffs = linearizer.linearityCoeffs[amp.getName()]
827 centers, values = np.split(coeffs, 2)
831 values[centers < self.config.highSignalNonlinearityThreshold] = 0.0
834 centers *= self.config.gainDict[amp.getName()]
835 values *= self.config.gainDict[amp.getName()]
844 self.config.clockInjectedOffsetLevel
if self.config.doAddClockInjectedOffset
else 0.0,
851 if not self.config.calibMode:
856 self.config.readNoise,
861 if not self.config.isTrimmed:
862 parallelOverscanBBox = amp.getRawParallelOverscanBBox()
863 parallelOverscanData = exposure.image[parallelOverscanBBox]
866 serialOverscanData = exposure.image[serialOverscanBBox]
871 parallelOverscanData,
873 self.config.readNoise,
879 self.config.readNoise,
884 if self.config.doAddBadParallelOverscanColumn
and not self.config.isTrimmed:
887 amp = exposure.getDetector()[2]
888 parBBox = amp.getRawParallelOverscanBBox()
893 exposure[bboxBad].image.array[:, :] += self.config.badParallelOverscanColumnLevel
895 if self.config.doAddBadParallelOverscanColumnNeighbors:
896 for neighbor
in [49, 51]:
901 exposure[bboxBad].image.array[:, :] += self.config.badParallelOverscanColumnNeighborsLevel
905 if self.config.doAddCrosstalk:
912 ctCalib.subtractCrosstalk(
915 doSubtrahendMasking=
True,
916 minPixelToMask=np.inf,
921 for amp
in exposure.getDetector():
924 if self.config.isTrimmed:
928 bbox = amp.getRawDataBBox()
929 bboxFull = amp.getRawBBox()
932 ampImageData = exposure.image[bbox]
934 ampFullData = exposure.image[bboxFull]
937 if self.config.doApplyGain:
938 gain = self.config.gainDict.get(amp.getName(), self.config.gain)
943 if self.config.doAddBias:
947 if self.config.doRoundAdu:
951 if self.config.calibMode:
952 if self.config.doApplyGain:
953 exposure.metadata[
"LSST ISR UNITS"] =
"adu"
955 exposure.metadata[
"LSST ISR UNITS"] =
"electron"
959 exposure.variance.array[:, :] = np.abs(np.median(exposure.image.array)/10.)
961 exposure.metadata[
"BSSVBS"] = 50.0
962 exposure.metadata[
"HVBIAS"] =
"ON"
964 if self.config.doGenerateAmpDict:
966 for amp
in exposure.getDetector():
967 expDict[amp.getName()] = exposure