Using PlateMaker through DOS¶
Preparing the test environment¶
Cleaning the working directory¶
The examples here assume a clean working directory, which needs to be set
by the data_dir
parameter in the PLATEMAKER
role definition in the
example platemaker.ini
file, found in $PLATEMAKER_DIR/etc
.
Make sure the parent directory exists:
>>> from os import mkdir
>>> try:
... mkdir('/tmp/test_platemaker_data')
... except FileExistsError:
... pass
but the test subdirectory does not. (PlateMaker
generates it
automatically.):
>>> from shutil import rmtree
>>> try:
... rmtree('/tmp/test_platemaker_data/52254')
... except FileNotFoundError:
... pass
Loading test input data¶
These examples require data to be provided to PlateMaker
. These
can be loaded from test_data
in the PlateMaker
product:
>>> from PlateMaker import test_data
>>> seq_id = test_data.seq_id
>>> instrument = test_data.inst_name
>>> targets = test_data.targets
>>> gfa_images = test_data.gfa_images
>>> fvc_image = test_data.fvc_image
>>> initial_merged_fvc_spots = test_data.initial_merged_fvc_spots
>>> merged_fvc_spots = test_data.merged_fvc_spots
Preparing to interact using PML¶
The architect with a PlateMaker
role needs to be up and running,
and the environment variables need to be set up so that the python
process can find it, for example with dos_env.csh
.
Then, start a python interactive process and establish a connection
to the PlateMaker
role:
>>> from DOSlib.PML import dos_connection
>>> pm = dos_connection('PLATEMAKER')
>>> pm.execute('configure')
'SUCCESS'
>>> pm.execute('set', instrument=instrument)
'SUCCESS'
Running nfsproc
¶
The first step in running nfsproc
, and indeed required before any
PlateMaker
processing steps can be completed, is to set a
seq_id
:
>>> pm.execute('set', seq_id=seq_id)
'SUCCESS'
nfsproc
can be run thus:
>>> pm.execute('set', targets=targets)
'SUCCESS'
>>> pm.execute('nfsproc')
'SUCCESS'
Note that the set
and the nfsproc
executions can be combined
into a single call:
>>> pm.execute('nfsproc', targets=targets)
'SUCCESS'
After nfsproc
is run, the data can be retrieved thus:
>>> nfs_data = pm.execute('get', 'nfs_data')
>>> fiducial_pos = pm.execute('get', 'fiducial_pos')
>>> center = pm.execute('get', 'center')
>>> prism = pm.execute('get', 'prism')
Running fidproc
¶
The next step is running fidproc
, which can be run thus:
>>> pm.execute('set', merged_fvc_spots=initial_merged_fvc_spots)
'SUCCESS'
>>> pm.execute('fidproc')
'SUCCESS'
>>> fiber_pos = pm.execute('get', 'fiber_pos')
>>> positioner_pos = pm.execute('get', 'positioner_pos')
Running posproc
¶
- Get some fake data to send to posproc::
>>> positioner_true = test_data.positioner_true
The next step is running posproc
, which can be run thus:
>>> pm.execute('set', positioner_true=positioner_true)
'SUCCESS'
>>> pm.execute('posproc')
'SUCCESS'
>>> fiber_pos = pm.execute('get', 'fiber_pos')
Running gfaproc
¶
gfaproc
can be run thus:
>>> pm.execute('gfaproc', gfa_images=gfa_images)
'SUCCESS'
Like nfsproc
, the parameters can be provided in a separate set
execution. If they are unchanged sinces the previous execution, they
need not be provided again. For example, when run after the
nfsproc
example above, the gfaproc
example could have been
simplified to:
>>> pm.execute('gfaproc', gfa_images=gfa_images)
'SUCCESS'
because nfs_data
is already set correctly by the previous
execution of nfsproc
.
After gfaproc
is run, the data can be retrieved thus:
>>> gfa_guide = pm.execute('get', 'gfa_guide')
>>> gfa_center = pm.execute('get', 'gfa_center')
>>> gfa_data = pm.execute('get', 'gfa_data')
Note that the gfa_data
parameter is not expected to be useful
except as input to fvcproc
, and even then probably will never need
to be retrieved explicitly.
Running fvcproc
¶
fvcproc
can be run thus:
>>> pm.execute('fvcproc', merged_fvc_spots=merged_fvc_spots)
'SUCCESS'
Again, when run after prior commands which have provided the necessary data, the previously provided keywords may be omitted:
>>> pm.execute('fvcproc', merged_fvc_spots=merged_fvc_spots)
'SUCCESS'
After fvcproc
is run, the data can be retrieved thus:
>>> positioner_corr = pm.execute('get', 'positioner_corr')
>>> fibermap = pm.execute('get', 'fibermap')