Welcome to parse_cm’s documentation!¶
The parse_cm
package provides functions to read, and in some cases write,
various configured files that are used in Chandra mission planning.
Backstop¶
- parse_cm.backstop.read_backstop(content)¶
Read commands from backstop file or backstop-formatted string.
This function is DEPRECATED for new code. Instead use
kadi.commands.read_backstop
.Note that the
BackstopTable
object returned by this function has acmds
property that can be used to convert to akadi.commands.CommandTable
.Returns a BackstopTable object (derived from astropy Table) which has a row for each backstop command.
Example:
>>> #################################################################################### >>> # THIS FUNCTION IS DEPRECATED for new code, use kadi.commands.read_backstop instead. >>> #################################################################################### >>> >>> from parse_cm import read_backstop >>> backstop_lines = [' 2009:035:04:32:22.516 | 8941534 0 | SIMTRANS | POS= 89824, SCS= 128, STEP= 2244'] >>> read_backstop(backstop_lines) <BackstopTable masked=False length=1> date vcdu type tlmsid scs step params string168 int64 string64 string32 int64 int64 object --------------------- -------- -------- -------- ----- ----- ---------------------------------------- 2009:035:04:32:22.516 89415340 SIMTRANS None 128 2244 {'step': 2244, 'pos': 89824, 'scs': 128}
- Content:
Backstop file name or a list of backstop lines
- Returns:
BackstopTable
- parse_cm.backstop.read_backstop_as_list(content, inline_params=True)¶
Read commands from backstop file or backstop-formatted string.
This function is DEPRECATED. Use
read_backstop(content).cmds.as_list_of_dict()
orkadi.commands.read_backstop(content).as_list_of_dict()
instead.Returns a list of dict objects with keys as follows for each command. Here
params
is the dict of key=val pairs corresponding to the command description and parameters.Example:
>>> from parse_cm import read_backstop_as_list >>> backstop_lines = [' 2009:035:04:32:22.516 | 8941534 0 | SIMTRANS | POS= 89824, SCS= 128, STEP= 2244'] >>> read_backstop_as_list(backstop_lines) [{'pos': 89824, 'scs': 128, 'step': 2244, 'date': '2009:035:04:32:22.516', 'type': 'SIMTRANS', 'vcdu': 89415340}] >>> read_backstop_as_list(backstop_lines, inline_params=False) [{'date': '2009:035:04:32:22.516', 'params': {'pos': 89824, 'scs': 128, 'step': 2244}, 'scs': 128, 'step': 2244, 'tlmsid': 'None', 'type': 'SIMTRANS', 'vcdu': 89415340}]
- Content:
Backstop file name or a list of backstop lines
- Inline_params:
Put params into output dict, otherwise bundle in
params
(default=True)- Returns:
list of dict for each command
- parse_cm.backstop.replace_starcat_backstop(bs, cats)¶
Replace catalog(s) in
bs
structure (Table or list of dict).The
cats
arg must be a dict of catalogs keyed by obsid, where each catalog is in the mica.starcheck Table format with the following columns: ‘slot’, ‘type’ (e.g. ‘GUI’, ‘BOT’), ‘yang’, ‘zang’, ‘sz’ (e.g. ‘4x4’), ‘halfw’, ‘mag’.- Parameters:
bs – backstop Table or list of dict
cats – dict of replacement catalogs
- Returns:
updated backstop
- parse_cm.backstop.write_backstop(content, filename)¶
Write backstop content (Table or list of dict) to file or file-like object. Note that for the list of dict option one must use
inline_params=False
when reading.The example below shows providing the input backstop content as a list of dict (one dict per command). Each command dict must have the following keys: ‘date’, ‘type’, ‘vcdu’, ‘params’. The ‘params’ value is itself a dict with each of the command parameters. The example below should make this clear.
Example:
>>> from parse_cm import write_backstop >>> bs = [ {'date': '2018:182:08:05:08.332', 'type': 'ORBPOINT', 'vcdu': 1148116, 'params': {'type': 'EEF1000', 'scs': 0, 'step': 0} }, {'date': '2018:182:08:08:00.257', 'type': 'COMMAND_SW', 'vcdu': 1148820, 'params': {'tlmsid': 'AONM2NPE', 'hex': '8030601', 'msid': 'AONM2NPE', 'scs': 130, 'step': 6} }, ] >>> write_backstop(bs, 'new.backstop') >>> !cat new.backstop 2018:182:08:05:08.332 | 1148116 0 | ORBPOINT | TYPE= EEF1000, SCS= 0, STEP= 0 2018:182:08:08:00.257 | 1148820 0 | COMMAND_SW | TLMSID= AONM2NPE, HEX= 8030601, ...
In lieu of outputting a file to disk, write_backstop can output to a file-like object instead, as demonstrated in the example below.
Example:
>>> import io >>> out = io.StringIO() >>> write_backstop(bs, filename=out) >>> print(out.getvalue()) 2018:182:08:05:08.332 | 1148116 0 | ORBPOINT | TYPE= EEF1000, SCS= 0, STEP= 0 2018:182:08:08:00.257 | 1148820 0 | COMMAND_SW | TLMSID= AONM2NPE, HEX= 8030601, ...
- Content:
Backstop (Table or list of dict (with Dot file name or a list of dot lines
- Filename:
Output filename or file-like object
Characteristics¶
- parse_cm.characteristics.read_characteristics(content='CHARACTERIS_12OCT15', item=None, raw=False)¶
Read OFLS ODB CHARACTERISTICS file.
If
item
is supplied then only that item is returns.By default any available transformation routines will be applied. Transform routines are any function named
transform_<item>
. This can be disabled by settingraw=True
to get raw values.- Parameters:
content – OFLS ODB characteristics file name or lines
item – return only the
item
characteristicraw – return raw values instead of transforming where possible
- Returns:
dictionary of characteristic values
DOT¶
- parse_cm.dot.read_dot(content)¶
Read commands from dot file or dot-formatted string.
Returns an astropy Table object which has a row for each dot command. Any DOT comments are stored in the Table
meta['comments']
location.Example:
>>> from parse_cm import read_dot >>> lines = [ ... "ATS,MANVR,Q1=-0.462147874359,Q2=-0.632450473022,Q3=0.228874621726, EP06040002", ... "MANSTART=000:00:00:00.000,CHANGE_RATE='FALSE',HW='RWA',FSS='OUT', EP06040002", ... "TIME=2017:007:23:45:36.709 EP06040002"] >>> dot = read_dot(lines) >>> dot.colnames ['type', 'name', 'dot_id', 'params'] >>> dot['params'][0].keys() dict_keys(['Q1', 'Q2', 'Q3', 'MANSTART', 'CHANGE_RATE', 'HW', 'FSS', 'TIME'])
- Content:
Dot file name or a list of dot lines
- Returns:
Table
- parse_cm.dot.read_dot_as_list(content)¶
Read commands from dot file or dot-formatted string.
Returns a list of dict objects with keys as follows for each command. Here
params
is the dict of key=val pairs corresponding to the command description and parameters. Any DOT comments are stored in thecomments
attribute of the returned list.Handles all available DOT files:
>>> from glob import glob >>> from parse_cm.dot import read_dot_as_list >>> for filedot in glob("/data/mpcrit1/mplogs/[12]???/???????/ofls/*dot"): try: dot = read_dot_as_list(filedot) except: print(filedot)
User warning regarding multiple DOT_IDs will be displayed.
Example:
>>> from parse_cm import read_dot_as_list >>> lines = ['ATS,MANVR,Q1=-0.462147874359,Q2=-0.632450473022,Q3=0.228874621726, EP06040002', "MANSTART=000:00:00:00.000,CHANGE_RATE='FALSE',HW='RWA',FSS='OUT', EP06040002", "MECH_MOVE='FALSE',DURATION=000:00:25:24.750, EP06040002", "TIME=2017:007:23:45:36.709 EP06040002"] >>> read_dot_as_list(lines) [{'name': 'MANVR', 'params': {'CHANGE_RATE': 'FALSE', 'DOT_ID': 'EP06040002', 'DURATION': '000:00:25:24.750', 'FSS': 'OUT', 'HW': 'RWA', 'MANSTART': '000:00:00:00.000', 'MECH_MOVE': 'FALSE', 'Q1': -0.462147874359, 'Q2': -0.632450473022, 'Q3': 0.228874621726, 'TIME': '2017:007:23:45:36.709'}, 'type': 'ATS'}]
- Content:
Dot file name or a list of dot lines
- Returns:
list of dict for each command
- parse_cm.dot.replace_starcat_dot(dot, cats)¶
Replace the star catalog for
obsid
withcat
.Functional testing is done in proseco.
The
cats
arg must be a dict of catalogs keyed by obsid, where each catalog is in the mica.starcheck Table format with the following columns: ‘slot’, ‘type’ (e.g. ‘GUI’, ‘BOT’), ‘yang’, ‘zang’, ‘sz’ (e.g. ‘4x4’), ‘halfw’, ‘mag’.- Parameters:
guide_summ – guide summary from read_guide_summary
cats – dict of replacement catalogs
date – optional date for star proper motion
- Returns:
updated DOT
- parse_cm.dot.write_dot(content, filename, orviewer_hrc_bug=False)¶
Write DOT content (Table or list of dict) to file.
Example:
>>> from parse_cm import read_dot, write_dot >>> lines = ['ATS,MANVR,Q1=-0.462147874359,Q2=-0.632450473022,Q3=0.228874621726, EP06040002', "MANSTART=000:00:00:00.000,CHANGE_RATE='FALSE',HW='RWA',FSS='OUT', EP06040002", "TIME=2017:007:23:45:36.709 EP06040002"] >>> dot = read_dot(lines) >>> write_dot(dot, 'new.dot')
- Content:
DOT (as Table or list of dict)
- Filename:
Output filename
- Orviewer_hrc_bug:
Replicate bug in ORviewer DOT output format for HRC params
DOT / FOT request cmd gen¶
The parse_cm.csd
module implements an interpreter for the OP-19 Command
Sequence Definition language. It is used to translate a Detailed Operations
Timeline (DOT) or a FOT request into backstop commands. Some Caveats
apply, but for most commanding the translation is accurate and well-tested.
By default this uses the configured ATS and RTS product files on OCCweb, but you can optionally use local versions of those files.
Examples¶
Translate a DOT to a backstop CommandTable¶
In this example we translate the DOT from MAR2122A into a kadi CommandTable
with the corresponding backstop commands.
First we need to get the DOT file:
>>> from kadi.occweb import get_occweb_page
>>> mar2122a = 'FOT/mission_planning/PRODUCTS/APPR_LOADS/2022/MAR/MAR2122A'
>>> dot = get_occweb_page(f'{mar2122a}/mps/mdMAR2122A.dot', cache=True)
>>> print(dot[:400])
!Schedule generated by MATLAB Tools at: 2022:073:16:05:24.432
ATS,ACQ,MANEUVER='TRUE',NUMENT=12,AQIM1=0,AQY1=-0.00375441, O23840M001
AQZ1=-0.00453566,AQMBRT1=6.00000000,AQMFNT1=8.00000000,AQRES1='H', O23840M001
AQBOX1=1,AQSIZE1=2,AQFLG1=3,AQIM2=1,AQY2=0.01037522,AQZ2=0.00470447, O23840M001
AQMBRT2=6.00000000,AQMFNT2=8.00000000,AQRES2='H',AQBOX2=1,AQSIZE2=2, O23840M001
AQFLG2=3,AQIM
In order to translate the DOT correctly, we need to set continuity. In typical flight planning these values are managed in ORviewer and provided to CMAN, but in this case we do this manually.
>>> from parse_cm.csd import get_initial_globals_from_trp
>>> trp = get_occweb_page(f'{mar2122a}/C079_2001.trp', cache=True)
>>> initial_globals = get_initial_globals_from_trp(trp)
>>> initial_globals
{'G_ACQFLG': 'FALSE',
'G_MANFLG': 'TRUE',
'G_SUNPOSMON': 'ENAB',
'G_TLM_FMT': 2,
'PREV_HRC_DETECTOR': 'HRC-I',
'SHUTTERS_HOME': 'TRUE',
'PREV_HRC_DEF_SETTINGS': 'FALSE',
'HRC_DOOR_OPEN': 'TRUE',
'G_MSFILTER': 'DISA',
'G_IU_ID': 'A',
'G_GRATING_STAT': 'NONE',
'G_98_STATE': 'ENAB'}
We need any FOT requests that were included:
>>> fot_request = get_occweb_page(f'{mar2122a}/fot/MAR2122A_RAD_DM.fot', cache=True)
And finally get the backstop commands from the DOT:
>>> from parse_cm.csd import csd_cmd_gen
>>> cmds = csd_cmd_gen(dot, initial_globals=initial_globals,
... fot_requests=[fot_request])
>>> cmds
date type tlmsid scs params
--------------------- ---------- -------- --- -------------------------
2022:079:20:30:44.820 COMMAND_SW AOACRSTD 128 MSID=AOACRSTD
2022:079:20:31:44.820 COMMAND_SW AOFUNCDS 128 AOPCADSD=21 MSID=AOFUNCDS
2022:079:20:32:44.820 COMMAND_SW AOFUNCDS 128 AOPCADSD=32 MSID=AOFUNCDS
2022:079:20:33:44.820 COMMAND_SW AONMMODE 128 MSID=AONMMODE
2022:079:20:33:44.820 ORBPOINT None 131 POS=91254
... ... ... ... ...
2022:086:22:30:01.285 COMMAND_HW CTXAOF 128 MSID=CTXAOF
2022:086:22:30:01.542 COMMAND_HW CTXBOF 128 MSID=CTXBOF
2022:086:22:30:01.799 COMMAND_HW CPAAOF 128 MSID=CPAAOF
2022:086:22:30:02.056 COMMAND_HW CPABOF 128 MSID=CPABOF
2022:086:22:30:02.313 COMMAND_SW OFMTSNRM 128 MSID=OFMTSNRM
Length = 1416 rows
Translate a FOT request to commands¶
>>> from parse_cm.csd import csd_cmd_gen
>>> fot_req = '''
... RTSLOAD,A_QUP,SCS_NUM=214,
... Q1=0.70546907,
... Q2=0.32988307,
... Q3=0.53440900
... '''
>>> cmds = csd_cmd_gen(fot_req, date='2021:001')
>>> print(cmds)
date type tlmsid scs params
--------------------- ----------- -------- --- ------------------------------------------------------
2021:001:00:00:00.000 MP_TARGQUAT AOUPTARQ 214 Q1=0.70546907 Q2=0.32988307 Q3=0.534409 Q4=0.328477658
Caveats¶
This command generation does not get to the level of CMAN, for instead the SCS is fixed to either 128, 131, or the specified SCS number, and the command “step” number is not generated. However, the key command parameters do match.
ACA hardware commanding via the AAC1CCSC
command is not generated correctly.
Instead you will see commands like AAC1CAL
, AAC1INT
, AAC1HDR
,
and/or AAC1IU
.
By default, the ATS and RTS files which get used in the translation are the
current flight configured products on OCCweb. These are downloaded from OCCweb
as needed. If you translate an older DOT then problems may occur, either
outright failures or command outputs that do not match the actual backstop
commands at the time of original translation. In most cases, apart from
regression testing, this is not an issue. The csd_dir
option of
csd_cmd_gen()
provides a pathway to use a fixed or archived set of ATS / RTS
products.
Testing¶
Testing of this module has included running the command generation for dozens of historical DOT files and comparing the generated commands to the flight backstop. Current regression testing uses MAR2122A, MAR1422A, MAR0722A, FEB2822A, and FEB2122A.
API docs¶
ACIS Tables¶
- parse_cm.acis_tables.get_acis_tables(cfg_file=None, dat_file=None)¶
Parse the ACIS tables (.cfg and .dat files) and retrieve the following information:
From the configuration (.cfg) file: dictionary of SIMODES which contains the number of ACIS command packets, the specific packets used, and the delay times in seconds after each command.
From the data (.dat) file: dictionary of ACIS command packets with word_length, command_opcode, slot_id, file_format, packet_duration, and binary_data.
Looks first for an environment variable $ACIS_TABLES_DIR for the location of the tables, and failing that, looks in $SKA/data/acis_tables.
Parameters¶
- cfg_filestring or Path object, optional
The ACIS tables CFG file to use. Default is “current.cfg.”
- dat_filestring or Path object, optional
The ACIS tables CFG file to use. Default is “current.dat.”
Returns¶
Two Python dictionaries containing the .cfg and .dat table information, in that order.
Examples¶
>>> from parse_cm import get_acis_tables >>> tab_cfg, tab_dat = get_acis_tables() >>> print(tab_cfg["TE_007AC"]) { 'cmd_cnt': 6, 'packets': [ 'WSVIDALLDN', 'WSPOW0CF3F', 'WT007AD024', 'XTZ0000005', 'RS_0000001', 'RH_0000001' ], 'delays': [18, 63, 4, 4, 4, 23] } >>> print(tab_dat["WSPOW0CF3F"]) { 'word_length': 7, 'cmd_type': '', 'slot_id': '', 'file_format': '2', 'packet_duration': 0, 'binary_data': [1792, 26369, 8192, 0, 52992, 256, 16128] }
Translate a DOT or FOT request into backstop commands.
This module implements an interpreter for the OP-19 Command Sequence Definition language. It is used to translate a Detailed Operations Timeline (DOT) or FOT request into backstop commands.
- parse_cm.csd.csd.csd_cmd_gen(csd, *, date=None, fot_requests=None, csd_dir=None, debug=False, initial_globals=None, use_default_globals=False)¶
Parse DOT or FOT request and return a table of commands.
If the input is a FOT request then the
date
should be supplied as the starting date of the commands (defaults to 2000:001).Example:
>>> from parse_cm import csd >>> fot_req = ''' ... RTSLOAD,A_QUP,SCS_NUM=214, ... Q1=0.70546907, ... Q2=0.32988307, ... Q3=0.53440900 ... ''' >>> cmds = csd.csd_cmd_gen(fot_req, date='2021:001') >>> print(cmds) date type tlmsid scs params --------------------- ----------- -------- --- ------------------------------------------------------ 2021:001:00:00:00.000 MP_TARGQUAT AOUPTARQ 214 Q1=0.70546907 Q2=0.32988307 Q3=0.534409 Q4=0.328477658
- Parameters:
csd – str, Path Input file name or text of DOT/FOT request to generate commands.
date – str, optional Starting date of the commands for a FOT request.
fot_requests – list of str, optional Optional list of FOT requests which are prepended to a DOT
csd_dir – str, optional Directory to look for CSD files (with subdirs ATS/ and/or RTS/). If not set or the file is not found then fall back to OCCweb. This parameter is handy for testing or for locally modified CSD files.
debug – bool If True, print debugging information.
initial_globals – dict Dictionary of initial global symbols.
use_default_globals – bool If True, use default global symbols.
- Returns:
CommandTable
- parse_cm.csd.csd.get_initial_globals_from_trp(trp)¶
Get initial globals from command load gen Translation Report (TRP) file.
- Params trp:
str Text of translation report file.
- Returns:
dict Dict of initial globals defined in the TRP file.
- parse_cm.csd.csd.run_csd(csd, *, date=None, fot_requests=None, csd_dir=None, debug=False, initial_globals=None, use_default_globals=False, trace=None, vehicle_only=False, parse_only=False, write_tables=False, yacc_kwargs=None)¶
Low level function to run a CSD file. This is NOT recommended for most users and you should use
csd_cmd_gen()
instead.NOTE: use_default_globals default should be set to False for production.
Example:
>>> from parse_cm import csd >>> from pathlib import Path >>> small_dot = Path(csd.__file__).parent / 'tests' / 'small.dot' >>> bs = csd.run_csd(small_dot, use_default_globals=True) >>> csd.print(backstop) 2012:310:02:59:57.056 COMMAND SCS=128 TLMSID=AOACRSTD MSID=AOACRSTD 2012:310:03:02:57.056 COMMAND SCS=128 TLMSID=AONMMODE MSID=AONMMODE 2012:310:03:02:57.313 COMMAND SCS=128 TLMSID=AONM2NPE MSID=AONM2NPE ... 2012:310:04:28:50.889 COMMAND SCS=128 TLMSID=AOFUNCEN AOPCADSE=21 MSID=AOFUNCEN 2012:310:05:40:01.285 COMMAND SCS=128 TLMSID=CTXAOF MSID=CTXAOF 2012:310:05:40:01.542 COMMAND SCS=128 TLMSID=CTXBOF MSID=CTXBOF 2012:310:05:40:01.799 COMMAND SCS=128 TLMSID=CPAAOF MSID=CPAAOF 2012:310:05:40:02.056 COMMAND SCS=128 TLMSID=CPABOF MSID=CPABOF 2012:310:05:40:02.313 COMMAND SCS=128 TLMSID=OFMTSNRM MSID=OFMTSNRM
- Parameters:
csd – str, Path Input file name or text of DOT/FOT request to generate commands.
date – str, optional Starting date of the commands for a FOT request.
fot_requests – list of str, optional Optional list of FOT requests which are prepended to a DOT
csd_dir – str, optional Directory to look for CSD files (with subdirs ATS/ and/or RTS/). If not set or expected file is not found then fall through to OCCweb. This parameter is handy for testing or for locally modified CSD files.
debug – bool If True, print debugging information and write “parser.out” file into the source directory. Probably can be used only in development repo.
initial_globals – dict Dictionary of initial global symbols.
use_default_globals – bool If True, use default global symbols.
trace – list, optional List of symbols to trace.
vehicle_only – bool If True, only generate vehicle commands.
parse_only – bool If True, only parse the CSD file instead of generating commands.
write_tables – bool If True, write out the “parsetab.py” parser file. This is only needed when developing the parser as it writes into the source directory.
yacc_kwargs – dict Additional keyword arguments to pass to the yacc parser.
- Returns:
list of BaseCommand objects
Guide Summary¶
Read and write a series of PROCESSING REQUEST blocks in the SAUSAGE (formerly OFLS) guide star summary file.
HEADER stuff
...
**** PROCESSING REQUEST ****
ID: 49159 (49159)
X-AXIS RA: 260.676014 DEG.
X-AXIS DEC: -6.693566 DEG.
X-AXIS ROLL (DEG): 226.5501
STARS/FIDUCIAL LIGHTS AC COORDINATES (RAD)
TYPE ID RA(DEG) DEC(DEG) MAG Y-ANGLE Z-ANGLE
**************************************************************************
BOT 665584672 260.3963 -7.0911 8.892 8.36903E-03 1.25645E-03 a2g1
BOT 665715152 260.6428 -6.9459 9.914 3.59573E-03 2.60999E-03 a2g3
BOT 665715344 261.1431 -6.9607 8.648 -2.17797E-03 9.08459E-03 a2g2
BOT 665716160 260.7685 -7.1046 6.983 4.10718E-03 6.10107E-03 a1g1
BOT 665717192 260.8468 -6.0276 8.869 -1.04755E-02 -5.83994E-03 a2g3
BOT 665718480 261.4977 -6.5818 7.249 -1.12048E-02 9.01141E-03 a1g1
BOT 665718576 260.6758 -6.3313 8.203 -4.57547E-03 -4.34249E-03 a1g1
GUI 665715088 260.9592 -7.2511 9.931 3.69483E-03 1.02524E-02 g3
ACQ 665717320 261.0946 -6.5372 9.419 -6.97051E-03 3.39567E-03 a2
- parse_cm.guide_summary.read_guide_summary(content)¶
Parse guide summary into a dict with header lines, footer lines, and a list of dict with star catalog tables. This is not a complete parsing but enough to modify and/or rewrite the file.
- Parameters:
content – filename or list of lines
- Returns:
dict
- parse_cm.guide_summary.replace_starcat_guide_summary(guide_summ, cats, date=None)¶
Replace the star catalog for
obsid
withcat
. Thedate
parameter is used for proper motion in stars. If not supplied then a reasonably-close date is scraped from the guide summary processing time.The
cats
arg must be a dict of catalogs keyed by obsid, where each catalog is in the mica.starcheck Table format with the following columns: ‘slot’, ‘type’ (e.g. ‘GUI’, ‘BOT’), ‘yang’, ‘zang’, ‘sz’ (e.g. ‘4x4’), ‘halfw’, ‘mag’.- Parameters:
guide_summ – guide summary from read_guide_summary
cats – dict of replacement catalogs
date – optional date for star proper motion
- Returns:
updated guide summary structure
- parse_cm.guide_summary.write_guide_summary(guide_summ, filename)¶
Write
guide_summ
dict fromread_guide_summary
back tofilename
.- Parameters:
guide_summ – dict
filename – output filename
Maneuver Summary¶
- parse_cm.maneuver.read_maneuver_summary(content, structured=False)¶
Read maneuver summary content.
Parse maneuver content from the OFLS manuever summary file. This works for MPS MMAN VERSION = 9.40 through 11.0 (from late 2002 onward). By default the initial and final maneuver values (e.g.
q1
,ra
etc) are denoted with a trailing_0
or_1
, respectively:>>> ms = read_maneuver_summary(manvr_summ_file) >>> ms['q1_0'] # initial quaternion element 1 0.123132322
Howevever, if the
structured
arg is set toTrue
then the values are collected into sub-dictsinitial
andfinal
:>>> ms = read_maneuver_summary(manvr_summ_file, structured=True) >>> ms['initial']['q1'] # initial quaternion element 1 0.123132322
- Parameters:
filename – Maneuver summary file name
structured – create initial/final sub-dicts (default=False)
- Return type:
list of dict for each maneuver
OR List¶
- parse_cm.or_list.get_zero_offset_table(content)¶
Extract zero offset table from OR filename or OR text as list of strings
- Parameters:
content – OR list filename or OR list as list of strings
- Returns:
table of zero offset entries
- parse_cm.or_list.read_or_list(content, asdict=False)¶
Read an OR list file or content (DEPRECATED, use read_or_list_full instead)
This uses a legacy parser which is incomplete and does not parse all OR parameters or arguments. The parameter names are adhoc.
An example output is:
{ "chip_id": 7, "chipx": 200.7, "chipy": 476.9, "cycle": 17, "detector": "ACIS-S", "dither_on": "ON", "dither_y_amp": 0.002222, "dither_y_freq": 0.36, "dither_y_phase": 0.0, "dither_z_amp": 0.002222, "dither_z_freq": 0.5091, "dither_z_phase": 0.0, "duration": 25000.0, "grating": "HETG", "mon_dec": -7.735581, "mon_ra": 111.463705, "obsid": 18799, "priority": 5, "si": "ACIS-S", "si_mode": "TE_0088E", "sim_offset_x": 0, "sim_offset_z": 0, "target_dec": 65.719444, "target_name": "Mkn 876", "target_offset_y": 0.0, "target_offset_z": 0.0, "target_ra": 243.488333, }
- Parameters:
content – OR list file name or lines
asdict – return dict instead of list
- Returns:
list of dict ORs or dict of ORs keyed by obsid (if asdict is True)
- parse_cm.or_list.read_or_list_full(content)¶
Read an OR list file or list of lines for an OR.
This returns a nested dict of parameter values keyed by obsid. Parameters that have multiple arguments are represented as a dict. An example output is:
{ "aca_mode": "DEFAULT", "comment": "The proposed observation is an ACIS-HETG observation.", "dither": { "status": "ON", "y_amp": 0.002222, "y_freq": 0.36, "y_phase": 0.0, "z_amp": 0.002222, "z_freq": 0.5091, "z_phase": 0.0, }, "duration": {"nominal": 25000.0}, "grating": "HETG", "id": 18799, "min_acq": 1, "min_guide": 1, "preceding": {"reqid": 18798}, "priority": 5, "roll": {"roll_angle": 105.0, "roll_tolerance": 0.0}, "segment": {"max_number": 1, "min_duration": 22800.0}, "si": "ACIS-S", "si_mode": "TE_0088E", "sim_offset": {"focus_offset": 0, "trans_offset": 0}, "star": {"dec": -7.735581, "mag": 9.0, "ra": 111.463705, "type": "MON"}, "target": {"dec": 65.719444, "name": "Mkn 876", "ra": 243.488333}, "target_offset": {"y_offset": 0.0, "z_offset": 0.0}, "window": { "window_end_time": "2016:067:01:47:50.562", "window_start_time": "2016:067:00:08:52.887", }, "zero_offset": { "chip_id": 7, "chipx": 200.7, "chipy": 476.9, "cycle": 17, "date": "2016-03-05", "detector": "ACIS-S", }, }
In addition to the formal OR parameters, this function puts additional values into the dict for each OR:
‘comment’: OR comment if available
- ‘info’: dict of key/value pairs from OR comment if it conforms to the OR list
machine-readable comments specification.
‘zero_offset’: dict of zero_offset values from the zero-offsets table
The second return value is a list of the comments in the OR list that have ID=49999.
- Parameters:
content – OR list file name or list of lines
- Returns:
(dict, list) Dict of ORs keyed by obsid, list of comments (ID=49999)