In [1]:
import phantasy
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
mp = phantasy.MachinePortal(machine='FRIB_FLAME', segment='LINAC')
In [3]:
mp.inspect_mconf()
Out[3]:
In [4]:
mp.load_lattice('LS1')
# Please note: 'LS1' maybe not consistent with the real configuration, just for demonstration.
# The configuration for 'LS1' segment should be updated.
Out[4]:
In [5]:
mp.lattice_names
Out[5]:
In [6]:
# Current working lattice:
mp.work_lattice_name
Out[6]:
In [7]:
# Switch lattice to 'LINAC'
mp.use_lattice('LINAC')
Out[7]:
In [8]:
# Current working lattice now:
mp.work_lattice_name
Out[8]:
Currently (phantasy of version 0.5.0), one can operate lattice by explicitly getting working lattice,
The future plan is most operation should be able to reach through MachinePortal.
In [9]:
lat = mp.work_lattice_conf
In [10]:
print("Lattice name : %s" % lat.name)
print("Machine name : %s" % lat.mname)
print("Lattice groups : %s" % lat.group.keys())
## more to be shown, not final version.
In [11]:
# Invalid name:
lat.get_elements(name='NOEXISTS')
Out[11]:
In [12]:
# name:
lat.get_elements(name='FS1_BMS:DCV_D2662')
Out[12]:
In [13]:
# name pattern
lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'])
Out[13]:
In [14]:
# multiple filters, e.g. type:
lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'], type='BPM')
assert lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'], type='BPM') == \
lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'], type='BP?')
In [15]:
# with hybrid types:
lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'], type=['BPM', 'QUAD'])
Out[15]:
In [16]:
# get sub-lattice regarding to s-position range:
lat.get_elements(srange=(10, 11))
Out[16]:
In [17]:
# multiple filters with srange:
lat.get_elements(name=['FS1_B?*D266?', 'LS1_B*DCV*'], type=['BPM', 'QUAD'], srange=(154, 155))
Out[17]:
In [18]:
# locate reference element:
ref_elem = lat.get_elements(name='*')[6]
In [19]:
ref_elem
Out[19]:
In [20]:
# get the next element of ref_elem, i.e. the first element downstream
lat.next_elements(ref_elem)
Out[20]:
In [21]:
# get the last one of the next two elements
lat.next_elements(ref_elem, count=2)
Out[21]:
In [22]:
# get all of the next two elements
lat.next_elements(ref_elem, count=2, range='0::1')
Out[22]:
In [23]:
# get all of the two elements before ref_elem
lat.next_elements(ref_elem, count=-2, range='0::1')
Out[23]:
In [24]:
# get the next two BPM elements of ref_elem,
# return including ref_elem itself
lat.next_elements(ref_elem, count=2, type=['BPM'], ref_include=True, range='0::1')
Out[24]:
In [25]:
# with hybrid types
lat.next_elements(ref_elem, count=2, type=['BPM', 'CAV'], range='0::1')
Out[25]: