Pseudo-MSIDs in the engineering archive¶
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 engineering archive reformats those telemetry queries (one per psuedo-MSID) into records that match the engineering 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 engineering 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 Chandra.Time import DateTime
>>> dat = fetch.Msid('HRC_SS_HK_BAD', '1999:300', '1999:310')
>>> bad = (dat.vals & 0x7f) > 0
>>> DateTime(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()
(Source code, png, hires.png, pdf)
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()
(Source code, png, hires.png, pdf)
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 engineering 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 engineering 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 engineering 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
ACIS Power¶
Derived parameter MSIDs related to ACIS power.
EPS¶
Derived parameter MSIDs related to EPS subsystem.
Author: B. Bissell
Revision History:
Jul 2014 Initial Version
- class cheta.derived.eps.DP_BATT1_TAVE[source]¶
Battery 1 Average Temperature. Derived from average of all three battery temperature sensors. Telemetry 16x / MF
- rootparams = ['TB1T1', 'TB1T2', 'TB1T3']¶
- time_step = 2.05¶
- class cheta.derived.eps.DP_BATT2_TAVE[source]¶
Battery 2 Average Temperature. Derived from average of all three battery temperature sensors. Telemetry 16x / MF
- rootparams = ['TB2T1', 'TB2T2', 'TB2T3']¶
- time_step = 2.05¶
- class cheta.derived.eps.DP_BATT3_TAVE[source]¶
Battery 3 Average Temperature. Derived from average of all three battery temperature sensors. Telemetry 16x / MF
- rootparams = ['TB3T1', 'TB3T2', 'TB3T3']¶
- time_step = 2.05¶
- class cheta.derived.eps.DP_EPOWER1[source]¶
Bus Power = ELBI_LOW * ELBV Telemetry 8x / MF
- rootparams = ['ELBI_LOW', 'ELBV']¶
- time_step = 4.1¶
- class cheta.derived.eps.DP_MYSAPOW[source]¶
-Y Solar Array Power = ESAMYI * ELBV Telemetry 8x / MF
- rootparams = ['ESAMYI', 'ELBV']¶
- time_step = 4.1¶
Orbital elements¶
- class cheta.derived.orbit.DP_APOGEE_RADIUS[source]¶
Orbit apogee based on orbital elements (m)
Defined as
semi_major_axis * (1 + eccentricity)
- class cheta.derived.orbit.DP_ARGUMENT_PERIGEE[source]¶
Orbital element: argument of perigee (degrees)
- class cheta.derived.orbit.DP_ASCENDING_NODE[source]¶
Orbital element: right ascension of ascending node (degrees)
- class cheta.derived.orbit.DP_PERIGEE_RADIUS[source]¶
Orbit perigee based on orbital elements (m)
Defined as
semi_major_axis * (1 - eccentricity)
- class cheta.derived.orbit.DerivedParameterOrbit[source]¶
-
- content_root = 'orbit'¶
- max_gap = 1000.0¶
- rootparams = ['orbitephem0_x', 'orbitephem0_y', 'orbitephem0_z', 'orbitephem0_vx', 'orbitephem0_vy', 'orbitephem0_vz']¶
- time_step = 328.0¶
- cheta.derived.orbit.calc_orbital_elements(x, y, z, vx, vy, vz)[source]¶
Calculate orbital elements given input position (x, y, z) in m and velocity (vx, vy, vz) in m/s. Orbit perigee and apogee are computed as well.
Returns a dict with the following key values:
Key name
Unit
semi_major_axis
m
eccentricity
–
inclination
deg
ascending_node
deg
argument_perigee
deg
mean_anomaly
deg
orbit_period
sec
apogee_radius
m
perigee_radius
m
PCAD¶
Derived parameter MSIDs related to PCAD subsystem.
Author: A. Arvai
Revision History:
Jan 2012 Initial version
1 Mar 2012 Modified all ephemeris-based parameters to use predictive
ephemeris
26 Mar 2012 Re-defined DP_ROLL_FSS and DP_PITCH_FSS to improve accuracy
- class cheta.derived.pcad.DP_CSS1_NPM_SUN[source]¶
Coarse Sun Sensor Counts 1 filtered for NPM and SA Illuminated
Defined as CSS-1 current converted back into counts (AOCSSI1 * 4095 / 5.49549) when in NPM (AOPCADMD==1) and SA is illuminated (AOSAILLM==1). Otherwise, “Bads” flag is set equal to one.
- class cheta.derived.pcad.DP_CSS2_NPM_SUN[source]¶
Coarse Sun Sensor Counts 2 filtered for NPM and SA Illuminated
Defined as CSS-2 current converted back into counts (AOCSSI2 * 4095 / 5.49549) when in NPM (AOPCADMD==1) and SA is illuminated (AOSAILLM==1). Otherwise, “Bads” flag is set equal to one.
- class cheta.derived.pcad.DP_CSS3_NPM_SUN[source]¶
Coarse Sun Sensor Counts 3 filtered for NPM and SA Illuminated
Defined as CSS-3 current converted back into counts (AOCSSI3 * 4095 / 5.49549) when in NPM (AOPCADMD==1) and SA is illuminated (AOSAILLM==1). Otherwise, “Bads” flag is set equal to one.
- class cheta.derived.pcad.DP_CSS4_NPM_SUN[source]¶
Coarse Sun Sensor Counts 4 filtered for NPM and SA Illuminated
Defined as CSS-4 current converted back into counts (AOCSSI4 * 4095 / 5.49549) when in NPM (AOPCADMD==1) and SA is illuminated (AOSAILLM==1). Otherwise, “Bads” flag is set equal to one.
- class cheta.derived.pcad.DP_FSS_CSS_ANGLE_DIFF[source]¶
Angle between FSS and CSS Sun Vectors [Deg]
Defined as the angle between the FSS and CSS sun vectors
Calculated by rotating the CSS sun vector from the SA-1 frame to ACA frame then computing the angular difference using the dot product and ARCCOS. “Bads” flag is set equal to one when not in the FSS FOV.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_MAN_ANG[source]¶
Maneuver Angle (Total) [deg]
Defined as the angle between the estimated quaternion and the target quaternion during a maneuver.
Computed using the fourth component of the delta quaternion between AOTARQT<N> and AOATTQT<N> when a maneuver is in progress (AOMANEND = NEND), otherwise equal to zero.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_ONE_SHOT[source]¶
One Shot [arcsec]
Defined as the RSS of AOATTER2 and AOATTER3 while in NPM and zero for all other PCAD modes.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_PITCH[source]¶
Sun Pitch Angle from Predictive Ephemeris in ACA Frame [deg]
Defined as the angle between the sun vector and ACA X-axis.
Calculated using arccos of the sun vector x component in the body frame where the sun vector is from predictive ephemeris [SOLAREPHEM0 and ORBITEPHEM0] and the estimated attitude from the OBC’s estimated quaternion [AOATTQT<n>].
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_PITCH_CSS[source]¶
Sun Pitch Angle from CSS Data in ACA Frame [Deg]
Defined as the angle between the sun vector and ACA X-axis.
Calculated by rotating the CSS sun vector from the SA-1 frame to ACA frame based on the solar array angles AOSARES1 and AOSARES2.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_PITCH_CSS_SA[source]¶
Sun Pitch Angle from CSS Data in SA Frame [Deg]
Defined as the rotation about the SA-1 Y-axis required to align the sun vector with the SA-1 Y-Z plane.
Calculated as 90.0 - ARCCOS(AOSUNSA1).
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_PITCH_FSS[source]¶
Sun Pitch Angle from FSS Data in ACA Frame [Deg]
Defined as the angle between the sun vector and ACA X-axis.
When in FSS FOV per AOSUNPRS: Calculated using the FSS alpha and beta angles to compute the sun vector in the FSS frame. The sun vector is then rotated into the ACA frame using the rotation matrix (an OBC k-constant). Pitch is computed using the arccos function.
When NOT in FSS FOV per AOSUNPRS: <data>.bads = 1
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_ROLL[source]¶
Off-Nominal Roll Angle in ACA Frame [Deg]
Defined as the rotation about the ACA X-axis required to align the sun vector with the ACA X/Z plane.
Calculated using the four-quadrant arctan of the sun vector y and z components in the ACA frame where the sun vector is from predictive ephemeris [SOLAREPHEM0 and ORBITEPHEM0] and the estimated attitude from the OBC’s estimated quaternion [AOATTQT<n>].
http://occweb.cfa.harvard.edu/twiki/pub/Aspect/WebHome/ROLLDEV3.pdf
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_ROLL_CSS[source]¶
Off-Nominal Roll Angle from CSS Data in ACA Frame [Deg]
Defined as the rotation about the ACA X-axis required to align the sun vector with the ACA X/Z plane.
Calculated by rotating the CSS sun vector from the SA-1 frame to ACA frame based on the solar array angles AOSARES1 and AOSARES2.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_ROLL_CSS_SA[source]¶
Sun Roll Angle from CSS Data in SA Frame [Deg]
Defined as the rotation about the SA-1 X-axis required to align the sun vector with the SA-1 X-Z plane.
Calculated as ARCTAN( (-1*AOSUNSA2) / (-1*AOSUNSA3) ) using the four-quadrant version of ARCTAN.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_ROLL_FSS[source]¶
Off-Nominal Roll Angle from FSS Data in ACA Frame [Deg]
Defined as the rotation about the ACA X-axis required to align the sun vector with the ACA X/Z plane.
When in FSS FOV per AOSUNPRS: Calculated using the FSS alpha and beta angles to compute the sun vector in the FSS frame. The sun vector is then rotated into the ACA frame using the rotation matrix (an OBC k-constant). Roll is computed using the arctan function.
When NOT in FSS FOV per AOSUNPRS: <data>.bads = 1
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_RW1_DELTA_TEMP[source]¶
Difference between Reaction Wheel 1 Compartment and Bearing Temperature [Deg F]
Defined as TCYZ_RW1 - ARWA1BT.
- class cheta.derived.pcad.DP_RW2_DELTA_TEMP[source]¶
Difference between Reaction Wheel 2 Compartment and Bearing Temperature [Deg F]
Defined as TPCP_RW2 - ARWA2BT.
- class cheta.derived.pcad.DP_RW3_DELTA_TEMP[source]¶
Difference between Reaction Wheel 3 Compartment and Bearing Temperature [Deg F]
Defined as TPCP_RW3 - ARWA3BT.
- class cheta.derived.pcad.DP_RW4_DELTA_TEMP[source]¶
Difference between Reaction Wheel 4 Compartment and Bearing Temperature [Deg F]
Defined as TPCM_RW4 - ARWA4BT.
- class cheta.derived.pcad.DP_RW5_DELTA_TEMP[source]¶
Difference between Reaction Wheel 5 Compartment and Bearing Temperature [Deg F]
Defined as TPCM_RW5 - ARWA5BT.
- class cheta.derived.pcad.DP_RW6_DELTA_TEMP[source]¶
Difference between Reaction Wheel 6 Compartment and Bearing Temperature [Deg F]
Defined as TCYZ_RW6 - ARWA6BT.
- class cheta.derived.pcad.DP_RW_MOM_TOT[source]¶
Total Reaction Wheel Momentum [Ft-Lb-Sec]
Defined as the RSS of AORWMOM1, AORWMOM2, and AORWMOM3.
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_SA_ANG_AVG[source]¶
Average Solar Array Angle [Deg]
Defined as the mean of AOSARES1 and AOSARES2.
- class cheta.derived.pcad.DP_SUN_XZ_ANGLE[source]¶
Angle between Sun and ACA X/Z plane [Deg]
Incidence angle of the Sun vector on the ACA X/Z plane.
Calculated using the four-quadrant arctan of the sun vector y and z components in the ACA frame where the sun vector is from definitive ephemeris [SOLAREPHEM0 and ORBITEPHEM0] and the estimated attitude from the OBC’s estimated quaternion [AOATTQT<n>].
http://occweb.cfa.harvard.edu/twiki/pub/Aspect/WebHome/ROLLDEV3.pdf
- dtype¶
alias of
float32
- class cheta.derived.pcad.DP_SYS_MOM_TOT[source]¶
Total System Momentum [Ft-Lb-Sec]
Defined as the sum of the reaction wheel, environmental, and spacecraft momentum.
Calculated as the RSS of AOSYMOM1, AOSYMOM2, and AOSYMOM3.
- cheta.derived.pcad.calc_sun_vec_body_css(data, safe_mode=False)[source]¶
Calculate the normalized sun vector in body coordinates using CSS data.
This relies on the on-board computation of the sun vector in the solar array frame along with the solar array resolver angle.
- Parameters:
data – MSIDset with appropriate MSIDs
safe_mode – use safe mode telemetry MSIDs (6* vs AO*)
- Returns (sun_vec_norm, bads):
3 x N array of vectors, bads mask
- cheta.derived.pcad.qmult(q1, q2)[source]¶
Multiply two quaternions or arrays of quaternions
The input quaternions must have shape of (4,) or (4, N, ..).
- Parameters:
q1 – first quaternion
q2 – second quaternion
- Returns:
q1*q2 as an array with same shape as q1 and q2
- cheta.derived.pcad.qrotate(q, r)[source]¶
Rotate a vector by a quaternion
The input quaternion must have a shape of (4,) or (4, N, ..).
The input vector must have a shape of (3,) or (3, N, ..).
- Parameters:
q – quaternion defining the rotation
r – vector to be rotated
:returns r rotated by q as an array with the same shape as r
Thermal¶
Derived parameter MSIDs related to thermal subsystems.
- class cheta.derived.thermal.DP_ABH_DUTYCYCLE[source]¶
-
- rootparams = ['4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4S1PWR05', '4S1PWR06']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_EE_AXIAL[source]¶
-
- rootparams = ['OHRTHR58', 'OHRTHR12', 'OHRTHR36', 'OHRTHR56', 'OHRTHR57', 'OHRTHR55', 'OHRTHR35', 'OHRTHR37', 'OHRTHR34', 'OHRTHR13', 'OHRTHR10', 'OHRTHR11']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_EE_BULK[source]¶
-
- rootparams = ['OHRTHR10', 'OHRTHR58', 'OHRTHR52', 'OHRTHR53', 'OHRTHR56', 'OHRTHR57', 'OHRTHR54', 'OHRTHR55', 'OHRTHR12', 'OHRTHR35', 'OHRTHR11', 'OHRTHR08', 'OHRTHR09', 'OHRTHR31', 'OHRTHR33', 'OHRTHR34', 'OHRTHR13', 'OHRTHR36', 'OHRTHR37']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_EE_DIAM[source]¶
Kodak diametrical encircled energy
- rootparams = ['OHRMGRD6', 'OHRMGRD3']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_EE_RADIAL[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR54', 'OHRTHR31', 'OHRTHR09', 'OHRTHR08', 'OHRTHR33']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_EE_THERM[source]¶
-
- rootparams = ['OHRTHR37', 'OHRTHR58', 'OHRMGRD6', 'OHRMGRD3', 'OHRTHR35', 'OHRTHR52', 'OHRTHR53', 'OHRTHR56', 'OHRTHR57', 'OHRTHR54', 'OHRTHR55', 'OHRTHR12', 'OHRTHR36', 'OHRTHR08', 'OHRTHR09', 'OHRTHR31', 'OHRTHR33', 'OHRTHR34', 'OHRTHR13', 'OHRTHR10', 'OHRTHR11']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HAAG[source]¶
-
- rootparams = ['OHRTHR58', 'OHRTHR12', 'OHRTHR56', 'OHRTHR57', 'OHRTHR55', 'OHRTHR13', 'OHRTHR36', 'OHRTHR37', 'OHRTHR34', 'OHRTHR35', 'OHRTHR10', 'OHRTHR11']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HADG[source]¶
-
- rootparams = ['OHRMGRD3', 'OHRMGRD6']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HARG[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR54', 'OHRTHR31', 'OHRTHR09', 'OHRTHR08', 'OHRTHR33']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HMAX35[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR50', 'OHRTHR51', 'OHRTHR56', 'OHRTHR55', 'OHRTHR23', 'OHRTHR22', 'OHRTHR30', 'OHRTHR33', 'OHRTHR12', 'OHRTHR13', 'OHRTHR10', 'OHRTHR11', 'OHRTHR36', 'OHRTHR37', 'OHRTHR49', 'OHRTHR45', 'OHRTHR44', 'OHRTHR47', 'OHRTHR46', 'OHRTHR42', 'OHRTHR29', 'OHRTHR02', 'OHRTHR05', 'OHRTHR04', 'OHRTHR07', 'OHRTHR06', 'OHRTHR09', 'OHRTHR08', 'OHRTHR21', 'OHRTHR27', 'OHRTHR26', 'OHRTHR25', 'OHRTHR24', 'OHRTHR03']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HMCSAVE[source]¶
-
- rootparams = ['OHRTHR10', 'OHRTHR58', 'OHRTHR52', 'OHRTHR53', 'OHRTHR56', 'OHRTHR57', 'OHRTHR54', 'OHRTHR55', 'OHRTHR12', 'OHRTHR35', 'OHRTHR11', 'OHRTHR08', 'OHRTHR09', 'OHRTHR31', 'OHRTHR33', 'OHRTHR34', 'OHRTHR13', 'OHRTHR36', 'OHRTHR37']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HMIN35[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR50', 'OHRTHR51', 'OHRTHR56', 'OHRTHR55', 'OHRTHR23', 'OHRTHR08', 'OHRTHR30', 'OHRTHR33', 'OHRTHR12', 'OHRTHR13', 'OHRTHR36', 'OHRTHR11', 'OHRTHR10', 'OHRTHR37', 'OHRTHR49', 'OHRTHR45', 'OHRTHR44', 'OHRTHR47', 'OHRTHR46', 'OHRTHR42', 'OHRTHR29', 'OHRTHR02', 'OHRTHR05', 'OHRTHR04', 'OHRTHR07', 'OHRTHR06', 'OHRTHR09', 'OHRTHR22', 'OHRTHR21', 'OHRTHR27', 'OHRTHR26', 'OHRTHR25', 'OHRTHR24', 'OHRTHR03']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HRMA_AVE[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR50', 'OHRTHR51', 'OHRTHR56', 'OHRTHR55', 'OHRTHR09', 'OHRTHR08', 'OHRTHR30', 'OHRTHR33', 'OHRTHR12', 'OHRTHR13', 'OHRTHR10', 'OHRTHR11', 'OHRTHR36', 'OHRTHR37', 'OHRTHR49', 'OHRTHR45', 'OHRTHR44', 'OHRTHR47', 'OHRTHR46', 'OHRTHR42', 'OHRTHR29', 'OHRTHR02', 'OHRTHR05', 'OHRTHR04', 'OHRTHR07', 'OHRTHR06', 'OHRTHR23', 'OHRTHR22', 'OHRTHR21', 'OHRTHR27', 'OHRTHR26', 'OHRTHR25', 'OHRTHR24', 'OHRTHR03']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_HRMHCHK[source]¶
-
- rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR50', 'OHRTHR51', 'OHRTHR56', 'OHRTHR55', 'OHRTHR09', 'OHRTHR08', 'OHRTHR30', 'OHRTHR33', 'OHRTHR12', 'OHRTHR13', 'OHRTHR10', 'OHRTHR11', 'OHRTHR36', 'OHRTHR37', 'OHRTHR49', 'OHRTHR45', 'OHRTHR44', 'OHRTHR47', 'OHRTHR46', 'OHRTHR42', 'OHRTHR03', 'OHRTHR02', 'OHRTHR05', 'OHRTHR04', 'OHRTHR07', 'OHRTHR06', 'OHRTHR23', 'OHRTHR22', 'OHRTHR21', 'OHRTHR27', 'OHRTHR26', 'OHRTHR25', 'OHRTHR24', 'OHRTHR29']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBAAG[source]¶
-
- rootparams = ['4RT704T', '4RT705T', '4RT708T', '4RT707T', '4RT709T', '4RT711T', '4RT700T', '4RT702T', '4RT701T', '4RT703T', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR62', 'OOBTHR63', '4RT706T', '4RT710T']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBAAGW[source]¶
-
- rootparams = ['4RT705T', '4RT707T', '4RT709T', '4RT711T', '4RT701T', '4RT703T', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBACAVE[source]¶
-
- rootparams = ['OOBTHR19', 'OOBTHR18', 'OOBTHR15', 'OOBTHR14', 'OOBTHR17', 'OOBTHR11', 'OOBTHR10', 'OOBTHR13', 'OOBTHR12', 'OOBTHR30', 'OOBTHR08', 'OOBTHR09', 'OOBTHR24', 'OOBTHR25', 'OOBTHR26', 'OOBTHR27', 'OOBTHR20', 'OOBTHR21', 'OOBTHR22', 'OOBTHR23', 'OOBTHR28', 'OOBTHR29']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBACAVEW[source]¶
-
- rootparams = ['4RT705T', 'OOBTHR19', '4RT707T', 'OOBTHR15', 'OOBTHR14', '4RT711T', 'OOBTHR11', 'OOBTHR10', 'OOBTHR13', '4RT701T', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR30', 'OOBTHR18', '4RT709T', '4RT703T', 'OOBTHR17', 'OOBTHR08', 'OOBTHR09', 'OOBTHR24', 'OOBTHR25', 'OOBTHR26', 'OOBTHR27', 'OOBTHR20', 'OOBTHR21', 'OOBTHR22', 'OOBTHR23', 'OOBTHR12', 'OOBTHR28', 'OOBTHR29']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBADIG[source]¶
-
- rootparams = ['OOBTHR08', 'OOBTHR19', 'OOBTHR31', 'OOBTHR13', 'OOBTHR26', 'OOBTHR34', 'OOBTHR33', 'OOBTHR22', 'OOBTHR23', 'OOBTHR60', 'OOBTHR61', 'OOBTHR28', 'OOBTHR29']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBADIGW[source]¶
-
- rootparams = ['OOBTHR08', '4RT705T', 'OOBTHR19', '4RT707T', 'OOBTHR22', '4RT711T', 'OOBTHR13', '4RT701T', 'OOBTHR26', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR23', 'OOBTHR60', 'OOBTHR61', 'OOBTHR28', 'OOBTHR29']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OBA_AVE[source]¶
-
- rootparams = ['OOBTHR19', 'OOBTHR18', 'OOBTHR15', 'OOBTHR14', 'OOBTHR17', 'OOBTHR11', 'OOBTHR10', 'OOBTHR13', 'OOBTHR12', 'OOBTHR37', 'OOBTHR36', 'OOBTHR35', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR30', 'OOBTHR39', 'OOBTHR38', 'OOBTHR08', 'OOBTHR09', 'OOBTHR24', 'OOBTHR25', 'OOBTHR26', 'OOBTHR27', 'OOBTHR20', 'OOBTHR21', 'OOBTHR22', 'OOBTHR23', 'OOBTHR46', 'OOBTHR44', 'OOBTHR45', 'OOBTHR28', 'OOBTHR29', 'OOBTHR40', 'OOBTHR41']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OMAX34[source]¶
-
- rootparams = ['OOBTHR19', 'OOBTHR18', 'OOBTHR15', 'OOBTHR14', 'OOBTHR17', 'OOBTHR11', 'OOBTHR10', 'OOBTHR13', 'OOBTHR12', 'OOBTHR37', 'OOBTHR36', 'OOBTHR35', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR30', 'OOBTHR39', 'OOBTHR38', 'OOBTHR28', 'OOBTHR08', 'OOBTHR09', 'OOBTHR24', 'OOBTHR25', 'OOBTHR26', 'OOBTHR27', 'OOBTHR20', 'OOBTHR21', 'OOBTHR22', 'OOBTHR23', 'OOBTHR46', 'OOBTHR45', 'OOBTHR42', 'OOBTHR29', 'OOBTHR40', 'OOBTHR41']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_OMIN34[source]¶
-
- rootparams = ['OOBTHR19', 'OOBTHR18', 'OOBTHR15', 'OOBTHR14', 'OOBTHR17', 'OOBTHR11', 'OOBTHR10', 'OOBTHR13', 'OOBTHR12', 'OOBTHR37', 'OOBTHR36', 'OOBTHR35', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31', 'OOBTHR30', 'OOBTHR39', 'OOBTHR38', 'OOBTHR28', 'OOBTHR08', 'OOBTHR09', 'OOBTHR24', 'OOBTHR25', 'OOBTHR26', 'OOBTHR27', 'OOBTHR20', 'OOBTHR21', 'OOBTHR22', 'OOBTHR23', 'OOBTHR46', 'OOBTHR45', 'OOBTHR42', 'OOBTHR29', 'OOBTHR40', 'OOBTHR41']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_P01[source]¶
Zone 1 heater power
- rootparams = ['ELBV', '4OHTRZ01']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P27[source]¶
-
- rootparams = ['4OHTRZ27', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P28[source]¶
-
- rootparams = ['ELBV', '4OHTRZ28', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P29[source]¶
-
- rootparams = ['ELBV', '4OHTRZ29', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P35[source]¶
-
- rootparams = ['ELBV', '4OHTRZ35', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P42[source]¶
-
- rootparams = ['4OHTRZ42', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P43[source]¶
-
- rootparams = ['4OHTRZ43', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P44[source]¶
-
- rootparams = ['ELBV', '4OHTRZ44', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P45[source]¶
-
- rootparams = ['ELBV', '4OHTRZ45', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P46[source]¶
-
- rootparams = ['ELBV', '4OHTRZ46', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P47[source]¶
-
- rootparams = ['ELBV', '4OHTRZ47', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P48[source]¶
-
- rootparams = ['ELBV', '4OHTRZ48', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P49[source]¶
-
- rootparams = ['4OHTRZ49', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P50[source]¶
-
- rootparams = ['4OHTRZ50', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P52[source]¶
-
- rootparams = ['4OHTRZ52', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P53[source]¶
-
- rootparams = ['4OHTRZ53', 'ELBV', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_P54[source]¶
-
- rootparams = ['ELBV', '4OHTRZ54', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PABH[source]¶
-
- rootparams = ['ELBV', '4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PAFTCONE[source]¶
-
- rootparams = ['ELBV', '4OHTRZ48', '4OHTRZ49', '4OHTRZ50', '4OHTRZ51', '4OHTRZ52', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PAFTCYL[source]¶
-
- rootparams = ['ELBV', '4OHTRZ66', '4OHTRZ67', '4OHTRZ68']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PAHP[source]¶
-
- rootparams = ['ELBV', '4OHTRZ11', '4OHTRZ12', '4OHTRZ13']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PCONE[source]¶
-
- rootparams = ['ELBV', '4OHTRZ61', '4OHTRZ62', '4OHTRZ63']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PFAP[source]¶
-
- rootparams = ['ELBV', '4OHTRZ01', '4OHTRZ02', '4OHTRZ03', '4OHTRZ04', '4OHTRZ05', '4OHTRZ06', '4OHTRZ07']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PFWDCONE[source]¶
-
- rootparams = ['ELBV', '4OHTRZ31', '4OHTRZ32', '4OHTRZ33', '4OHTRZ34', '4OHTRZ35', '4OHTRZ36', '4OHTRZ37', '4OHTRZ38', '4OHTRZ39', '4OHTRZ40', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PFWDCYL[source]¶
-
- rootparams = ['ELBV', '4OHTRZ58', '4OHTRZ59', '4OHTRZ60']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PHRMA[source]¶
-
- rootparams = ['ELBV', '4OHTRZ01', '4OHTRZ02', '4OHTRZ03', '4OHTRZ04', '4OHTRZ05', '4OHTRZ06', '4OHTRZ07', '4OHTRZ08', '4OHTRZ09', '4OHTRZ10', '4OHTRZ11', '4OHTRZ12', '4OHTRZ13', '4OHTRZ14', '4OHTRZ15', '4OHTRZ16', '4OHTRZ17', '4OHTRZ18', '4OHTRZ19', '4OHTRZ20', '4OHTRZ23', '4OHTRZ24']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PHRMASTRUTS[source]¶
-
- rootparams = ['ELBV', '4OHTRZ25', '4OHTRZ26', '4OHTRZ27', '4OHTRZ28', '4OHTRZ29', '4OHTRZ30', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PIC[source]¶
-
- rootparams = ['ELBV', '4OHTRZ23', '4OHTRZ24']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PMIDCONE[source]¶
-
- rootparams = ['ELBV', '4OHTRZ41', '4OHTRZ42', '4OHTRZ43', '4OHTRZ44', '4OHTRZ45', '4OHTRZ46', '4OHTRZ47', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PMNT[source]¶
-
- rootparams = ['ELBV', '4OHTRZ14', '4OHTRZ15', '4OHTRZ16']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_POBAT[source]¶
-
- rootparams = ['ELBV', '4OHTRZ25', '4OHTRZ26', '4OHTRZ27', '4OHTRZ28', '4OHTRZ29', '4OHTRZ30', '4OHTRZ31', '4OHTRZ32', '4OHTRZ33', '4OHTRZ34', '4OHTRZ35', '4OHTRZ36', '4OHTRZ37', '4OHTRZ38', '4OHTRZ39', '4OHTRZ40', '4OHTRZ41', '4OHTRZ42', '4OHTRZ43', '4OHTRZ44', '4OHTRZ45', '4OHTRZ46', '4OHTRZ47', '4OHTRZ48', '4OHTRZ49', '4OHTRZ50', '4OHTRZ51', '4OHTRZ52', '4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4OHTRZ75', '4OHTRZ76', '4OHTRZ77', '4OHTRZ78', '4OHTRZ79', '4OHTRZ80', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_POC[source]¶
-
- rootparams = ['ELBV', '4OHTRZ17', '4OHTRZ18', '4OHTRZ19']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PPL10[source]¶
-
- rootparams = ['ELBV', '4OHTRZ08', '4OHTRZ09', '4OHTRZ10']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PRADVNT[source]¶
-
- rootparams = ['ELBV', '4OHTRZ64', '4OHTRZ65', '4OHTRZ69']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PSCSTRUTS[source]¶
-
- rootparams = ['ELBV', '4OHTRZ75', '4OHTRZ76', '4OHTRZ77', '4OHTRZ78', '4OHTRZ79', '4OHTRZ80']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PTFTE[source]¶
-
- rootparams = ['ELBV', '4OHTRZ58', '4OHTRZ59', '4OHTRZ60', '4OHTRZ61', '4OHTRZ62', '4OHTRZ63', '4OHTRZ64', '4OHTRZ65', '4OHTRZ66', '4OHTRZ67', '4OHTRZ68', '4OHTRZ69']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_PTOTAL[source]¶
-
- rootparams = ['ELBV', '4OHTRZ01', '4OHTRZ02', '4OHTRZ03', '4OHTRZ04', '4OHTRZ05', '4OHTRZ06', '4OHTRZ07', '4OHTRZ08', '4OHTRZ09', '4OHTRZ10', '4OHTRZ11', '4OHTRZ12', '4OHTRZ13', '4OHTRZ14', '4OHTRZ15', '4OHTRZ16', '4OHTRZ17', '4OHTRZ18', '4OHTRZ19', '4OHTRZ20', '4OHTRZ23', '4OHTRZ24', '4OHTRZ25', '4OHTRZ26', '4OHTRZ27', '4OHTRZ28', '4OHTRZ29', '4OHTRZ30', '4OHTRZ31', '4OHTRZ32', '4OHTRZ33', '4OHTRZ34', '4OHTRZ35', '4OHTRZ36', '4OHTRZ37', '4OHTRZ38', '4OHTRZ39', '4OHTRZ40', '4OHTRZ41', '4OHTRZ42', '4OHTRZ43', '4OHTRZ44', '4OHTRZ45', '4OHTRZ46', '4OHTRZ47', '4OHTRZ48', '4OHTRZ49', '4OHTRZ50', '4OHTRZ51', '4OHTRZ52', '4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4OHTRZ58', '4OHTRZ59', '4OHTRZ60', '4OHTRZ61', '4OHTRZ62', '4OHTRZ63', '4OHTRZ64', '4OHTRZ65', '4OHTRZ66', '4OHTRZ67', '4OHTRZ68', '4OHTRZ69', '4OHTRZ75', '4OHTRZ76', '4OHTRZ77', '4OHTRZ78', '4OHTRZ79', '4OHTRZ80', '4S1PWR05', '4S1PWR06']¶
- time_step = 0.25625¶
- class cheta.derived.thermal.DP_TABMAX[source]¶
-
- rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TABMIN[source]¶
-
- rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TELAB_AVE[source]¶
-
- rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TELHS_AVE[source]¶
-
- rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TELSS_AVE[source]¶
-
- rootparams = ['OOBTHR51', 'OOBTHR50', 'OOBTHR53', 'OOBTHR52', 'OOBTHR54', 'OOBTHR49']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_THSMAX[source]¶
-
- rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_THSMIN[source]¶
-
- rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TILT_BULK[source]¶
-
- rootparams = ['OHRTHR43', 'OHRTHR42']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TILT_MAX[source]¶
-
- rootparams = ['OOBAGRD6', 'OOBAGRD3', 'OHRTHR43', 'OHRTHR42']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TILT_RSS[source]¶
-
- rootparams = ['OOBAGRD6', 'OOBAGRD3', 'OHRTHR43', 'OHRTHR42']¶
- time_step = 32.8¶
- class cheta.derived.thermal.DP_TSSMAX[source]¶
-
- rootparams = ['OOBTHR51', 'OOBTHR50', 'OOBTHR53', 'OOBTHR52', 'OOBTHR54', 'OOBTHR49']¶
- time_step = 32.8¶
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 Built-in computed MSIDs and API section 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.
Built-in computed MSIDs and API¶
Support computed MSIDs in the cheta archive.
ComputedMsid
: base class for user-generated comps.
Comp_MUPS_Valve_Temp_Clean
: Cleaned MUPS valve temperatures MSIDs(pm2thv1t|pm1thv2t)_clean
.
Comp_KadiCommandState
: Commanded statescmd_state_<key>_<dt>
for any kadi commanded state value.
Comp_Quat
: Quaternions
quat_aoattqt
=AOATTQT[1-4]
quat_aoatupq
=AOATUPQ[1-3]
quat_aocmdqt
=AOCMDQT[1-3]
quat_aotarqt
=AOTARQT[1-3]
Comp_Pitch_Roll_OBC_Safe
: Sun Pitchpitch_comp
and off-nominal rollroll_comp
which are valid in NPNT, NMAN, NSUN and safe mode.
- class cheta.derived.comps.Comp_KadiCommandState(unit_system='eng')[source]¶
Computed MSID for kadi dynamic commanded states.
The MSID here takes the form
cmd_state_<state_key>_<dt>
where:
state_key
is a valid commanded state key such aspitch
orpcad_mode
oracisfp_temp
.
dt
is the sampling time expressed as a multiple of 1.025 sec frames.Example MSID names:
'cmd_state_pcad_mode_1': sample ``pcad_mode`` every 1.025 secs 'cmd_state_acisfp_temp_32': sample ``acisfp_temp`` every 32.8 secs
- get_msid_attrs(tstart, tstop, msid, msid_args)[source]¶
Get attributes for computed MSID:
vals
,bads
,times
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. cmd_state_pitch_clean
msid_args – tuple of regex match groups: (state_key, dt)
- Returns:
dict of MSID attributes
- class cheta.derived.comps.Comp_MUPS_Valve_Temp_Clean(unit_system='eng')[source]¶
Computed MSID for cleaned MUPS valve temps PM2THV1T, PM1THV2T
This uses the cleaning method demonstrated in the following notebook to return a version of the MUPS valve temperature comprised of telemetry values that are consistent with a thermal model.
https://nbviewer.jupyter.org/urls/cxc.cfa.harvard.edu/mta/ASPECT/ipynb/misc/mups-valve-xija-filtering.ipynb https://nbviewer.jupyter.org/urls/cxc.harvard.edu/mta/ASPECT/ipynb/misc/DAWG-mups-valve-xija-filtering.ipynb
Allowed MSIDs are ‘pm2thv1t_clean’ and ‘pm1thv2t_clean’ (as always case is not important). Optionally one can include the
chandra_models
branch name, tag or commit hash to used for reading the MUPS 1B and MUPS 2A thermal model specifications. For example you can use ‘pm1thv2t_clean_3.28’ to get the model from release 3.28 of chandra_models.
- get_msid_attrs(tstart, tstop, msid, msid_args)[source]¶
Get attributes for computed MSID:
vals
,bads
,times
,unit
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. pm2thv1t_clean
msid_args – tuple of regex match groups (msid_name,)
- Returns:
dict of MSID attributes
- class cheta.derived.comps.Comp_Pitch_Roll_OBC_Safe(unit_system='eng')[source]¶
Computed MSID to return pitch or off-nominal roll angle which is valid in NPNT, NMAN, NSUN, and Safe Mode.
MSID names are
pitch_comp
androll_comp
.The computation logic is shown below:
On OBC control (CONLOFP == "NRML"): - AOPCADMD in ["NPNT", "NMAN"] => compute pitch/roll from AOATTQT[1234] (MAUDE or CXC) and predictive ephemeris ORBITEPHEM0_[XYZ] and SOLAREPHEM0_[XYZ] (CXC only but always available) - AOPCADMD == "NSUN" => get pitch/roll from PITCH/ROLL_CSS derived params. These are also in MAUDE. On CPE control (CONLOFP == "SAFE"): - Compute pitch/roll from 6SUNSA[123] + 6SARES[12] via calc_pitch/roll_css_safe() Intervals for other CONLOFP values are ignored.
- get_msid_attrs(tstart, tstop, msid, msid_args)[source]¶
Get attributes for computed MSID:
vals
,bads
,times
,unit
,raw_vals
, andoffset
. The first four must always be provided.
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. tephin_plus_5
msid_args – tuple of regex match groups (msid_name,)
- Returns:
dict of MSID attributes
- class cheta.derived.comps.Comp_Quat(unit_system='eng')[source]¶
Computed MSID for returning the quaternion telemetry as a Quat object
This defines the following computed MSIDs based on the corresponding TDB MSIDs:
quat_aoattqt
=AOATTQT[1-4]
quat_aoatupq
=AOATUPQ[1-3]
quat_aocmdqt
=AOCMDQT[1-3]
quat_aotarqt
=AOTARQT[1-3]
Example:
>>> from cheta import fetch >>> qatt = fetch.Msid('quat_aoattqt', '2022:001:00:00:00', '2022:001:00:00:04') >>> qatt.vals Quat(array([[-0.07434856, -0.55918674, -0.80432653, 0.18665828], [-0.07434854, -0.55918679, -0.8043265 , 0.18665825], [-0.07434849, -0.55918674, -0.80432653, 0.18665829], [-0.07434849, -0.55918667, -0.80432653, 0.18665852]])) >>> qatt.vals.equatorial array([[193.28905806, 19.16894296, 67.36207683], [193.28905485, 19.1689407 , 67.36208471], [193.28906329, 19.16893787, 67.36207699], [193.28908839, 19.16895134, 67.36206404]])This computed MSID can be used with the MAUDE data source. Be aware that if the telemetry has a missing VCDU then there is a risk of getting a slightly incorrect quaternion. This would occur since the code uses nearest-neighbor interpolation to associate the four components of the quaternion with a single time. For back-orbit data this is rare, but for real-time data it is more likely.
- get_msid_attrs(tstart: float, tstop: float, msid: str, msid_args: tuple)[source]¶
Get the attributes required for this MSID.
Get attributes for computed MSID, which must include at least
vals
,bads
,times
, and may include additional attributes.This MUST be supplied by sub-classes.
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. tephin_plus_5
msid_args – tuple of regex match groups (msid_name,)
- Returns:
dict of MSID attributes
- class cheta.derived.comps.ComputedMsid(unit_system='eng')[source]¶
Base class for cheta computed MSID.
Sub-classes must define at least the following:
msid_match
class attribute as a regex to match for the MSID.
get_msid_attrs()
method to perform the computation and return a dict with the result.Optionally:
units
attribute to specify unit handling.See the fetch tutorial Computed MSIDs section for details.
- convert_units(msid_attrs)[source]¶
Convert required elements of
msid_attrs
toself.unit_system
.Unit_system can be one of ‘cxc’, ‘sci’, ‘eng’.
- Parameters:
msid_attrs – dict, input MSID attributes
unit_system – str, unit system
- Returns:
dict, converted MSID attributes
- property fetch_cxc¶
Fetch in CXC (FITS standard) units like K
- property fetch_eng¶
Fetch in TDB engineering units like DEGF
- property fetch_sci¶
Fetch in scientific units like DEGC
- property fetch_sys¶
Fetch in the unit system specified for the class
- classmethod get_matching_comp_cls(msid)[source]¶
Get computed classes that match
msid
- Parameters:
msid – str, input msid
- Returns:
first ComputedMsid subclass that matches
msid
or None
- get_msid_attrs(tstart, tstop, msid, msid_args)[source]¶
Get the attributes required for this MSID.
Get attributes for computed MSID, which must include at least
vals
,bads
,times
, and may include additional attributes.This MUST be supplied by sub-classes.
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. tephin_plus_5
msid_args – tuple of regex match groups (msid_name,)
- Returns:
dict of MSID attributes
- get_stats_attrs(tstart, tstop, msid, match_args, interval)[source]¶
Get 5-min or daily stats attributes.
This is normally not overridden by sub-classes.
- Parameters:
tstart – start time (CXC secs)
tstop – stop time (CXC secs)
msid – full MSID name e.g. tephin_plus_5
msid_args – tuple of regex match groups (msid_name,)
- Returns:
dict of MSID attributes