The task xtdpi calculates a pulse invariant (PI), a value proportional to the X-ray energy, for each event in an Xtend event list by applying several pulse height corrections and a grade assignment. There are 5 major steps in this task:
1. Video board temperature and even-odd column correction 2. Charge trail correction 3. Charge transfer inefficiency (CTI) correction 4. Grade assignment and PHA summation 5. PHA to PI conversion (gain correction)
In Step 1, differences in pixel PHAS between even and odd CCD columns are corrected. Each CCD chip is associated with two circuit boards ("Applicaton Specific Integrated Circuits", or ASICs), where the raw pixel output is amplified and digitized. To speed up the signal processing, one of the ASICs reads signals transferred from the even-RAWX pixels, while the other reads those from the odd-RAWX pixels. The conversion of analog to digital signal can differ for different ASICs, and this conversion further depends on the temperature of the video board at the location of the ASIC. This step removes those differences, correcting the pixel pulse height values to be on the same scale for a given event. The video board temperature is read from the HK file specified by the parameter 'hkfile', with other parameters 'hkext', 'hkcolstem', and 'hkvideoid' specifying where in the file that information is located. The Step 1 video board temperature correction can be turned on and off with the 'vtcor' parameter, and the even-odd column correction can be turned on and off with the 'evnoddcor' parameter.
In Steps 2 and 3, the task corrects the pulse height information of individual pixels to account for charge lost during the transfer. When the detected events are transferred for readout, some amount of charge is trapped by defects in the CCD chips, which are mainly caused by radiation damage. Some of the trapped charge is released immediately after a one-pixel transfer, resulting in a "trail" into the following pixel. Long-timescale charge traps release the charge in pixels outside of the event island, effectively losing this information. Charge injection was developed as a way to mitigate CTI by periodically filling traps with rows of sacrificial charge. As a result, the CTI strongly depends on the configuration of charge injection, and the task reads that configuration information from the event file header keywords. The magnitude of both the charge trail and CTI correction depends on the pulse height of the central event pixel, and this dependence can be adjusted with the 'phcut' parameter. Step 2 can be turned on and off with the 'chtrailcor' parameter, and Step 3 with the 'cticor' parameter.
The CTI calibration for Xtend depends on the event GRADE; however this information is not calculated until Step 4. If the parameter 'ctigrade=yes', the GRADE column of the input event list is used in the CTI correction. If 'ctigrade=no', the GRADE column is ignored. The 'usegoffset' parameter controls an additional GRADE-dependent correction to the central pixel pulse-height that is implemented along with the CTI correction, although controlled separately. If 'usegoffset=yes', this additive correction is applied. If 'usegoffset=no', it is not. Proper CTI correction requires an initial run of xtdpi with 'ctigrade=no' and 'usegoffset=no' to populate the GRADE column, and then a second run of xtdpi with 'ctigrade=yes' and 'usegoffset=yes' on the output file of the first run. The parameter 'copygrade' can be used to copy the original GRADE and PHA columns to GRADE_COPY and PHA_COPY columns before they are overwritten, in order to compare results with and without grade-dependent CTI correction.
In Step 4, a GRADE is assigned to each event based on the number and position of surrounding pixels whose pulse heights exceed the split threshold. These pulse heights are recorded for individual 3x3 pixels in the PHAS column, and the hit pattern of the outer 5x5 (16 pixel) ring is also used by way of the P_OUTER_MOST column. The total event pulse height amplitude (PHA) is calculated by summing up the PHAS in the pattern. Step 4 is always performed unless 'startcol=PHA', in which case the input file GRADE value is retained and written to the output file.
In the default usage, the split threshold is energy-dependent and optimized depending on the tentative PHA value. A split threshold is optimized for each event in the following way: (1) a tentative GRADE is assigned using an initial fixed split threshold; (2) a tentative summed PHA is calculated; (3) the optimum split threshold is determined; and (4) the final GRADE assignment and PHA value are determined. There are 4 parameters related to this optimization process, 'spthiter', 'spthcaldb', 'spthoffset', and 'spthslope'. The default values of the first two parameters are both yes. In this case, the values in the last two parameters are ignored, and the split threshold optimization proceeds normally. In the case of 'spthcaldb=no', the values of 'spthoffset' and 'spthslope' are read and used for the optimization, instead of the CalDB values. If 'spthiter=no', the iteration described above is not performed and a constant split threshold from CalDB (if 'spthcaldb=yes') or 'spthoffset' (if 'spthcaldb=no') is used for the grade assignment. The 'spthslope' parameter is ignored in both cases when 'spthiter=no'.
In Step 5, PHA is converted to PI using the gain correction table. PI is directly proportional to the X-ray energy, 1 PI channel = 6 eV for Xtend. Step 5 can be turned on and off with the 'gaincor' parameter. If turned off, PHA is simply copied to PI.
Bad pixels in the surrounding 3x3 ring can alter the grade and final PI of an event, possibly causing bad (e.g. particle) events to migrate to good events, thus losing information about the true event pulse height. The 'badpixopt' parameter, along with the PHAS_MASK column (see the xtdflagpix help file), can be used to mitigate this by specifying how events with bad pixels should be graded and summed. There are three options which are listed in the parameter description below.
For debugging and calibration purposes, the corrections in Steps 1-3 and 5 can be turned on or off independently using the 'vtcor', 'evnoddcor', 'chtrailcor', 'cticor', 'usegoffset', and 'gaincor' parameters. Furthermore, the intermediate results from each correction can be included in the output by specifying 'debugcol=yes'. Any of these debugging columns or the PHAS or PHA column can then be used as the starting point for another run of xtdpi with the 'startcol' parameter. It is important to note that any corrections turned on with 'vtcor', 'evnoddcor', 'chtrailcor', 'cticor', 'usegoffset', or 'gaincor' are performed regardless of the value of 'startcol', therefore it is possible to perform the same correction twice. If 'startcol=PHA', then all corrections that are enabled are applied to the PHAS column, but the GRADE and PHA are not recalculated, and the gain correction in Step 5 is applied to the PHA column in the input file. For processing of normal science data, these features should not be used and these parameters should be kept at their default values of yes.
Different combinations of the parameters 'cticor', 'ctigrade', and 'usegoffset' are also useful for debugging and calibration. It is important to note that, although the goffest correction is related to CTI and is based on GRADE, the setting of 'ctigrade' has no impact on whether or not this correction is applied. If 'usegoffset=yes', it will be applied regardless of the 'cticor' and 'ctigrade' settings. Thus to ensure no GRADE-based corrections are applied, 'ctigrade' and 'usegoffset' must both be set to no.
This task sets the following STATUS flags if an event satisfies certain conditions, shown in the table below. See the xtdflagpix help file for a full list of STATUS flags.
=========================================================================== flag description =========================================================================== 26 (xtdpi - general) PHAS[0] < event threshold 27 (xtdpi - vtevnodd) Video temperature is out of range 28 (xtdpi - vtevnodd) Lack of video temp HK at time close to the event 29 (xtdpi - chtrail/CTI) Correction value is negative 30 (xtdpi - general) Null value by correction process ---------------------------------------------------------------------------
xtdpi infile=xa100050020xtd_p0100004b0_uf.evt outfile=xtd_out.evt hkfile=xa100050020xtd_a0.hk
xtdpi infile=xa100050020xtd_p0100004b0_uf.evt outfile=xtd_out.evt hkfile=xa100050020xtd_a0.hk cticor=no
xtdpi infile=xa100050020xtd_p0100004b0_uf.evt outfile=xtd_out.evt hkfile=xa100050020xtd_a0.hk spthiter=no spthcaldb=no spthoffset=20
xtdpi infile=xa100050020xtd_p0100004b0_uf.evt outfile=xa100050020xtd_p0100004b0_uf_debug.evt hkfile=xa100050020xtd_a0.hk debugcol=yes
xtdpi infile=xa100050020xtd_p0100004b0_uf_debug.evt outfile=xtd_xtdpi2_debug_onlychtrail.evt hkfile=xa100050020xtd_a0.hk startcol=PHAS_EVENODD \ vtcor=no evnoddcor=no chtrailcor=yes cticor=no debugcol=yes
xtdpi infile=xa100050020xtd_p0100004b0_uf.evt outfile=xtd_out_onlygain.evt hkfile=xa100050020xtd_a0.hk vtcor=no evnoddcor=no chtrailcor=no \ cticor=no debugcol=yes
June 2, 2023