Pseudo-MSIDs#
A small selection of pseudo-MSIDs that do not come in the engineering telemetry stream are also available in the archive. These are:
ACIS DEA housekeeping: status from the DEA (including detector focal plane temperature)
Ephemeris: predictive and definitive orbital (Chandra), solar, and lunar ephemeris values
SIM telemetry: SIM position and moving status
Derived parameters: values computed from other MSIDs in the archive and stored in archive files
Computed parameters: values computed on the fly from other MSIDs
ACIS DEA housekeeping#
The ACIS DEA telemeters a variety of useful information that is sent in an event-based format via queries to the processor. The cheta archive reformats those telemetry queries (one per psuedo-MSID) into records that match the cheta archive format where all queries with the same time stamp are place in a single record.
The time sample of these data vary but are typically around once per 16 seconds.
Because of what appears to be an issue with CXCDS decom there are frequently
bad values at the beginning of an archive file. For this reason it is
especially important to perform a fetch with the filter_bad=True
setting.
MSID |
Unit |
Description |
---|---|---|
tmp_bep_pcb |
K |
DPA Thermistor 1 - BEP PC Board |
tmp_bep_osc |
K |
DPA Thermistor 2 - BEP Oscillator |
tmp_fep0_mong |
K |
DPA Thermistor 3 - FEP 0 Mongoose |
tmp_fep0_pcb |
K |
DPA Thermistor 4 - FEP 0 PC Board |
tmp_fep0_actel |
K |
DPA Thermistor 5 - FEP 0 ACTEL |
tmp_fep0_ram |
K |
DPA Thermistor 6 - FEP 0 RAM |
tmp_fep0_fb |
K |
DPA Thermistor 7 - FEP 0 Frame Buf |
tmp_fep1_mong |
K |
DPA Thermistor 8 - FEP 1 Mongoose |
tmp_fep1_pcb |
K |
DPA Thermistor 9 - FEP 1 PC Board |
tmp_fep1_actel |
K |
DPA Thermistor 10 - FEP 1 ACTEL |
tmp_fep1_ram |
K |
DPA Thermistor 11 - FEP 1 RAM |
tmp_fep1_fb |
K |
DPA Thermistor 12 - FEP 1 Frame Buf |
fptemp_12 |
K |
Focal Plane Temp. Board 12 |
fptemp_11 |
K |
Focal Plane Temp. Board 11 |
dpagndref1 |
V |
DPA Ground Reference 1 |
dpa5vhka |
V |
DPA 5V Housekeeping A |
dpagndref2 |
V |
DPA Ground Reference 2 |
dpa5vhkb |
V |
DPA 5V Housekeeping B |
dea28volta |
V |
Primary Raw DEA 28V DC |
dea24volta |
V |
Primary Raw DEA 24V DC |
deam15volta |
V |
Primary Raw DEA -15.5V |
deap15volta |
V |
Primary Raw DEA +15.5V |
deam6volta |
V |
Primary Raw DEA -6V DC |
deap6volta |
V |
Primary Raw DEA +6V DC |
rad_pcb_a |
Relative Dose Rad. Monitor Side A |
|
gnd_1 |
V |
Interface Ground Reference |
dea28voltb |
V |
Backup Raw DEA 28V DC |
dea24voltb |
V |
Backup DEA 24V DC |
deam15voltb |
V |
Backup DEA -15.5V DC |
deap15voltb |
V |
Backup DEA +15.5V DC |
deam6voltb |
V |
Backup DEA -6V DC |
deap6voltb |
V |
Backup DEA +6V DC |
rad_pcb_b |
Relative Dose Rad. Monitor Side B |
|
gnd_2 |
V |
Ground |
Ephemeris#
CXC processing generates definitive and predictive ephemeris files for the Chandra, the Moon, and the Sun. Values are given with respect to Earth (ECI). Predictive values are available into the near future while definitive values will be a few weeks behind the present. (Note that daily and 5-minute statistics are only available up to the present time). These values are contained within the following content types:
Content |
Object |
Type |
---|---|---|
orbitephem0 |
Chandra |
Predictive |
lunarephem0 |
Moon |
Predictive |
solarephem0 |
Sun |
Predictive |
orbitephem1 |
Chandra |
Definitive |
lunarephem1 |
Moon |
Definitive |
solarephem1 |
Sun |
Definitive |
The psuedo-MSIDs for each of the ephemeris elements is given in the following table, where <CONTENT> is replaced by the appropriate Content value from the previous table.
MSID |
Unit |
Description |
---|---|---|
<CONTENT>_x |
m |
X position (ECI) |
<CONTENT>_y |
m |
Y position (ECI) |
<CONTENT>_z |
m |
Z position (ECI) |
<CONTENT>_vx |
m/s |
X velocity (ECI) |
<CONTENT>_vy |
m/s |
Y velocity (ECI) |
<CONTENT>_vz |
m/s |
Z velocity (ECI) |
In addition there is a set of pseudo-MSIDs that provide a number of higher-level definitive angle and distance values that are useful.
MSID |
Unit |
Description |
---|---|---|
Point_X |
Unit Pointing (X) |
|
Point_Y |
Unit Pointing (Y) |
|
Point_Z |
Unit Pointing (Z) |
|
Point_SunCentAng |
deg |
Pointing-Solar angle (from center) |
Point_SunLimbAng |
deg |
Pointing-Solar angle (from limb) |
Point_MoonCentAng |
deg |
Pointing-Lunar angle (from center) |
Point_MoonLimbAng |
deg |
Pointing-Lunar angle (from limb) |
Point_EarthCentAng |
deg |
Pointing-Earth angle (from center) |
Point_EarthLimbAng |
deg |
Pointing-Earth angle (from limb) |
Dist_SatEarth |
m |
Sat-Earth distance (from Earth center) |
Sun_EarthCentAng |
deg |
Sun-Earth angle (from center) |
Sun_EarthLimbAng |
deg |
Sun-Earth angle (from limb) |
Point_RamVectorAng |
deg |
Pointing-Ram angle |
HRC Secondary Science and Housekeeping#
The HRC telemeters a variety of useful information that is sent down in secondary science and housekeeping formats (SS and HK hereafter). The cheta archive reformats those telemetry values to be consistent with the MSFC-1949 specification of HRC SS and HK telemetry. It also facilitates handling invalid data in SS and HK telemetry.
Invalid data#
Invalid HRC SS and HK telemetry can arise in three ways:
When telemetry format changes there is commanding to change the timing signals used to fill the housekeeping and secondary science rates that can result in invalid data being put in these MSIDs for up to a major frame.
When detectors change or a detector is set to its default configuration the FIFO used to hold the housekeeping an secondary science data gets reset which may result in a single bad sample of data.
The secondary-science byte-shift anomaly causes the occasional portion of the housekeeping and sometimes the rate data to be corrupted.
In the Ska archive the presence of these conditions is tracked in a new pseudo-MSID called
HRC_SS_HK_BAD
.
The first two of these are detected by looking at “spare” bits in the MSID SCIDPREN
(i.e. good data satisfies SCIDPREN=0000xxxx000xxxxx
. The least-significant 7 bits of
HRC_SS_HK_BAD
contain a copy of the 7 bits in SCIDPREN
which must be 0 for good
data. The following code illustrates detecting conditions (1) or (2):
>>> from cheta import fetch
>>> from cxotime import CxoTime
>>> dat = fetch.Msid('HRC_SS_HK_BAD', '1999:300', '1999:310')
>>> bad = (dat.vals & 0x7f) > 0
>>> CxoTime(dat.times[bad]).date
array(['1999:301:16:10:13.375', '1999:301:16:10:15.425',
'1999:301:18:16:42.476', '1999:301:18:16:44.526',
'1999:301:19:20:03.176', '1999:301:19:20:05.226',
'1999:301:21:28:33.226', '1999:301:21:28:35.276',
'1999:303:07:13:16.230', '1999:303:07:13:18.280'],
dtype='|S21')
The third condition is detected by its impact on the MSID 2SMTRATM
. If it is less than
-20degC or greater than 50degC then the analog housekeeping from the row is
marked with bad quality. In this case the HRC_SS_HK_BAD
MSID has bit 10 set,
which can be detected by a logical-and with 0x0400
(1024).
Querying data#
For HK telemetry it is sufficient to query the archive using the standard fetch.Msid
method which automatically removes bad quality data. This applies for 5-minute and daily
stat data as well. For instance:
>>> dat = fetch.Msid('2S2ONST', '2002:200', '2002:250')
>>> dat.plot()

For SS the situation is a little different because those do not have
the bad quality flags set at the time of data ingest (because the indicators are all
in HK). In this case use the fetch.HrcSsMsid
method to get a filtered version
of the SS MSIDs (2TLEV1RT 2VLEV1RT 2SHEV1RT 2TLEV2RT 2VLEV2RT 2SHEV2RT
). For
instance to get 5-minute telemetry for 2SHEV1RT
use:
>>> dat = fetch.HrcSsMsid('2SHEV1RT', '2002:200', '2002:250', stat='5min')
>>> dat.plot()

HK MSIDs#
The list of available HK MSIDs is:
MSID |
Description |
---|---|
224PCAST |
+24V LVPS ON/OFF |
215PCAST |
+15V LVPS ON/OFF |
215NCAST |
-15V LVPS ON/OFF |
2SPTPAST |
SPECTROSCOPY DET TOP PLATE HV STEP |
2SPBPAST |
SPECTROSCOPY DET BOTTOM PLATE HV STEP |
2IMTPAST |
IMAGING DET TOP PLATE HV STEP |
2IMBPAST |
IMAGING DET BOTTOM PLATE HV STEP |
2NYMTAST |
-Y SHUTTER MOTOR SELECTED |
2PYMTAST |
+Y SHUTTER MOTOR SELECTED |
2CLMTAST |
CALSRC MOTOR SELECTED |
2DRMTAST |
DOOR MOTOR SELECTED |
2ALMTAST |
ALL MOTORS DESELECTED |
2MSMDARS |
MOTION CONTROL MODE RESET – 2MSMDARS |
2MDIRAST |
MOTOR DIRECTION |
2MSNBAMD |
MOTOR STATUS REGISTER MV NSTEPS TOWARD B |
2MSNAAMD |
MOTOR STATUS REGISTER MV NSTEPS TOWARD A |
2MSLBAMD |
MOTOR STATUS REGISTER MOVE TO LIMIT SWITCH B |
2MSLAAMD |
MOTOR STATUS REGISTER MOVE TO LIMIT SWITCH A |
2MSPRAMD |
MOTOR STATUS REGISTER MOVE TO POSITION R |
2MSDRAMD |
MOTOR DRIVE ENABLE |
2MCMDARS |
MOTION CONTROL MODE RESET – 2MCMDARS |
2MCNBAMD |
MOTOR CMD REGISTER MV NSTEPS TOWARD B |
2MCNAAMD |
MOTOR CMD REGISTER MV NSTEPS TOWARD A |
2MCLBAMD |
MOTOR CMD REGISTER MOVE TO LIMIT SWITCH B |
2MCLAAMD |
MOTOR CMD REGISTER MOVE TO LIMIT SWITCH A |
2MCPRAMD |
MOTOR COMMAND REGISTER MOVE TO POSITION REGISTER |
2MDRVAST |
MOTOR CMD REGISTER MOTOR DRIVE ENABLE |
2SCTHAST |
STEP CTR LAST VALUE |
2SMOIAST |
SELECTED MOTOR OVERCURRENT FLAG |
2SMOTAST |
SELECTED MOTOR OVERTEMPERATURE FLAG |
2DROTAST |
DRV OVERTEMP ENABLE |
2DROIAST |
DRV OVERCURRENT ENABLE |
2SFLGAST |
STOP FLAG ENABLE |
2OSLSAST |
OPEN SECONDARY LIMIT SWITCH ENABLE |
2OPLSAST |
OPEN PRIMARY LIMIT SWITCH ENABLE |
2CSLSAST |
CLOS SECONDARY LIMIT SWITCH ENABLE |
2CPLSAST |
CLOS PRIMARY LIMIT SWITCH ENABLE |
2OSLSADT |
OPEN SECONDARY LS DETECTED |
2OSLSAAC |
OPEN SECONDARY LS ACTIVE |
2OPLSAAC |
OPEN PRIMARY LS ACTIVE |
2CSLSADT |
CLOS SECONDARY LS DETECTED |
2CSLSAAC |
CLOS SECONDARY LS ACTIVE |
2CPLSAAC |
CLOS PRIMARY LS ACTIVE |
2FCPUAST |
FORCED COARSE POSITION U AXIS |
2FCPVAST |
FORCED COARSE POSITION V AXIS |
2CBHUAST |
CENTER BLANK HIGH CP U AXIS |
2CBLUAST |
CENTER BLANK LOW CP U AXIS |
2CBHVAST |
CENTER BLANK HIGH CP V AXIS |
2CBLVAST |
CENTER BLANK LOW CP V AXIS |
2WDTHAST |
WIDTH THRESHOLD SETTING |
2CLMDAST |
CALIBRATION MODE ON |
2FIFOAVR |
DATA FIFO ENABLE |
2OBNLASL |
OBSERVING/NEXT-IN-LINE MODE SELECT |
2SPMDASL |
SPECT DETECTOR SPECT/IMG MODE SELECT |
2EBLKAVR |
EDGE BLANK VALIDITY ENABLE |
2CBLKAVR |
CENTER BLANK VALIDITY ENABLE |
2ULDIAVR |
UPPER LEVEL DISCR VALIDITY ENABLE |
2WDTHAVR |
WIDTH DISCR VALIDITY ENABLE |
2SHLDAVR |
SHIELD DISCR VALIDITY ENABLE |
2SPONST |
SPECTROSCOPY DETECTOR HVPS ON/OFF |
2SPCLST |
SPECTROSCOPY DET HVPS CURRENT LIMIT ENAB |
2S1ONST |
SHIELD A HVPS ON/OFF |
2IMONST |
IMAGING DETECTOR HVPS ON/OFF |
2IMCLST |
IMAGING DET HVPS CURRENT LIMIT ENABLE |
2S2ONST |
SHIELD B HVPS ON/OFF |
2S1HVST |
SHIELD A HVPS SETTING |
2S2HVST |
SHIELD B HVPS SETTING |
2C05PALV |
+5V BUS MONITOR |
2C15PALV |
+15V BUS MONITOR |
2C15NALV |
-15V BUS MONITOR |
2C24PALV |
+24V BUS MONITOR |
2IMHVLV |
IMAGING LOWER MCP HV MONITOR |
2IMHBLV |
IMAGING LOWER & UPPER MCP HV MONITOR |
2SPHVLV |
SPECTROSCOPY LOWER MCP HV MONITOR |
2SPHBLV |
SPECTROSCOPY UPPER MCP HV MONITOR |
2S1HVLV |
SHIELD A HV MONITOR |
2S2HVLV |
SHIELD B HV MONITOR |
2PRBSCR |
PRIMARY BUS CURRENT |
2PRBSVL |
PRIMARY BUS VOLTAGE |
2ULDIALV |
UPPER LEVEL DISCRIMINATOR SETTING |
2LLDIALV |
TRIGGER LEVEL DISCRIMINATOR MONITOR |
2FEPRATM |
FE PREAMP CARD TEMPERATURE |
2CALPALV |
CAL PULSER AMPLITUDE MONITOR |
2GRDVALV |
GRID BIAS SETTING MONITOR |
2RSRFALV |
RANGE SWITCH ANALOG SETTING |
2SPINATM |
SPECTROSCOPY DETECTOR TEMPERATURE (INSIDE) |
2IMINATM |
IMAGING DETECTOR TEMPERATURE (INSIDE) |
2LVPLATM |
LVPS PLATE TEMP |
2SPHVATM |
SPECTROSCOPY DET HVPS TEMPERATURE |
2IMHVATM |
IMAGING DET HVPS TEMPERATURE |
2SMTRATM |
SELECTED MOTOR TEMPERATURE |
2FE00ATM |
FRONT END TEMPERATURE RT2 |
SS MSIDs#
The available SS MSIDs are:
MSID |
Description |
---|---|
2TLEV1RT |
TOTAL EVENT RATE 1 |
2VLEV1RT |
VALID EVENT RATE 1 |
2SHEV1RT |
SHIELD EVENT RATE 1 |
2TLEV2RT |
TOTAL EVENT RATE 2 |
2VLEV2RT |
VALID EVENT RATE 2 |
2SHEV2RT |
SHIELD EVENT RATE 2 |
Science Instrument Module#
Information about the SIM is available via the three following pseudo-MSIDs categories.
SEA standard telemetry#
The units shown below are for the CXC and ENG unit systems, respectively.
MSID |
Unit |
Description |
---|---|---|
3FAFLAAT |
K [degC] |
SEA FA flexure a temp a |
3FAFLBAT |
K [degC] |
SEA FA flexure b temp a |
3FAFLCAT |
K [degC] |
SEA FA flexure c temp a |
3FAMOVE |
SEA FA in motion flag |
|
3FAMTRAT |
K [degC] |
SEA-A focus drive motor temp |
3FAPOS |
mm [step] |
SEA FA position |
3FAPSAT |
K [degC] |
SEA-A power supply temp |
3FASEAAT |
K [degC] |
SEA-A box temp |
3LDRTMEK |
SEA mechanism for last detected reference tab |
|
3LDRTNO |
SEA tab number of reference tab last detected |
|
3LDRTPOS |
mm [step] |
SEA last detected ref tab position |
3MRMMXMV |
[step] |
SEA max pwm level most recent move |
3SEAID |
SEA identification |
|
3SEAINCM |
SEA invalid command group flag |
|
3SEARAMF |
SEA ram failure detection flag |
|
3SEAROMF |
SEA prom checksum fail flag |
|
3SEARSET |
SEA reset flag |
|
3SEATMUP |
SEA tlm update flag (toggle w/ea update) |
|
3SFLXAST |
K [degC] |
SEA flexure a temperature setpoint |
3SFLXBST |
K [degC] |
SEA flexure b temperature setpoint |
3SFLXCST |
K [degC] |
SEA flexure c temperature setpoint |
3SHTREN |
SEA heater power relay status |
|
3SMOTOC |
cnts |
SEA motor drive overcurrent counter |
3SMOTPEN |
SEA motor driver power relay status |
|
3SMOTSEL |
SEA motor selection relay status |
|
3SMOTSTL |
cnts |
SEA motor stall counter |
3SPENDC |
cnts |
SEA pending cmd count |
3STAB2EN |
SEA tab2 auto position update enab/disa status |
|
3TRMTRAT |
K [degC] |
SEA a translation drive motor temp |
3TSCMOVE |
SEA TSC in motion flag |
|
3TSCPOS |
mm [step] |
SEA TSC position |
TLMSTATUS |
SEA telemetry status (updated or not updated) |
The state codes for these MSIDs (where applicable) are defined by the CXC SIM level-0 decom specification and differ from the values found in the TDB. The cheta archive state codes are:
MSID |
Raw=0 |
Raw=1 |
---|---|---|
3TSCMOVE |
F |
T |
3FAMOVE |
F |
T |
3SEAID |
SEA-A |
SEA-B |
3SEARSET |
F |
T |
3SEAROMF |
F |
T |
3SEAINCM |
F |
T |
3STAB2EN |
DISABLE |
ENABLE |
3SMOTPEN |
ENABLE |
DISABLE |
3SMOTSEL |
TSC |
FA |
3SHTREN |
DISABLE |
ENABLE |
3SEARAMF |
F |
T |
SEA diagnostic telemetry#
MSID |
Unit |
Description |
---|---|---|
3SDSWELF |
SEA CSC Exectuting from RAM |
|
3SDPSTKP |
SEA Data Stack Ptr |
|
3SDTSEDG |
TSC Tab Edge Detection Flags |
|
3SDFAEDG |
FA Tab Edge Detection Flags |
|
3SDMAJFP |
Major Frame Period Time Measured by SEA |
|
3SDRMOVD |
Most Recent Motor Move Destination |
|
3SDTSTSV |
V |
TSC Tab Position Sensor A/D converter |
3SDFATSV |
V |
FA Tab Position Sensor A/D Converter |
3SDAGV |
V |
Analog Ground A/D Converter Reading |
3SDP15V |
V |
+15V Power Supply A/D Converter Reading |
3SDP5V |
V |
+5V Power Supply A/D Converter Reading |
3SDM15V |
V |
-15V Power Supply A/D Converter Reading |
3SDFLXAT |
K [degC] |
Flexure A Thermistor A/D Converter |
3SDFLXBT |
K [degC] |
Flexure B Thermistor A/D Converter |
3SDFLXCT |
K [degC] |
Flexure C Thermistor A/D Converter |
3SDTSMT |
K [degC] |
TSC Motor Thermistor A/D Converter |
3SDFAMT |
K [degC] |
FA Motor Thermistor A/D Converter |
3SDPST |
K [degC] |
SEA Power Supply Thermistor A/D Converter |
3SDBOXT |
SEA Box Thermistor A/D Converter |
|
3SDRMFAD |
RAM Most Recent detected Fail Address |
|
3SDTSTBW |
TSC Most Recent detected Tab Width |
|
3SDFATBW |
FA Most Recent detected Tab Width |
|
3SDSYRS |
Process Reset Due Synchronization Loss |
|
3SDWMRS |
Processor Warm Reset |
|
3SDTSP |
TSC Most Recent PWM Histogram |
|
3SDFAP |
FA Most Recent PWM Histogram |
|
3SDINCOD |
SEA Invalid CommandCode |
The state codes for these MSIDs (where applicable) are defined by the CXC SIM level-0 decom specification and differ from the values found in the TDB. The cheta archive state codes are:
MSID |
Raw=0 |
Raw=1 |
---|---|---|
3SDSWELF |
F |
T |
3SDSYRS |
F |
T |
3SDWMRS |
F |
T |
SIMCOOR (CXC high-level values)#
Note
These pseudo-MSIDs are deprecated in favor of the standard versions such as 3TSCPOS, 3FAPOS, 3TSCMOV, 3TRMTRAT, etc. which are available in the SEA telemetry described above.
MSID |
Unit |
Description |
---|---|---|
SEAIDENT |
SEA identification |
|
SIM_X |
mm |
X position (FA) |
SIM_Y |
mm |
Y position (not meaningful) |
SIM_Z |
mm |
Z position (TSC) |
SIM_X_MOVED |
FA moved |
|
SIM_Z_MOVED |
TSC moved |
EPHIN#
Information about the EPHIN instrument is available via the following pseudo-MSIDs:
MSID |
Unit |
Description |
---|---|---|
TLMBLKCNT |
EIO TLMBLK count |
|
EIOBITCNT |
EIO bit counter |
|
HKOPMODE |
HK operational Mode |
|
HKRESET |
HK reset Flag |
|
HKDOWNLOAD |
HK down load flag |
|
HKUPLOAD |
HK upload Flag |
|
HKFRAMECNTR |
HK internal frame Counter |
|
HKRINGSEGW |
HK ring segment auto switching |
|
HKFAILMODEA |
HK failure mode detector A |
|
HKFAILMODEB |
HK failure mode detector B |
|
HKHVDETG |
HK high voltage detector G |
|
HKHVDETAF |
HK high voltage detectors A-F |
|
HKANALOGPWR |
HK analog power switchs |
|
HKFAILMODEGC |
HK failure mode detectors G-C |
|
HKP5V |
V |
HK +5V rail voltage |
HKP27V |
V |
HK +27V rail voltage |
HKP6V |
V |
HK +6V rail voltage |
HKN6V |
V |
HK -6V rail voltage |
HKP5I |
mA |
HK +5V rail current |
HKP27I |
mA |
HK +27V rail current |
HKP6I |
mA |
HK +6V rail current |
HKN6I |
mA |
HK -6V rail current |
HKEBOXTEMP |
K |
HK EBox temperature (5EHSE300) |
HKABIASLEAKI |
uA |
HK A bias leakage current |
HKBBIASLEAKI |
uA |
HK B bias leakage current |
HKCBIASLEAKI |
uA |
HK C bias leakage current |
HKDBIASLEAKI |
uA |
HK D bias leakage current |
HKEBIASLEAKI |
uA |
HK E bias leakage current |
HKFBIASLEAKI |
uA |
HK F bias leakage current |
HKGHV |
V |
HK G high voltage |
SCOPMODE |
Sci operational mode |
|
SCSTATUS |
Sci status flags |
|
SCFRAMECNTR |
Sci internal Frame Counter |
|
SCCONTROL |
Sci control flags |
|
SCRINGSEGSW |
Sci ring segment auto switching |
|
SCFAILMODEA |
Sci failure mode detectors A |
|
SCFAILMODEB |
Sci failure mode detectors B |
|
SCHVDETG |
Sci high voltage detector G |
|
SCHVDETAF |
Sci high voltage detectors A-F |
|
SCANALOGPWR |
Sci analog power switches |
|
SCFAILMODEGC |
Sci failure mode detectors G-C |
|
SCPHAPRIPTR |
Sci PHA Priority pointer |
|
SCG0 |
Sci single detector counter G0 |
|
SCA00 |
Sci single detector counter A00 |
|
SCA01 |
Sci single detector counter A01 |
|
SCA02 |
Sci single detector counter A02 |
|
SCA03 |
Sci single detector counter A03 |
|
SCA04 |
Sci single detector counter A04 |
|
SCA05 |
Sci single detector counter A05 |
|
SCB00 |
Sci single detector counter B00 |
|
SCB01 |
Sci single detector counter B01 |
|
SCB02 |
Sci single detector counter B02 |
|
SCB03 |
Sci single detector counter B03 |
|
SCB04 |
Sci single detector counter B04 |
|
SCB05 |
Sci single detector counter B05 |
|
SCC0 |
Sci single detector counter C0 |
|
SCD0 |
Sci single detector counter D0 |
|
SCE0 |
Sci single detector counter E0 |
|
SCF0 |
Sci single detector counter F0 |
|
SCP4GM |
Sci single detector counter P4GM |
|
SCP4GR |
Sci single detector counter P4GR |
|
SCP4S |
Sci single detector counter P4S |
|
SCP8GM |
Sci single detector counter P8GM |
|
SCP8GR |
Sci single detector counter P8GR |
|
SCP8S |
Sci single detector counter P8S |
|
SCH4GM |
Sci single detector counter H4GM |
|
SCH4GR |
Sci single detector counter H4GR |
|
SCH4S1 |
Sci single detector counter H4S1 |
|
SCH4S23 |
Sci single detector counter H4S23 |
|
SCH8GM |
Sci single detector counter H8GM |
|
SCH8GR |
Sci single detector counter H8GR |
|
SCH8S1 |
Sci single detector counter H8S1 |
|
SCH8S23 |
Sci single detector counter H8S23 |
|
SCE150 |
Sci single detector counter E150 |
|
SCE300 |
Sci single detector counter E300 |
|
SCE1300 |
Sci single detector counter E1300 |
|
SCE3000 |
Sci single detector counter E3000 |
|
SCINT |
Sci single detector counter INT |
|
SCP25GM |
Sci single detector counter P25GM |
|
SCP25GR |
Sci single detector counter P25GR |
|
SCP25S |
Sci single detector counter P25S |
|
SCP41GM |
Sci single detector counter P41GM |
|
SCP41GR |
Sci single detector counter P41GR |
|
SCP41S |
Sci single detector counter P41S |
|
SCH25GM |
Sci single detector counter H25GM |
|
SCH25GR |
Sci single detector counter H25GR |
|
SCH25S1 |
Sci single detector counter H25S1 |
|
SCH25S23 |
Sci single detector counter H25S23 |
|
SCH41GM |
Sci single detector counter H41GM |
|
SCH41GR |
Sci single detector counter H41GR |
|
SCH41S1 |
Sci single detector counter H41S1 |
|
SCH41S23 |
Sci single detector counter H41S23 |
|
SCCT0 |
Sci single detector counter CT0 |
|
SCCT1 |
Sci single detector counter CT1 |
|
SCCT2 |
Sci single detector counter CT2 |
|
SCCT3 |
Sci single detector counter CT3 |
|
SCCT4 |
Sci single detector counter CT4 |
|
SCCT5 |
Sci single detector counter CT5 |
Derived Parameters or Calcs#
The cheta archive has pseudo-MSIDs that are derived via computation from
telemetry MSIDs. These are also known as “calcs” in the context of MAUDE (which
inherited this from GRETA). In MAUDE, a calc is normally indicated with a prefix
of CALC_
, but for compatibility with cheta a prefix of DP_
is also
allowed.
Derived parameter names begin with the characters DP_
(not case sensitive as
usual). Otherwise there is no difference from standard MSIDs. When querying
the archive using fetch
, there are three equivalent ways to specify an
MSID name:
DP_<name>>
e.g.DP_PITCH_FSS
CALC_<name>
e.g.CALC_PITCH_FSS
<name>
e.g.PITCH_FSS
: this is a convenience and internallyfetch
will search for derived parameters matchingDP_<name>
.
Available MSIDs#
To see the available derived parameters or calcs in the CXC archive or MAUDE archive, issue the following commands respectively:
>>> from cheta import fetch
>>> sorted([msid for msid in fetch.data_source.get_msids('cxc')
... if msid.startswith('DP_')])
>>> sorted([msid for msid in fetch.data_source.get_msids('maude')
... if msid.startswith('CALC_')])
Definition#
Derived parameters are defined by inheriting from the DerivedParameter
base
class. Each class definition requires three class attributes:
content_root
, rootparams
, and time_step
. The time_step
should
be an integral multiple of 0.25625. In the example below a large number of
definition classes have the same content root so another class
DerivedParameterThermal
has been created to avoid repeating the
content_root
definition every time.
Each definition class also requires a calc(self, data)
method. The
data
argument will be an MSIDset (dict of fetch MSID objects) with
values for each of the rootparams
MSIDs. The data values in the
MSIDset will be filtered for bad values and aligned to a common time
sequence with step size time_step
.
class DerivedParameterThermal(base.DerivedParameter):
content_root = 'thermal'
class DP_EE_DIAM(DerivedParameterThermal):
"""Kodak diametrical encircled energy"""
rootparams = ['OHRMGRD6', 'OHRMGRD3']
time_step = 32.8
def calc(self, data):
VAL2 = np.abs(1.0 * data['OHRMGRD6'].vals)
VAL1 = np.abs(1.0 * data['OHRMGRD3'].vals)
DTDIAM = np.max([VAL1, VAL2], axis=0)
EE_DIAM = DTDIAM * 0.401
return EE_DIAM
class DP_P01(DerivedParameterThermal):
"""Zone 1 heater power"""
rootparams = ['ELBV', '4OHTRZ01']
time_step = 0.25625
def calc(self, data):
VSQUARED = data['ELBV'].vals * data['ELBV'].vals
P01 = data['4OHTRZ01'].vals * VSQUARED / 110.2
return P01
class DP_DPA_POWER(base.DerivedParameter):
"""ACIS total DPA-A and DPA-B power"""
rootparams = ['1dp28avo', '1dpicacu', '1dp28bvo', '1dpicbcu']
time_step = 32.8
content_root = 'acispow'
def calc(self, data):
power = (data['1dp28avo'].vals * data['1dpicacu'].vals +
data['1dp28bvo'].vals * data['1dpicbcu'].vals)
return power
Computed MSIDs#
Cheta provides support for on-the-fly computed MSIDs with the following features:
Designed for simplicity and ease of use by non-expert Ska3 users.
Following a simple recipe in user code, new MSIDs are automatically registered to fetch.
Computed MSIDs can included embedded parameters to allow further customization or application of a function to any other MSID.
Support for 5-minute and daily stats also included.
See the cheta.derived.comps
API docs for a list of the available
computed MSIDs.
See the DAWG computed MSIDs notebook for a longer introduction to the topic with a number of examples.
What’s the advantage?#
If you have a function of MSID values, what is the advantage of going through this formalism to create a computed MSID instead of just using the function output directly?
It gives you the entire fetch API! You get for free all the fetch bling like plotting, selecting intervals, kadi event integration, interpolation.
If your computed MSID is useful to the community it is simple to add to the released
cheta
package for other users.It allows creation of arbitrary MSIDs that can be used in xija models. Examples: *
pm2tv1t_clean
as aNode
component *cmd_state_acisfp_temp_32
as a telemetry input (TelemData
component).
Example#
This example is not terribly useful but illustrates the key concepts and requirements for defining a computed MSID:
from cheta.derived.comps import ComputedMsid # Inherit from this class
# Class name is arbitrary, but by convention start with `Comp_`
class Comp_Val_Plus_Offset(ComputedMsid):
"""
Computed MSID to add an integer offset to MSID value.
MSID format is "<MSID>_plus_<offset>", where <MSID> is an existing MSID
in the archive and <offset> is an integer offset.
"""
msid_match = r'(\w+)_plus_(\d+)'
# `msid_match` is a class attribute that defines a regular expresion to
# match for this computed MSID. This must be defined and it must be
# unambiguous (not matching an existing MSID or other computed MSID).
#
# The two groups in parentheses specify the arguments <MSID> and <offset>.
# These are passed to `get_msid_attrs` as msid_args[0] and msid_args[1].
# The \w symbol means to match a-z, A-Z, 0-9 and underscore (_).
# The \d symbol means to match digits 0-9.
def get_msid_attrs(self, tstart, tstop, msid, msid_args):
"""
Get attributes for computed MSID: ``vals``, ``bads``, ``times``,
``unit``, ``raw_vals``, and ``offset``. The first four must always
be provided.
:param tstart: start time (CXC secs)
:param tstop: stop time (CXC secs)
:param msid: full MSID name e.g. tephin_plus_5
:param msid_args: tuple of regex match groups (msid_name,)
:returns: dict of MSID attributes
"""
# Process the arguments parsed from the MSID
msid msid_args[0]
offset = int(msid_args[1])
# Get the raw telemetry value in user-requested unit system
dat = self.fetch_sys.MSID(msid, tstart, tstop)
# Do the computation
vals = dat.vals + offset
# Return a dict with at least `vals`, `times`, `bads`, and `unit`.
# Additional attributes are allowed and will be set on the
# final MSID object.
out = {'vals': vals,
'bads': dat.bads,
'times': dat.times,
'unit': dat.unit,
'vals_raw': dat.vals, # Provide original values without offset
'offset': offset # Provide the offset for reference
}
return out
Units#
Computed MSIDs should support units where applicable. In the example above
this was done by using self.fetch_sys
in order to get the original data
in the user-requested system. In other words, if the user did a call
dat = fetch_sci.Msid('msid_plus_8', '2010:001', '2010:002')
, then
self.fetch_sys
would translate to self.fetch_sci
.
In some cases the unit handling may require additional specification. This
can happen if the computation needs to be done in a particular unit, as is
the case for the built-in
Comp_MUPS_Valve_Temp_Clean
class.
Here the class must define an additional units
attribute with the
following structure:
units = {
# Unit system for attrs from get_msid_attrs(), one of 'eng', 'sci', 'cxc'
'internal_system': 'eng',
# Units for eng, sci, cxc systems
'eng': 'DEGF',
'sci': 'DEGC',
'cxc': 'K',
# Attributes that need conversion. At least `vals` but maybe others.
'convert_attrs': ['vals']
}
The specified units must all be convertable using functions defined in the
converters
dict in the cheta.units
module.