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:

  1. 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.

  2. 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.

  3. 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)

_images/pseudo_msids-1.png

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)

_images/pseudo_msids-2.png

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 internally fetch will search for derived parameters matching DP_<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.

class cheta.derived.acispow.DP_DEA_POWER[source]

ACIS DEA power

class cheta.derived.acispow.DP_DPA_POWER[source]

ACIS total DPA-A and DPA-B power

class cheta.derived.acispow.DP_PSMC_POWER[source]

ACIS PSMC 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

calc(data)[source]
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

calc(data)[source]
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

calc(data)[source]
rootparams = ['TB3T1', 'TB3T2', 'TB3T3']
time_step = 2.05
class cheta.derived.eps.DP_EPOWER1[source]

Bus Power = ELBI_LOW * ELBV Telemetry 8x / MF

calc(data)[source]
rootparams = ['ELBI_LOW', 'ELBV']
time_step = 4.1
class cheta.derived.eps.DP_MYSAPOW[source]

-Y Solar Array Power = ESAMYI * ELBV Telemetry 8x / MF

calc(data)[source]
rootparams = ['ESAMYI', 'ELBV']
time_step = 4.1
class cheta.derived.eps.DP_PYSAPOW[source]

+Y Solar Array Power = ESAPYI * ELBV Telemetry 8x / MF

calc(data)[source]
rootparams = ['ESAPYI', 'ELBV']
time_step = 4.1
class cheta.derived.eps.DerivedParameterEps[source]
content_root = 'eps'

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_ECCENTRICITY[source]

Orbital element: eccentricity

class cheta.derived.orbit.DP_INCLINATION[source]

Orbital element: inclination (degrees)

class cheta.derived.orbit.DP_MEAN_ANOMALY[source]

Orbital element: mean anomaly (degrees)

class cheta.derived.orbit.DP_ORBIT_PERIOD[source]

Orbital element: period (sec)

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.DP_SEMI_MAJOR_AXIS[source]

Orbital element: semi-major axis (m)

class cheta.derived.orbit.DerivedParameterOrbit[source]
calc(data)[source]
content_root = 'orbit'
get_orbital_element(data)[source]
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

cheta.derived.pcad.sun_vector_body(data, predictive=True)[source]

Calculate the normalized sun vector in body coordinates.

Parameters:
  • data – MSIDset with orbitephem, solarephem and aoattqt<N> MSIDs

  • predictive – use predictive ephemeris

Returns:

3 x N array of vectors

Thermal

Derived parameter MSIDs related to thermal subsystems.

