Provides a consolidated home for Chandra model specifications, and in particular the flight-approved Xija thermal models. This package has the actual model specification files and a simple accessor method to get the spec by name.
The intent is to remove duplication and potential for mismatches in model versions that are being used. Xija models are currently used in revision controlled code for:
This package provides a mechanism to migrate all of those codes away from using “private” versions of the models to the common flight-approved versions contained here.
Description: | Thermal model of the ACIS focal plane. |
---|---|
Model Name: | ‘acisfp’ |
MSIDs: | FPTEMP_11 |
Description: | Thermal model of the ACIS DEA unit. |
---|---|
Model Name: | ‘dea’ |
MSIDs: | 1DEAMZT |
Description: | Thermal model of the ACIS DPA unit. |
---|---|
Model Name: | ‘dpa’ |
MSIDs: | 1DPAMZT |
Description: | Thermal model of the ACIS PSMC, located on the -Z side of the ISIM, facing the +X direction |
---|---|
Model Name: | ‘psmc’ |
MSIDs: | 1PDEAAT |
Description: | Thermal model of several locations on the -Z side of the spacecraft module. |
---|---|
Model Name: | ‘minusyz’ |
MSIDs: | TEPHIN, TCYLAFT6, PMTANK3T, TMZP_MY |
Description: | Thermal model of a location on the center of the IPS Fuel Tank. |
---|---|
Model Name: | ‘pftank2t’ |
MSIDs: | PFTANK2T |
Description: | Guidelines for ensuring adequate heating of the -Z propulsion fuel lines prior to dwells aft of 156 degrees pitch to prevent these lines from freezing. |
---|
To use the installed flight models:
>>> import chandra_models
>>> import xija
>>> model_spec = chandra_models.get_xija_model_file('acisfp')
>>> model = xija.XijaModel('acisfp', model_spec=model_spec,
start='2012:001', stop='2012:010')
>>> model.make()
>>> model.calc()
The SOT thermal check tools generally have a --model-spec option that specifies the default spec file name. For instance:
parser.add_option("--model-spec",
default=os.path.join(TASK_DATA, 'acisfp_spec.json'),
help="ACIS FOCAL PLANE model specification file")
The updated version would look like:
parser.add_option("--model-spec",
default=chandra_models.get_xija_model_file('acisfp'),
help="ACIS FOCAL PLANE model specification file")
A code like pyger doesn’t have any command line option to specify particular model spec files, it’s hardwired:
class ConstraintTank(ConstraintModel):
def __init__(self, sim_inputs, limits, max_dwell_ksec):
model_spec = os.path.join(pkg_dir, 'pftank2t_model_spec.json')
The new version would look like:
class ConstraintTank(ConstraintModel):
def __init__(self, sim_inputs, limits, max_dwell_ksec):
model_spec = chandra_models.get_xija_model_file('pftank2t')
So how do you override the flight-approved versions for testing development models? Assume you maintain your git repositories in $HOME/git. You would first clone the chandra_models repo as follows:
% cd ~/git
% git clone https://github.com/sot/chandra_models.git
% cd chandra_models/chandra_models/xija
Then you modify the model file of interest, perhaps by running Xija gui_fit.py or something similar.
To use that file to test your application (for instance pyger.py) you would then do:
% setenv PYTHONPATH $HOME/git/chandra_models
% cd ~/git/pyger
% ./pyger.py ...
It’s a very good idea in this case to have some debug logging output that gives the actual name of the model spec file that was used. In fact this is a good idea for every thermal check tool.
Note that a power Python-user would use a virtualenv instead of PYTHONPATH, but that’s another story.
>>> pline = chandra_models.get_pline_guidelines()
>>> print pline
warm_dwell warm_pitch_max dwell_156_162 dwell_156_166 dwell_156_170 dwell_170_180
---------- -------------- ------------- ------------- ------------- -------------
30 80 9:20 7:50 4:20 0:00
12 90 7:00 5:30 3:00 0:00
10 90 6:15 5:10 2:40 0:00
8 90 5:15 4:20 2:15 0:00
8 110 5:00 4:15 2:00 0:00
0 180 0:00 0:00 0:00 0:00
Get Chandra model specifications
Get file name of Xija model specification for the specified model_name.
Supported model names are: 'aca', 'acisfp', 'dea', 'dpa', 'psmc', 'minusyz', and 'pftank2t'.
Example:
>>> import chandra_models
>>> import xija
>>> model_spec = chandra_models.get_xija_model_file('acisfp')
>>> model = xija.XijaModel('acisfp', model_spec=model_spec,
start='2012:001', stop='2012:010')
>>> model.make()
>>> model.calc()
Parameters: | model_name – name of model |
---|---|
Returns: | file name of the corresponding Xija model specification |
Load pline guidelines
Example:
>>> pline = chandra_models.get_pline_guidelines()
>>> print pline
warm_dwell warm_pitch_max dwell_156_162 dwell_156_166 dwell_156_170 dwell_170_180
---------- -------------- ------------- ------------- ------------- -------------
30 80 9:20 7:50 4:20 0:00
12 90 7:00 5:30 3:00 0:00
10 90 6:15 5:10 2:40 0:00
8 90 5:15 4:20 2:15 0:00
8 110 5:00 4:15 2:00 0:00
0 180 0:00 0:00 0:00 0:00
Returns: | Table of pline guidelines |
---|