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
If more than one optional paramters (index, name, type, _pattern) are provided, only return element that meets all these definitions.
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.