seanalsop/acq400_hapi
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
acq400_hapi: acq400 Host API
python module to connect to remote hosts
NB: works with Python 2.7. Does not work with Python 3.x
class Acq400 nails up a socket connection to all the site servers at 4220+s,
as well as running a status monitor thread on 2235 and
allowing access to post-shot data on 53000+ch
each knob on the site is presented as a property of the connection, so that
simple bash-script-like syntax can be used
uut.s0.set_arm=1
Example: running a session interactively while a test loop is running:
>>> import acq400_hapi
>>> uut = acq400_hapi.Acq400("10.12.132.22", monitor=False)
>>> uut.s1.shot
'348'
>>> uut.s1.shot
'348'
>>> uut.s1.shot
'349'
The goal is to make it easy to remote-script multiple uut's.
Example:
from acq400_hapi import *
uut1=acq400.Acq400("acq1001_144")
uut2=acq400.Acq400("acq1001_145")
for ii in range(0,10):
c1 = uut1.s1.SIG_SAMPLE_COUNT_COUNT.split(" ")[1]
c2 = uut2.s1.SIG_SAMPLE_COUNT_COUNT.split(" ")[1]
print("%s %s" % (c1, c2))
11078689363247 11078689363247
11078689363247 11078689363247
11078739404360 11078739404360
11078739404360 11078739404360
11078739404360 11078789398809
11078789398809 11078789398809
11078789398809 11078789398809
11078839399330 11078839399330
11078839399330 11078839399330
... and yes, these are EPICS PV's, so we could use capy.
But, this way, it's all vanilla python, no other installs required.
Note also, knob names eg
SIG:SAMPLE_COUNT:COUNT are auto converted to valid python identifiers:
SIG_SAMPLE_COUNT_COUNT
You can enumerate all the knobs with
uut.s0.help()
..
uut.s6.help()
Help also takes a regex.
uut.s0.help(*COUNT)
Example:
>>> import acq400_hapi
>>> uut = acq400_hapi.Acq400("10.12.132.22", monitor=False)
>>> for f in uut.s0.help('.*FREQ'):
... uut.s0.get_knob(f)
...
'SIG:CLK_EXT:FREQ 25007219'
'SIG:CLK_MB:FREQ 50012464'
'SIG:CLK_S1:FREQ 50010624'
'SIG:CLK_S2:FREQ 0'
'SIG:EVT_EXT:FREQ 0'
'SIG:EVT_MB:FREQ 0'
'SIG:EVT_S1:FREQ 0'
The Acq400 class can be fairly slow to instantiate
(imagine an ACQ2106 with 6 sites populated), but once the connections are
nailed up, then control links are fast.
=> The use case is: make the connection at the beginning, then operate over
long periods.
TODO:
- add a 4210 socket for live stream?.