| TXings Basics |
TXings is the ACIS radiation monitor, running as a patch to the ACIS flight software. There have been three versions of the TXings flight software algorithm:
Currently TXings rev C runs six tests on the threshold crossing values: three types of tests (increasing, decreasing, and very high) for two types of CCDs (FI and BI). The most frequently triggered is the FI increasing test. Particle events have a much stronger signal in the FI CCDs, because they are thicker and not fully depleted, and the TXings rate limit parameters can be set closer to the quiescent value, because bright sources are usually put on the BI CCD S3. The FI very high test has triggered once, in November 2025. The decreasing test has never triggered in flight.
All versions of TXings have selectable parameters uplinked via
writeBep commands. These WB commands are not interchangable
between versions of TXings as the number of parameters and the
memory locations have changed. Specifics about the addresses can
be found in the ECOs linked below.
The TXing algorithm computes the average threshhold crossings rate for each CCD. In order to "trigger" each average CCD rate must exceed its limit, then the average of the FI & BI CCDs are compared to the six tests. If a single CCD produces elevated TXing values but other CCDs of the same type do not, the algorithm will not trigger. This helps to prevent triggers for a bright source or an anomaly on a single CCD, but requires multiple of each type of CCD to be in use and is less helpful for gratings observations which disperse bright sources over many CCDs.
When a TXings test has "triggered" (has met all the criteria in the
parameters for a single test), the ACIS flight software bilevels are
set to a specific bit pattern that is
not seen in any other circumstance. The SW bilevels will not change
again until a stopScience command is received. When RadMon is enabled, this
happens relatively quickly. If RadMon is not enabled (as is true for
an ECS observation in the belts), the abnormal bilevels will stick around until
the end of the observation. (See A note on timing below for
more) During a normal science run, the bilevels alternate between xxxx0100
and xxxx0101 (as seen in PMON). If TXings is triggered, they will read xxxx1101 and remain that
way until the next stopScience. (If there is real-time
telemetry, PMON will also show an alert
in RED and send out alert emails.) The FSW will also dump BEP memory
relevant to TXings.
Some of the text below has been borrowed from the memos and ECOs listed in the References section at the end of this page.
TXings uses 3 memory blocks to store parameters, each as TX structures. The TX structure for rev B and rev C of TXings looks like this:
struct TX_B {
unsigned MINUTES; // averaging interval x 64 seconds
unsigned TX_MODE; // txings mode (flags to ignore CCDs, etc)
unsigned MAX_TX_PER_ROW; // max crossings per row
unsigned CC_TICKS; // ticks per frame in CC mode
unsigned TRIGGER_COUNT[6]; // number of integration steps before trigger
unsigned RATE_LIMIT[6]; // trigger thresholds/100-rows/sec
unsigned TX_INCR[6]; // trigger threshold inc/decrements
};
Some of these parameters have always kept the same values.
TX_MODE was added in rev B, to allow for malfunctioning CCDs to be removed from the TXings calculation. At present TX_MODE = 0, since all CCDs can participate.
MAX_TX_PER_ROW is intended to prevent TXings from triggering on some kind of instrument anomaly, like a FEP hardware error, and has always been set to 512.
CC_TICKS helps the algorithm to compute the exposure time for CC mode and has always been set to 291840. (The equivalent value for TE mode is apparently easily computed from internal parameters so it doesn't need to be specified). If the values of overclockPairsPerNode or outputRegisterMode in the CC mode parameter block are changed, this number would need to be updated.
The remaining parameters use optimal values. These values are
found by running the TXings algorithm over the full mission timeline
of "regions of interest" -- high radiation, bright sources, and
instrument anomalies. The optimum values produce the largest number
of real radiation triggers with no false triggers. Three of these
parameters have different values for each of the six tests
(TRIGGER_COUNT, RATE_LIMIT, and TX_INCR).
MINUTES This is the length of the integration or
binning period, measured in units of software housekeeping
interrupts. In practice, these come at intervals of between 64 and
67 seconds, depending on load. Initially rev A of TXings used
MINUTES = 5, but since WBTXING002 was
uplinked in 2012, MINTUES = 3. With this setting, each time bin on-board
is a little over 3 minutes. (This is one reason why it is
difficult to duplicate the precise flight
behavior on the ground.)
The following parameters have six values, for the six TXings
tests in order [FI ascending, BI ascending, FI descending, BI
descending, FI very high, BI very high]
TRIGGER_COUNT Number of times that a particular
test needs to be "true" before setting the ACIS bilevels to the
"triggered" value.
RATE_LIMIT TXings algorithms start to apply tests when the threshold crossing rate goes
above these values. Peter Ford's TXings plots generally only show
the first two, for the FI and BI ascending rates, which are the lowest.
TX_INCR The ascending/descending rates need to
increase/decrease by at least TX_INCR. If the
ascent/descent does not meet this criteria, the trigger accumulator
clears and restarts the count.
This TX parameter structure is saved in three memory blocks:
When we upload new optimal parameters, we update both TXinit and TXnext. To change the parameters for a single science run, like an observation of a bright source, only TXnext should be updated. The parameter update command must be sent before the startScience. In practice, putting it 4 seconds before the start of commanding for the observation is the simplest placement.
These are the current optimal parameters, found in WBTXC32020.
TXinit.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 840, 4490 }
TX_INCR = { 6, 2, 4, 6, 0, 0 }
}
The parameter uplink command for WBTXC32020 is shown here. It contains an address for the memory location to be written to and a list of 44 hex numbers. The data is just the TXings parameters shown above, translated into hex, repeated twice. This places the new parameters into both the TXinit and TXnext memory blocks.
writeBep[0] = {
commandLength = 94
commandIdentifier = 20386
commandOpcode = 192 # CMDOP_WRITE_BEP
writeAddress = 0x8003dc20
writeData = 0x00000003 0x00000000 0x00000200 0x00047400
0x00000004 0x00000006 0x00000005 0x00000006
0x00000002 0x00000006 0x00000140 0x00000014
0x0000014a 0x0000002d 0x00000348 0x0000118a
0x00000006 0x00000002 0x00000004 0x00000006
0x00000000 0x00000000 0x00000003 0x00000000
0x00000200 0x00047400 0x00000004 0x00000006
0x00000005 0x00000006 0x00000002 0x00000006
0x00000140 0x00000014 0x0000014a 0x0000002d
0x00000348 0x0000118a 0x00000006 0x00000002
0x00000004 0x00000006 0x00000000 0x00000000
}
The convention for naming TXing parameter uplink commands has
changed with each version. For the current rev C, the paradigm is:
WBTXCXXXYY
where XXX is the FI CCD ascending rate limit and YY is the BI CCD
ascending rate limit in the parameters. The naming in rev B follows the same system,
with WBTXB instead of WBTXC. For rev A, the commands were named
WBTXING001 - WBTXING005.
To see what commands already exist in the ACIS tables, you simply have to do a search of command names with the appropriate convention. For example, to list all the parameter update commands for TXing rev C in the ACIS tables:
luke-v-104: cd /data/acis/cmdgen/sacgs/docs/ luke-v-105: cat mnemonics.hdr | grep WBTXC WBTXC31015 20381 094WBTXC31015 20000 WBTXC31020 20382 094WBTXC31020 20000 WBTXC32015 20385 094WBTXC32015 20000 WBTXC32020 20386 094WBTXC32020 20000 WBTXC32025 20388 094WBTXC32025 20000 WBTXC33020 20391 094WBTXC33020 20000 WBTXC33025 20392 094WBTXC33025 20000 WBTXC34020 20395 094WBTXC34020 20000 WBTXC34025 20397 094WBTXC34025 20000 WBTXCQUIET 20379 008WBTXCQUIET 20000
The first two columns are the command name and the command sequence number (CmdID in pmon).
The associated CLD files use the ACIS command as part of the name as well.
[MacBook-Pro-9:~/acis_docs/command_load] cgrant% ls *WBTXC* 1AWBTXCQUIET_143.cld 1R_WBTXC32020.cld 1AWBTXCQUIET_143.txt 1R_WBTXC32020.txt
At the time of writing, the only TXC parameters that have been uplinked to the spacecraft are the set labelled with FI=320, BI=20.
When the ACIS FSW first starts, such as after a warmboot, the TXings parameters will be set to the default values in the patch. These default values are intentionally set to be maximally protective of ACIS. The TXings parameters should be set to the current optimal values ASAP to prevent an undesired TXings radiation trigger. All TXings parameter update commands that have been used in flight should have an associated CLD file, which can be used to update the parameters via CAP (CAP 1788 is the most recent example). For completeness, the default values in TXing rev C are:
TXinit.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 1140, 4490 }
TX_INCR = { 5, 2, 4, 6, 0, 0 }
}
As we are now in solar maximum, the current optimum parameters are not hugely different from the defaults. That will not always be the case and it should still be a priority to uplink optimal parameters after the FSW is reset.
RBTXINGCLL - dump the contents of the TX structure for rev C.
Includes parameters (TXinit, TXnext, TXblock) and the current status of counters. Appears in the
weekly command load, once per orbit, 10 minutes before XEF1000.
RBTXINGBLL - same, for rev B
RBTXINGALL - same, for rev A
RBTXCQUIET - turns off TXings monitoring for the
next science run by setting the MINUTES parameter in TXnext to 0
RBTX_QUIET - same, for rev A (the equivalent command for rev B was never built)
The RBTXING*LL command dumps the contents of the three
TX memory blocks (TXinit, TXnext, TXblock) and the current values in
the accumulation structure. If there has been a TXing driven
shutdown, the FSW will dump TXblock and the accumulation structure.
This is how you can determine which test caused the
trigger. The telemetry processing code psci will put the contents of the dump into a
"bepReadReply" file. These files can be found on emily/malang, if the
dump was during real-time contact, or in the MIT pipeline archive on
maaxnew. The ltxings tool creates a human readable version of the
dump file.
An example TXing dump file, in this case after the radiation shutdown in November 2025:
maaxnew.mit.edu% ltxings acis131.bepReadReply.7.dat.gz
TXinit.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 840, 4490 }
TX_INCR = { 6, 2, 4, 6, 0, 0 }
}
txings.tx= {
count = 280
triggered = 16
minutes = 3
ccd_rows = 1024
ccd_tx_max = 524288
ccd_ticks = 316907
increment = 0
trigger_count = { 2, 2, 0, 0, 2, 0 }
saved_rates = { 3615, 234, 0, 0, 3615, 0 }
threshold_accum = { 0, 0, 0, 3693432, 0,
0, 3921264, 488137, 3757388, 0 }
exposure_accum = { 0, 0, 0,10036288, 0,
0,10088672,20282048,10607932, 0 }
exptime = { 0, 0, 0, 313634, 0,
0, 315271, 316907, 311998, 0 }
exptime2 = 0
}
The value of "triggered" in txing.tx encodes which test caused the trigger. The possible values are:
Another example, from a standard RBTXINGCLL command:
maaxnew.mit.edu% ltxings acis131.bepReadReply.8.dat.gz
TXinit.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 840, 4490 }
TX_INCR = { 6, 2, 4, 6, 0, 0 }
}
TXnext.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 840, 4490 }
TX_INCR = { 6, 2, 4, 6, 0, 0 }
}
txings.TX= {
MINUTES = 3
TX_MODE = 0x00000000
MAX_TX_PER_ROW = 512
CC_TICKS = 291840
TRIGGER_COUNT = { 4, 6, 5, 6, 2, 6 }
RATE_LIMIT = { 320, 20, 330, 45, 840, 4490 }
TX_INCR = { 6, 2, 4, 6, 0, 0 }
}
txings.tx= {
count = 0
triggered = 0
minutes = 1
ccd_rows = 1024
ccd_tx_max = 524288
ccd_ticks = 321741
increment = 0
trigger_count = { 0, 0, 0, 0, 0, 0 }
saved_rates = { 0, 0, 0, 0, 0, 0 }
threshold_accum = { 248965, 237559, 253553, 267945, 0,
0, 234319, 19119, 0, 0 }
exposure_accum = { 12675507,12611703,12547899,12803154, 0,
0,12484095,12739311, 0, 0 }
exptime = { 325013, 323377, 321741, 328286, 0,
0, 320105, 326649, 0, 0 }
exptime2 = 0
}
Bright sources have the potential to produce false triggers in TXings tests. A full discussion is beyond the scope of this page. Mitigation can include any combination of:
MINUTES and TRIGGER_COUNT)
WBTXBBRIT1 is
an example for rev B)
WBTXCQUIET)
TXings is only active when ACIS is taking event data. Between observations there is no data for TXings to examine. After the startScience for an observation, there are two wait periods, first for the bias to complete and then for the algorithm to accumulate enough data. After that point, TXings can be considered ready to trigger.
The bias time depends on a number of factors. The value for a given parameter block can be found in the ACIS tables and counts the time between the first commanding in the SI mode and the expected time for event data to start. This bias time is only an estimate, provided to help mission planning estimate exposure times. The bias time can be found by looking up the SI mode or the pblock on acisweb.mit.edu. For example, TE_006E6B has a bias time of 1337 seconds.
The second wait is for TXings to accumulate enough data. This
depends on the values of the parameters and can be different for each
of the six tests. Each test can trigger after MINUTES x
(64 to 67 seconds) x TRIGGER_COUNT. With the current optimal
parameters, this value can be as short as ~6.5 minutes (for the FI very
high test) and as
long as 19-20 minutes (for all of the BI tests).
After TXings has met one of the trigger criteria, ACIS FSW will set the flight software bilevels to a particular set of values. The OBC checks the status bits every 64 secs (2 major frames) and needs to see the TXings status bits twice before starting to run SCS107. According to the SCS handbook, the delay between the start of SCS107 execution and the stopScience should be roughly 67 seconds.
The following Engineering Change Orders (ECO) describe the flight algorithm, in words and pseudo-code, along with reasons for the changes.
TXings revA:
ECO 1044
(Dec 16, 2011)
TXings revB:
ECO 1058
(Apr 20, 2022)
TXings revC:
ECO 1065
(Feb 3, 2025)
Reports describing how optimal parameters are chosen:
Selecting optimal parameters for the txings patch (v 1.1) (Apr 12, 2012)
Optimal
Parameters for Release B of the TXings Patch (v 1.5) (Jun 6, 2022)
Monitoring
ACIS Background Rates for the TXings Patch (v 1.0) (Sep 12, 2022)
Last updated: 17 Feb 2026 by C. Grant