Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

    • cp_pipe (generates calibration products): https://github.com/lsst/cp_pipe
    • ip_isr (applies calibration products): https://github.com/lsst/ip_isr
      • "Inputs to primary method of IsrTask, run(), are a raw exposure to be corrected and the calibration data products. The raw input is a single chip sized mosaic of all amps including overscans and other non-science pixels."
        •  (from 'run()' in isrTask.py)  ccdExposure, bias, linearizer (linearizing functor), dark, flat, defects (list of defects), fringes, bfKernel, camera (camera geometry, WCS?), opticsTransmission, filterTransmission, sensorTransmission, atmosphereTransmission, crosstalkSources (dictionary, default: DECam inter-CCD)
      • Steps included, in order performed (from 'run()' in isrTask.py):
        • saturation and suspect pixel masking, overscan subtraction, crosstalk masking/correction, CCD assembly of individual amplifiers, bias subtraction, variance image construction, linearization, crosstalk masking/correction, BF correction, dark subtraction, fringe correction, stray light subtraction, flat correction, masking of known effects and camera-specific features, vignette calculation, appending transmission curve and distortion model
  • Lists of effects made by different people: 

...

IDNameWhere is it listed?Requirement

LSST Stack Code

(ip_isr/python/lsst/ip/isr/)

eotest code

(eotest/python/lsst/eotest/sensor/)

Comments
1Bias frames: 2D, row by row2,4None. Other effects rely on removal of the electronic bias offset per segment (LCA-10301).
  • isrTask.py
    • Calls "biasCorrection", implemented in isrFunctions.py: subtracts a given biasMaskedImage from the image to correct.
  • image_utils.py: there's the function in there called "bias_image()" which calls the function "bias_func()". The latter computes the bias by fitting a polynomial (def=linear) to the mean of each row of the selected overscan region.


Bias offset is removed by computing a row by row correction using the data in the overscan columns.

For each row in the segment, the mean value of the pixels in the serial overscan is computed. A cubic fit is then created for the function: overscan mean vs. row number. For each row of pixels in the image, a bias offset correction is calculated using the fit parameters. That value is then subtracted from that row in the segment (LCA-10301)

Master bias frame. Bias drift , 2-d Bias frame structure due to serial clock rail droop and other effects: temporal stability not known
2Dark current4CCD-014:

Dark current (95th percentile) shall not exceed 0.2 electrons per pixel per second. Measurement to be made at a detector temperature of -95±1° C with dark current integration time of no less than 500 seconds. (LCA-128)

  • isrTask.py
    • darkCorrection
  • darkCurrentTask.py (compute 95th percentile dark current in units of e-/sec/pixel)


Dark current is measured by calculating the amount of charge collected in each pixel during a dark current integration of a given duration. In order to eliminate the effects of charge generated by cosmic ray impacts, the 5 images in each of the data set are medianed together to create clean dark current images. These images are then bias-offset corrected. Multiplication by the system gain constant (e-/DN), and division by the integration time (seconds) provides a measure of the dark current per pixel in electrons per second. These pixel values are then sorted and the 95th percentile value is calculated (LCA-10103)


Dark integrations are images acquired after the CCD has been cleared of charge and then dark current signal has been allowed to integrate as signal for a specified time in the absence of any photon flux.

3Bad pixel mask. More generally, "Active imaging area and Cosmetic Quality"

CCD-012: Active imaging area and Cosmetic Quality: the active imaging area shall contain no fewer than 16,129,000 pixels. The active imaging area excludes the 9 pixels closest to any edge of the device. The active imaging area definition also excludes any pixel within 5 rows of any midline anti- bloom stop.

Within this active imaging area a maximum of 0.5% of the pixels can be designated as defective. Defective pixels are defined as the following:

(a) any pixel with more than 5e-/s of dark current;
(b) any pixel with 500nm photoresponse less than 80% of the mean;
(c) any pixel in any column in which more than 20 contiguous pixels have more than 5e-/s of dark current;
(d) any pixel in any column in which more than 100 contiguous pixels have a 500nm photoresponse less than 80% of the mean;
(e) any pixel in any column in which a pixel traps more than 200 electrons;

Any defective columns (according to defective pixel definitions d-e above) shall be separated by at least 10 columns. (LCA-128)

