Source code for pyaml.arrays.bpm
from ..common.element_holder import ElementHolder
from .array import ArrayConfig, ArrayConfigModel
# Define the main class name for this module
PYAMLCLASS = "BPM"
[docs]
class ConfigModel(ArrayConfigModel):
"""Configuration model for :py:class:`.BPMArray`."""
[docs]
class BPM(ArrayConfig):
"""
:py:class:`.BPMArray` configuration.
Example
-------
Here is an example using a yaml configuration file:
.. code-block:: yaml
arrays: # Global array section
- type: pyaml.arrays.bpm # Type of array
name: BPM # Name of the array
elements: # Element names
- BPM_C04-01
- BPM_C04-02
- BPM_C04-03
A :py:class:`.BPMArray` configuration can also be created by code using the
following example:
.. code-block:: python
>>> from pyaml.arrays.bpm import BPM,ConfigModel as BPMArrayConfigModel
>>> bpm_cfg = BPM(BPMArrayConfigModel(
name="BPM",
elements=["BPM_C04-01","BPM_C04-02","BPM_C04-03"]
))
"""
def __init__(self, cfg: ArrayConfigModel):
super().__init__(cfg)
[docs]
def fill_array(self, holder: ElementHolder):
"""
Fill the :py:class:`.BPMArray` using element holder
(:py:class:`~pyaml.lattice.simulator.Simulator`
or :py:class:`~pyaml.control.controlsystem.ControlSystem`)
and add the array to the holder. This method is called when an
:py:class:`~pyaml.accelerator.Accelerator` is loaded but can be
used to create arrays by code as shown bellow:
.. code-block:: python
>>> bpm_cfg.fill_array(sr.design) # For arrays created on the fly
>>> orbit = sr.design.get_bpms("BPM").positions.get()
>>> print(orbit)
[[ 6.02736506e-10 0.00000000e+00]
[-3.06292158e-08 0.00000000e+00]
[-2.80366116e-08 0.00000000e+00]]
Parameters
----------
holder : ElementHolder
The element holder to populate the :py:class:`.BPMArray` with.
"""
holder.fill_bpm_array(self._cfg.name, self._cfg.elements)