flame_utils.core package

Submodules

flame_utils.core.element module

Operations about FLAME machine elements, lattice is a special element.

flame_utils.core.element.get_all_types(latfile=None, _machine=None)[source]

Get all unique types from a FLAME machine or lattice file.

Parameters
latfile:

FLAME lattice file.

_machine:

FLAME machine object.

Returns
list

None if failed, or list of valid element types’ string names.

flame_utils.core.element.get_all_names(latfile=None, _machine=None)[source]

Get all uniqe names from a FLAME machine or lattice file.

Parameters
latfilestr

FLAME lattice file.

_machine :

FLAME machine object.

Returns
str or None

None if failed, or list of valid element types’ string names.

flame_utils.core.element.inspect_lattice(latfile=None, out=None, _machine=None)[source]

Inspect FLAME lattice file, print a lattice information report, if failed, print nothing.

Parameters
latfile :

FLAME lattice file.

out :

output stream, stdout by default.

_machine :

FLAME machine object.

Returns
None

None if failed, or print information.

Examples

>>> from flame import Machine
>>> from phantasy import flameutils
>>> latfile = 'lattice/test.lat'
>>> m = Machine(open(latfile, 'r'))
>>> flameutils.inspect_lattice(_machine=m)
Inspecting lattice: <machine>
==============================
TYPE        COUNT   PERCENTAGE
------------------------------
SOURCE       1       0.08
STRIPPER     1       0.08
QUADRUPOLE   40      3.22
BPM          75      6.04
SOLENOID     78      6.28
SBEND        80      6.44
RFCAVITY     117     9.42
ORBTRIM      120     9.66
DRIFT        730    58.78
>>> # pass the latfile parameter
>>> flameutils.inspect_lattice(latfile=latfile)
Inspecting lattice: test.lat
==============================
TYPE        COUNT   PERCENTAGE
------------------------------
SOURCE       1       0.08
STRIPPER     1       0.08
QUADRUPOLE   40      3.22
BPM          75      6.04
SOLENOID     78      6.28
SBEND        80      6.44
RFCAVITY     117     9.42
ORBTRIM      120     9.66
DRIFT        730    58.78
>>>
>>> ## write inspection message to other streams
>>> # write to file
>>> fout = open('test.out', 'w')
>>> flameutils.inspect_lattice(latfile=latfile, out=fout)
>>> fout.close()
>>>
>>> # write to string
>>> from StringIO import StringIO
>>> sio = StringIO()
>>> flameutils.inspect_lattice(latfile=latfile, out=sio)
>>> retstr = sio.getvalue()
flame_utils.core.element.get_element(latfile=None, index=None, name=None, type=None, **kws)[source]

Inspect FLAME lattice element, return properties.

Parameters
latfilestr

FLAME lattice file.

indexint

(list of) Element index(s).

namestr

(list of) Element name(s).

typestr

(list of) Element type(s).

Returns
reslist of dict or []

List of dict of properties or empty list

See also

get_index_by_name, get_index_by_type
get_intersection()

Get the intersection of input valid list/tuple.

Notes

    1. If more than one optional paramters (index, name, type, _pattern) are provided, only return element that meets all these definitions.

    2. If getting by multiple indices/names/types, the order of returned list is void.

  • Invalid element names or type names will be ignored.

Examples

>>> from flame import Machine
>>> from phantasy import flameutils
>>> latfile = 'lattice/test.lat'
>>> ename = 'LS1_CA01:CAV4_D1150'
>>> e = flameutils.get_element(name=ename, latfile=latfile)
>>> print(e)
[{'index': 27, 'properties': {'aper': 0.017, 'name': 'LS1_CA01:CAV4_D1150',
  'f': 80500000.0, 'cavtype': '0.041QWR', 'L': 0.24, 'phi': 325.2,
  'scl_fac': 0.819578, 'type': 'rfcavity'}}]
>>> # use multiple filters, e.g. get all BPMs in the first 20 elements
>>> e = flameutils.get_element(_machine=m, index=range(20), type='bpm')
>>> print(e)
[{'index': 18, 'properties': {'name': 'LS1_CA01:BPM_D1144', 'type': 'bpm'}},
 {'index': 5, 'properties': {'name': 'LS1_CA01:BPM_D1129', 'type': 'bpm'}}]
