The following inequality must be satisfied for an individual pixel to be found hot. Here is the number of counts (qualifying telemetered events located there) in the pixel itself and is the number of counts in whichever of the four directly adjacent active pixels has the fewest counts. 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.
Similarly, this next inequality must be satisfied for a whole column to be found hot. However, here is the average number of counts per pixel associated with , the number of good pixels in the column. and 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.
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