isrTask.py
  • MaskedCCD.py:

Class to handle masks for a full sensor. You can add mask planes, they will be combined with an "||" ("OR"), and you can get bits to be used with an afwMath.makeStatistics object.

Note: The current "main" currently uses the following files:

mask_files = ('bright_pix_mask.fits', 'CCD250_DEFECTS_mask.fits')

  • BrightPixels.py

Bright pixel defects and bright column defects are detected using dark integration images.

Find bright pixels and bright columns above a threshold specified in units of e- per second per pixel.

The mask that is generated will be identified as mask_plane.

  • DarkPixels.py

    Find dark pixels and dark columns above a threshold specified in units of e- per second per pixel.

The mask that is generated will be identified as mask_plane.


  • trapTask.py
    Task to find traps from pocket-pumped exposure
    Calls "Traps.py": uses a pocket-pumpet image, lists traps (x,y,size) per amplifier. Has method to write results to a FITS binary table. "Traps.py", in turn, uses the class defined in "TrapFinder.py", uses method in Kotov+14




Includes: bright pixels in dark frames, dark pixels in flat frames, death pixels...


Ask Jim:column defects (9.95 of LCA-10301): are they found by BrightPixels.py and DarkPixels.py? (that's probably the case)


4Full Well

CCD-008: Blooming Full well. Pixel charge capacity shall be no greater than 175,000 electrons. Note: Defined as the point at which the detector response (volts out divided by mean per pixel integrated photo-generated charge) saturates when illuminated by a flat field (LCA-128)


  • ptc_full_well.py

Compute full well. Fit linear and quadratic functions to data, with constraint at inferred variance at 1000 e-. Full well obtains where the maximum fractional deviation between the linear and quadratic curves is greater than some maximum value, which is 10% as specified in LCA-128.


DetectorResponse.py also has a full well calculation in "full_well()" function.

-Ask Jim about the difference.

5(Non-)Linearity

CCD-009:

Detector response (volts out divided by median per pixel integrated photo- generated charge) to flat field illumination shall be linear to within ±2% over the range of 1000 to 90,000 electrons.

The response of the CCD is the mean detected signal vs. incident flux. (LCA-128)

isrTask.py (apply Function or LUT)
  • linearityTask.py, uses DetectorResponse.py (general class to compute detector response charcateristics such as full well and linearity from pairs of flats).

Compute detector response vs incident flux for pairs of flats.




6Analog overshoot in signal chain




7Missing codes in A/D converter output= ADC distortion




8Gain: drift over time and temperature




9Gain: variation between amplifiers


  • Fe55GainFitter.py (fit Fe55 signal distribution to obtain the system gain. Two Gaussian model of Mn K-alpha and K-beta lines for Fe55 tests. The ratio of peak locations is fixed at the line energy ratio, and the line widths are assumed to be the same/
CS, ISR listing.
10Parallel CTE
>0.999997
  • cteTask.py: calls EPERTask() in eperTask.py

CTI is calculated by EPER in overscan using 500 nm superflat (see LCA-10103 9.5.3 for formula).


11Serial CTE
>0.999995
  • cteTask.py: calls EPERTask() in eperTask.py

CTI is calculated by EPER in overscan using 500 nm superflat (see LCA-10103 9.4.3 for formula).


12CTE-like/trapping issues



Is this the same as "time-constant effect correction (often called CTE but it isn't) from (2)?
13Bleeding




14QE (ugrizY)

Quantum efficiency in the various LSST filter pass-bands is defined in 6 separate specifications. They are as follows. See LCA-128 for precise definitions of pass-bands and measurement wavelengths:

  • CCD-021: u Band QE. u Band QE shall exceed 41%. u band defined as 321nm to 391nm FWHM
  • CCD-022: g Band QE. g Band QE shall exceed 78%. g band defined as 402nm to 552nm FWHM
  • CCD-023: r Band QE. r Band QE shall exceed 83%. r band defined as 552nm to 691nm FWHM
  • CCD-024: i Band QE. i Band QE shall exceed 82%. i band defined as 691nm to 818nm FWHM
  • CCD-025: z Band QE. z Band QE shall exceed 75%. z band defined as 818nm to 922nm FWHM
  • CCD-026: y Band QE. y Band QE shall exceed 14.4%. y band defined as 930nm to 1070nm FWHM

  • qeTask.py: Compute QE curves from the wavelength scan dataset. Uses method "calculate_QE" in class "QE_data", defined in QE.py.

15Voltage Testing And Optimization



Optimal parameter space of voltages and clocks
16Cross talk

Output-to-output crosstalk shall not exceed 0.19% with a goal of 0.02% (CCD-013, LCA-128)

isrTask.py (correction)
  • crosstalkTask.py (matrix calculation from a set of spot image files), calls crosstalk.py, which contains "system_crosstalk" (aggressor amp has single illuminated column) and "detector_crosstalk" (detector crosstalk from a spot image in aggressor) functions.

"to be measured with a point or line source exposing the sensor to a peak signal of greater than 80,000 electrons of integrated photo-generated charge per exposed pixel in one segment (aggressor), other segments (victims) dark. Measurement to be made at a detector temperature of -95±1° C" LCA-10103. Need to measure system crosstalk (with no CCD, pulse generator creates a column as aggressor) and total crosstalk to get detector crosstalk = total crosstalk - system crosstalk.

17PRNU: Pixel Response Non-uniformity (LCA-10301) or Photoresponse non-uniformity (LCA-128)LCA-10301

CCD-027: PRNU. The measured variation in photoresponse at wavelengths of 350 nm, 450 nm, 500 nm, 620 nm, 750 nm, 870 nm, and 1000 nm shall be less than 5% rms across the CCD. (LCA-128)


  • prnuTask.py , uses class defined in prnu.py

18Overscan Levels

isrTask.py
CCD Assembly: "trims out nonphysical pixels"
19Tearing→rabbit ears; persistence


  • persistenceTask.py: Compute the deferred charge as a function of time in darks taken after a saturated flat has been taken.

Q: Are persistence and tearing the same thing?

e2V, Claire talked about T&RE during ISPA2018. Tearing/rabbit ears can be fixed by clocking things in a particular way. For DECam devices, persistence is fixed via the ERASE mechanism which operates the CCD in inversion for less than a second. Known as "skyline" in LBNL CCDS (according to Juan Estrada).

20





21"Misc. video-chain badness"




22Dipoles



ITL
23PSF/surface brightness response




24PSF distortion with different cases of angular correlation(2)



25Diffusion contribution to PSFLCA-10301

CCD-028: Point Spread Function. The PSF due to charge diffusion shall not exceed 5 μm rms. Note: The PSF measurement is via analysis of Fe55 x-ray generated charge packets. Algorithm for analysis shall be provided by LSST


The PSF due to charge diffusion is measured using the Fe55 data set


  • fe55_psf.py: Fit 2D gaussian to Fe55 footprints to determine the Gaussian width of the charge dispersed signals. For each footprint, also compute the probability of the chi-square fit.
    Distribution of dispersion parameters is fit with model in Kotov+12.



26Amplifier Glow




27Read Noise (incl. correlations)




28Fringing

isrTask.py

29Tree rings

None
lateral field effect (static). Should be part of astrometric model per filter (calibrate.py). Profiles can determined as in Plazas+14; applied as in Bernstein+17. NOTE: Plazas+14 determine radial profiles from flats, and then integrate them to get astrometric profiles. The tree rings centers were identified by hand in all the 62 science CCDs. Should the same be done for LSST?
30Brighter-fatter

isrTask.py; cp_pipe, makeBrighterFatterKernel.py
lateral field effect (dynamic), Antilogus and Coulton corrections.
31Edge distortions

None
lateral field effect (static). Should be part of astrometric model per filter (calibrate.py). DECam masks 30 pixels from the edge of each CCD, then measures the profiles directly with star flats.
32Lateral field effects- micro-WCS distortions



same as pixel size variations?
33Midline




34Spider Legs




35Bamboo




36Flat fields

isrTask.py

37Filter Transmission




38Atmospheric Correction




39Ghost and ghouls (?)




40ADU Favoritism



Acquisition related issues (ARI), SAWG
41Pixel-to-pixel memory effect



Acquisition related issues (ARI), SAWG
42Jitter and jitter cleaner



Acquisition related issues (ARI), SAWG
43Misplaced pixels/ empty pixels



Acquisition related issues (ARI), SAWG
44





45





46





47





48





49