>>> # all these filters could be used together, return [] if found nothing
>>>
>>> # get names by regex
>>> e = flameutils.get_element(_machine=m, _pattern='FS1_BBS:DH_D2394_1.?')
>>> print(e)
[{'index': 1092, 'properties': {'L': 0.104065, 'aper': 0.07,
  'bg': 0.191062, 'name': 'FS1_BBS:DH_D2394_1', 'phi': 4.5, 'phi1': 7.0,
  'phi2': 0.0, 'type': 'sbend'}},
 {'index': 1101, 'properties': {'L': 0.104065, 'aper': 0.07,
  'bg': 0.191062, 'name': 'FS1_BBS:DH_D2394_10', 'phi': 4.5, 'phi1': 0.0,
  'phi2': 7.0, 'type': 'sbend'}}]
flame_utils.core.element.get_index_by_type(type='', latfile=None, rtype='dict', _machine=None)[source]

Get element(s) index by type(s).

Parameters
typestr or list of str

Single element type name or list[tuple] of element type names.

latfile :

FLAME lattice file, preferred.

rtypestr

Return type, ‘dict’ (default) or ‘list’.

_machine :

FLAME machine object.

Returns
inddict or list

Dict, key is type name, value if indice list of each type name, list, of indices list, with the order of type.

See also

flatten()

flatten recursive list.

Notes

If rtype is list, list of list would be returned instead of a dict, flatten() function could be used to flatten the list.

Examples

>>> from flame import Machine
>>> from phantasy import flameutils
>>> latfile = 'lattice/test.lat'
>>> m = Machine(open(latfile, 'r'))
>>> types = 'stripper'
>>> print(flameutils.get_index_by_type(type=types, latfile=latfile))
{'stripper': [891]}
>>> print(flameutils.get_index_by_type(type=types, _machine=m))
{'stripper': [891]}
>>> types = ['stripper', 'source']
>>> print(flameutils.get_index_by_type(type=types, latfile=latfile))
{'source': [0], 'stripper': [891]}
>>> # return a list instead of dict
>>> print(flameutils.get_index_by_type(type=types, latfile=latfile, rtype='list'))
[[891], [0]]
flame_utils.core.element.get_index_by_name(name='', latfile=None, rtype='dict', _machine=None)[source]

Get index(s) by name(s).

Parameters
namestr or list of str

Single element name or list[tuple] of element names

latfile :

FLAME lattice file, preferred.

rtypestr

Return type, ‘dict’ (default) or ‘list’.

_machine :

FLAME machine object.

Returns
inddict or list

dict of element indices, key is name, value is index, list of element indices list

See also

flatten()

flatten recursive list.

Notes

If rtype is list, list of list would be returned instead of a dict, flatten() function could be used to flatten the list.

Examples

>>> from flame import Machine
>>> from phantasy import flameutils
>>> latfile = 'lattice/test.lat'
>>> m = Machine(open(latfile, 'r'))
>>> names = 'LS1_CA01:SOL1_D1131_1'
>>> print(flameutils.get_index_by_name(name=names, latfile=latfile))
{'LS1_CA01:SOL1_D1131_1': [8]}
>>> print(flameutils.get_index_by_name(name=names, _machine=m))
{'LS1_CA01:SOL1_D1131_1': [8]}
>>> names = ['LS1_CA01:SOL1_D1131_1', 'LS1_CA01:CAV4_D1150',
>>>          'LS1_WB01:BPM_D1286', 'LS1_CA01:BPM_D1144']
>>> print(flameutils.get_index_by_name(name=names, latfile=latfile))
{'LS1_CA01:SOL1_D1131_1': [8], 'LS1_WB01:BPM_D1286': [154],
 'LS1_CA01:BPM_D1144': [18], 'LS1_CA01:CAV4_D1150': [27]}
>>> # return a list instead of dict
>>> print(flameutils.get_index_by_name(name=names, latfile=latfile, rtype='list'))
[[8], [27], [154], [18]]
flame_utils.core.element.get_names_by_pattern(pattern='.*', latfile=None, _machine=None)[source]

Get element names by regex defined by pattern.

Parameters
patternstr

Regex to search element name.

latfile :

FLAME lattice file, preferred.

_machine :

FLAME machine object.

Returns
namesList

List of element names, if not found, return None.

flame_utils.core.element.insert_element(machine=None, index=None, element=None)[source]

Insert new element to the machine.

Parameters
machine :

FLAME machine object.

index :

Insert element before the index (or element name).

element :

Lattice element dictionary. e.g. {‘name’:xxx, ‘type’:yyy, ‘L’:zzz}

Returns
machineFLAME machine object.