class cheta.derived.thermal.DP_ABH_DUTYCYCLE[source]
calc(data)[source]
rootparams = ['4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4S1PWR05', '4S1PWR06']
time_step = 32.8
class cheta.derived.thermal.DP_EE_AXIAL[source]
calc(data)[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]
calc(data)[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

calc(data)[source]
rootparams = ['OHRMGRD6', 'OHRMGRD3']
time_step = 32.8
class cheta.derived.thermal.DP_EE_RADIAL[source]
calc(data)[source]
rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR54', 'OHRTHR31', 'OHRTHR09', 'OHRTHR08', 'OHRTHR33']
time_step = 32.8
class cheta.derived.thermal.DP_EE_THERM[source]
calc(data)[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]
calc(data)[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]
calc(data)[source]
rootparams = ['OHRMGRD3', 'OHRMGRD6']
time_step = 32.8
class cheta.derived.thermal.DP_HARG[source]
calc(data)[source]
rootparams = ['OHRTHR52', 'OHRTHR53', 'OHRTHR54', 'OHRTHR31', 'OHRTHR09', 'OHRTHR08', 'OHRTHR33']
time_step = 32.8
class cheta.derived.thermal.DP_HMAX35[source]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[source]
rootparams = ['4RT705T', '4RT707T', '4RT709T', '4RT711T', '4RT701T', '4RT703T', 'OOBTHR34', 'OOBTHR33', 'OOBTHR31']
time_step = 32.8
class cheta.derived.thermal.DP_OBACAVE[source]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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]
calc(data)[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

calc(data)[source]
rootparams = ['ELBV', '4OHTRZ01']
time_step = 0.25625
class cheta.derived.thermal.DP_P02[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ02']
time_step = 0.25625
class cheta.derived.thermal.DP_P03[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ03']
time_step = 0.25625
class cheta.derived.thermal.DP_P04[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ04']
time_step = 0.25625
class cheta.derived.thermal.DP_P05[source]
calc(data)[source]
rootparams = ['4OHTRZ05', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P06[source]
calc(data)[source]
rootparams = ['4OHTRZ06', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P07[source]
calc(data)[source]
rootparams = ['4OHTRZ07', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P08[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ08']
time_step = 0.25625
class cheta.derived.thermal.DP_P09[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ09']
time_step = 0.25625
class cheta.derived.thermal.DP_P10[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ10']
time_step = 0.25625
class cheta.derived.thermal.DP_P11[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ11']
time_step = 0.25625
class cheta.derived.thermal.DP_P12[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ12']
time_step = 0.25625
class cheta.derived.thermal.DP_P13[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ13']
time_step = 0.25625
class cheta.derived.thermal.DP_P14[source]
calc(data)[source]
rootparams = ['4OHTRZ14', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P15[source]
calc(data)[source]
rootparams = ['4OHTRZ15', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P16[source]
calc(data)[source]
rootparams = ['4OHTRZ16', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P17[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ17']
time_step = 0.25625
class cheta.derived.thermal.DP_P18[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ18']
time_step = 0.25625
class cheta.derived.thermal.DP_P19[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ19']
time_step = 0.25625
class cheta.derived.thermal.DP_P20[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ20']
time_step = 0.25625
class cheta.derived.thermal.DP_P23[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ23']
time_step = 0.25625
class cheta.derived.thermal.DP_P24[source]
calc(data)[source]
rootparams = ['4OHTRZ24', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P25[source]
calc(data)[source]
rootparams = ['4OHTRZ25', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P26[source]
calc(data)[source]
rootparams = ['4OHTRZ26', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P27[source]
calc(data)[source]
rootparams = ['4OHTRZ27', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P28[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ28', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P29[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ29', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P30[source]
calc(data)[source]
rootparams = ['4OHTRZ30', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P31[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ31']
time_step = 0.25625
class cheta.derived.thermal.DP_P32[source]
calc(data)[source]
rootparams = ['4OHTRZ32', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P33[source]
calc(data)[source]
rootparams = ['4OHTRZ33', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P34[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ34']
time_step = 0.25625
class cheta.derived.thermal.DP_P35[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ35', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P36[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ36']
time_step = 0.25625
class cheta.derived.thermal.DP_P37[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ37']
time_step = 0.25625
class cheta.derived.thermal.DP_P38[source]
calc(data)[source]
rootparams = ['4OHTRZ38', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P39[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ39']
time_step = 0.25625
class cheta.derived.thermal.DP_P40[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ40']
time_step = 0.25625
class cheta.derived.thermal.DP_P41[source]
calc(data)[source]
rootparams = ['4OHTRZ41', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P42[source]
calc(data)[source]
rootparams = ['4OHTRZ42', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P43[source]
calc(data)[source]
rootparams = ['4OHTRZ43', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P44[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ44', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P45[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ45', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P46[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ46', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P47[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ47', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P48[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ48', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P49[source]
calc(data)[source]
rootparams = ['4OHTRZ49', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P50[source]
calc(data)[source]
rootparams = ['4OHTRZ50', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P51[source]
calc(data)[source]
rootparams = ['4OHTRZ51', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P52[source]
calc(data)[source]
rootparams = ['4OHTRZ52', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P53[source]
calc(data)[source]
rootparams = ['4OHTRZ53', 'ELBV', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P54[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ54', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_P55[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ55']
time_step = 0.25625
class cheta.derived.thermal.DP_P57[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ57']
time_step = 0.25625
class cheta.derived.thermal.DP_P58[source]
calc(data)[source]
rootparams = ['4OHTRZ58', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P59[source]
calc(data)[source]
rootparams = ['4OHTRZ59', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P60[source]
calc(data)[source]
rootparams = ['4OHTRZ60', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P61[source]
calc(data)[source]
rootparams = ['4OHTRZ61', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P62[source]
calc(data)[source]
rootparams = ['4OHTRZ62', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P63[source]
calc(data)[source]
rootparams = ['4OHTRZ63', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P64[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ64']
time_step = 0.25625
class cheta.derived.thermal.DP_P65[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ65']
time_step = 0.25625
class cheta.derived.thermal.DP_P66[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ66']
time_step = 0.25625
class cheta.derived.thermal.DP_P67[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ67']
time_step = 0.25625
class cheta.derived.thermal.DP_P68[source]
calc(data)[source]
rootparams = ['4OHTRZ68', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P69[source]
calc(data)[source]
rootparams = ['4OHTRZ69', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P75[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ75']
time_step = 0.25625
class cheta.derived.thermal.DP_P76[source]
calc(data)[source]
rootparams = ['4OHTRZ76', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P77[source]
calc(data)[source]
rootparams = ['4OHTRZ77', 'ELBV']
time_step = 0.25625
class cheta.derived.thermal.DP_P78[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ78']
time_step = 0.25625
class cheta.derived.thermal.DP_P79[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ79']
time_step = 0.25625
class cheta.derived.thermal.DP_P80[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ80']
time_step = 0.25625
class cheta.derived.thermal.DP_PABH[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ53', '4OHTRZ54', '4OHTRZ55', '4OHTRZ57', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_PAFTCONE[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ48', '4OHTRZ49', '4OHTRZ50', '4OHTRZ51', '4OHTRZ52', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_PAFTCYL[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ66', '4OHTRZ67', '4OHTRZ68']
time_step = 0.25625
class cheta.derived.thermal.DP_PAHP[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ11', '4OHTRZ12', '4OHTRZ13']
time_step = 0.25625
class cheta.derived.thermal.DP_PCONE[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ61', '4OHTRZ62', '4OHTRZ63']
time_step = 0.25625
class cheta.derived.thermal.DP_PFAP[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ01', '4OHTRZ02', '4OHTRZ03', '4OHTRZ04', '4OHTRZ05', '4OHTRZ06', '4OHTRZ07']
time_step = 0.25625
class cheta.derived.thermal.DP_PFWDCONE[source]
calc(data)[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]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ58', '4OHTRZ59', '4OHTRZ60']
time_step = 0.25625
class cheta.derived.thermal.DP_PHRMA[source]
calc(data)[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]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ25', '4OHTRZ26', '4OHTRZ27', '4OHTRZ28', '4OHTRZ29', '4OHTRZ30', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_PIC[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ23', '4OHTRZ24']
time_step = 0.25625
class cheta.derived.thermal.DP_PMIDCONE[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ41', '4OHTRZ42', '4OHTRZ43', '4OHTRZ44', '4OHTRZ45', '4OHTRZ46', '4OHTRZ47', '4S1PWR05', '4S1PWR06']
time_step = 0.25625
class cheta.derived.thermal.DP_PMNT[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ14', '4OHTRZ15', '4OHTRZ16']
time_step = 0.25625
class cheta.derived.thermal.DP_POBAT[source]
calc(data)[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]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ17', '4OHTRZ18', '4OHTRZ19']
time_step = 0.25625
class cheta.derived.thermal.DP_PPL10[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ08', '4OHTRZ09', '4OHTRZ10']
time_step = 0.25625
class cheta.derived.thermal.DP_PRADVNT[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ64', '4OHTRZ65', '4OHTRZ69']
time_step = 0.25625
class cheta.derived.thermal.DP_PSCSTRUTS[source]
calc(data)[source]
rootparams = ['ELBV', '4OHTRZ75', '4OHTRZ76', '4OHTRZ77', '4OHTRZ78', '4OHTRZ79', '4OHTRZ80']
time_step = 0.25625
class cheta.derived.thermal.DP_PTFTE[source]
calc(data)[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]
calc(data)[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_SUNANGLE[source]
calc(data)[source]
rootparams = ['AOSARES1']
time_step = 0.25625
class cheta.derived.thermal.DP_TABMAX[source]
calc(data)[source]
rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']
time_step = 32.8
class cheta.derived.thermal.DP_TABMIN[source]
calc(data)[source]
rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']
time_step = 32.8
class cheta.derived.thermal.DP_TELAB_AVE[source]
calc(data)[source]
rootparams = ['OOBTHR47', 'OOBTHR42', 'OOBTHR43']
time_step = 32.8
class cheta.derived.thermal.DP_TELHS_AVE[source]
calc(data)[source]
rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']
time_step = 32.8
class cheta.derived.thermal.DP_TELSS_AVE[source]
calc(data)[source]
rootparams = ['OOBTHR51', 'OOBTHR50', 'OOBTHR53', 'OOBTHR52', 'OOBTHR54', 'OOBTHR49']
time_step = 32.8
class cheta.derived.thermal.DP_THSMAX[source]
calc(data)[source]
rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']
time_step = 32.8
class cheta.derived.thermal.DP_THSMIN[source]
calc(data)[source]
rootparams = ['OOBTHR02', 'OOBTHR03', 'OOBTHR06', 'OOBTHR07', 'OOBTHR04', 'OOBTHR05']
time_step = 32.8
class cheta.derived.thermal.DP_TILT_AXIAL[source]
calc(data)[source]
rootparams = ['OOBAGRD3']
time_step = 32.8
class cheta.derived.thermal.DP_TILT_BULK[source]
calc(data)[source]
rootparams = ['OHRTHR43', 'OHRTHR42']
time_step = 32.8
class cheta.derived.thermal.DP_TILT_DIAM[source]
calc(data)[source]
rootparams = ['OOBAGRD6']
time_step = 32.8
class cheta.derived.thermal.DP_TILT_MAX[source]
calc(data)[source]
rootparams = ['OOBAGRD6', 'OOBAGRD3', 'OHRTHR43', 'OHRTHR42']
time_step = 32.8
class cheta.derived.thermal.DP_TILT_RSS[source]
calc(data)[source]
rootparams = ['OOBAGRD6', 'OOBAGRD3', 'OHRTHR43', 'OHRTHR42']
time_step = 32.8
class cheta.derived.thermal.DP_TSSMAX[source]
calc(data)[source]
rootparams = ['OOBTHR51', 'OOBTHR50', 'OOBTHR53', 'OOBTHR52', 'OOBTHR54', 'OOBTHR49']
time_step = 32.8
class cheta.derived.thermal.DP_TSSMIN[source]
calc(data)[source]
rootparams = ['OOBTHR51', 'OOBTHR50', 'OOBTHR53', 'OOBTHR52', 'OOBTHR54', 'OOBTHR49']
time_step = 32.8
class cheta.derived.thermal.DerivedParameterThermal[source]
content_root = 'thermal'
fix_4OHTRZ50(data)[source]
fix_bus_5_and_bus_6(data)[source]

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 a Node 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 states cmd_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 Pitch pitch_comp and off-nominal roll roll_comp which are valid in NPNT, NMAN, NSUN and safe mode.

See: https://nbviewer.jupyter.org/urls/cxc.harvard.edu/mta/ASPECT/ipynb/misc/DAWG-mups-valve-xija-filtering.ipynb

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 as pitch or pcad_mode or acisfp_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 and roll_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, and offset. 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 to self.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