XMM-Newton SAS Home Page
XMM-Newton Science Analysis System


rgsbadpix (rgsbadpix-2.20) [xmmsas_20230412_1735-21.0.0]


Algorithm

The following inequality must be satisfied for an individual pixel to be found hot. Here $N$ is the number of counts (qualifying telemetered events located there) in the pixel itself and $M$ is the number of counts in whichever of the four directly adjacent active pixels has the fewest counts. $F$ is the number of contributing frames (that is, not counting bad frames). A pixel is not considered active if it is listed as an uplinked bad pixel in the CCF. And unless inclusion of the CCF advisory bad pixels has been disabled (withadvisory=no), advisory dead pixels are also not considered active. In the exceptional case of a pixel with no directly adjacent active pixels, it is not judged to be hot regardless of its count rate.

$\displaystyle N>M+({\tt pixsharpness})\sqrt{N\left(1-\frac{N}{F}\right)+
M\left(1-\frac{M}{F}\right)}
$

Similarly, this next inequality must be satisfied for a whole column to be found hot. However, here $N$ is the average number of counts per pixel associated with $G_N$, the number of good pixels in the column. $M$ and $G_M$ are the corresponding average number of counts and number of good pixels for whichever of the two neighboring columns has the lowest average number of counts. To be considered good at this stage a pixel must be active in the above sense and not have been found to be a hot pixel. Columns with no good pixels are ignored, both as potential hot columns and as neighboring columns. If both of a column's neighbors have no good pixels, it is not judged to be hot regardless of its count rate.

$\displaystyle N>M+({\tt colsharpness})\sqrt{\frac{N}{G_N}\left(1-\frac{N}{F}\right)+
\frac{M}{G_M}\left(1-\frac{M}{F}\right)}
$

In the following schematic description of the program an asterix is used to mark items that do not apply to HTR mode data.

 Initialize the bad pixel map:
    Large enough for all valid chip coordinates plus a one pixel margin on
       all sides; this margin and any median between the nodes (in case of
       windowed telemetry) is initialized with Invalid; the rest with zero

 Initialize the calibration bad pixel list:
    Ignore advisory bad pixels unless withadvisory == true
    Ignore defective ("cool") bad columns unless keepcool == false
    Convert bad pixel node coordinates to chip coordinates
    Clip bad segments that extend above or below the window

 if withfoundhot:
    Create two histogram maps in the same dimensions as the bad pixel map,
       one for the pixel* analysis and the other for the column analysis

    Convert telemetered node coordinates to chip coordinates

    for each telemetered event in a good frame:
       Ignore and warn if any of the comprising pixels have invalid
          coordinates; otherwise test against the pixnoiselimit* and
          colnoiselimit and increment the corresponding histogram
          maps accordingly at the location of each comprising pixel

    for each calibration bad pixel:
       if uplinked || DEAD, mark in the bad pixel map

    Search the pixel analysis map* for hot pixels, creating a list of their
       coordinates and recording as statistics for each column the number
       of good pixels and associated average event count from the column
       analysis map

    if not HTR:
       Mark the found hot pixels in the bad pixel map

    Search the column statistics for hot columns, marking them in the
       bad pixel map

 for each calibration bad pixel:
    if advisory && HOT && withfoundhot, warn if not already marked as
       found in the bad pixel map
    mark and reclassify as appropriate in the bad pixel map

 Construct the merged list of bad pixel segments such that all locations
    marked bad in the bad pixel map are accounted for and all pixels in
    each segment have the same classification

 Write the BADPIXn tables

XMM-Newton SOC -- 2023-04-16