Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyaml/arrays/bpm_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def __init__(self, arrayName: str, bpms: list[BPM], use_aggregator=True):
self.__hpos = RWBPMSinglePosition(arrayName, bpms, 0)
self.__vpos = RWBPMSinglePosition(arrayName, bpms, 1)

if use_aggregator:
if use_aggregator and len(bpms) > 0:
aggs = self.get_peer().create_bpm_aggregators(bpms)
self.__hvpos.set_aggregator(aggs[0])
self.__hpos.set_aggregator(aggs[1])
Expand Down
17 changes: 9 additions & 8 deletions pyaml/arrays/element_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,15 @@ def __init__(self, arrayName: str, elements: list[Element], use_aggregator=True)
"""
super().__init__(i for i in elements)
self.__name = arrayName
self.__peer = self[0]._peer if len(self) > 0 else None
self.__use_aggretator = use_aggregator
if self.__peer is None or any([m._peer != self.__peer for m in self]):
raise PyAMLException(
f"{self.__class__.__name__} {self.get_name()}: "
"All elements must be attached to the same instance "
"of either a Simulator or a ControlSystem"
)
if len(elements) > 0:
self.__peer = self[0]._peer if len(self) > 0 else None
self.__use_aggretator = use_aggregator
if self.__peer is None or any([m._peer != self.__peer for m in self]):
raise PyAMLException(
f"{self.__class__.__name__} {self.get_name()}: "
"All elements must be attached to the same instance "
"of either a Simulator or a ControlSystem"
)

def get_peer(self):
"""
Expand Down
2 changes: 1 addition & 1 deletion pyaml/arrays/magnet_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ def __init__(self, arrayName: str, magnets: list[Magnet], use_aggregator=True):
self.__rwstrengths = RWMagnetStrength(arrayName, magnets)
self.__rwhardwares = RWMagnetHardware(arrayName, magnets)

if use_aggregator:
if use_aggregator and len(magnets) > 0:
aggs = self.get_peer().create_magnet_strength_aggregator(magnets)
aggh = self.get_peer().create_magnet_harddware_aggregator(magnets)
self.__rwstrengths.set_aggregator(aggs)
Expand Down
24 changes: 24 additions & 0 deletions tests/test_arrays.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,15 @@
import pytest

from pyaml.accelerator import Accelerator
from pyaml.arrays.bpm import BPM
from pyaml.arrays.bpm import ConfigModel as BPMArrayConfigModel
from pyaml.arrays.bpm_array import BPMArray
from pyaml.arrays.cfm_magnet import CombinedFunctionMagnet
from pyaml.arrays.cfm_magnet import ConfigModel as CombinedFunctionMagnetConfigModel
from pyaml.arrays.cfm_magnet_array import CombinedFunctionMagnetArray
from pyaml.arrays.element_array import ElementArray
from pyaml.arrays.magnet import ConfigModel as MagnetArrayConfigModel
from pyaml.arrays.magnet import Magnet
from pyaml.arrays.magnet_array import MagnetArray
from pyaml.configuration.factory import Factory

Expand Down Expand Up @@ -220,4 +226,22 @@ def test_arrays(install_test_package):
magSH1AC = acfm["model_name:SH1A-*"] # All SH1A magnets (CFMs only)
assert isinstance(magSH1AC, ElementArray) and len(magSH1AC) == 32

# Empty arrays
emptyMag = Magnet(MagnetArrayConfigModel(name="EmptyMag", elements=[]))
emptyMag.fill_array(sr.design) # Attach the array
v = sr.design.get_magnets("EmptyMag").strengths.get() # Ensure good attach
assert np.shape(v) == (0,)

emptyBPM = BPM(BPMArrayConfigModel(name="emptyBPM", elements=[]))
emptyBPM.fill_array(sr.design) # Attach the array
v = sr.design.get_bpms("emptyBPM").positions.get() # Ensure good attach
assert np.shape(v) == (0,)

emptyCFM = CombinedFunctionMagnet(
CombinedFunctionMagnetConfigModel(name="emptyCFM", elements=[])
)
emptyCFM.fill_array(sr.design) # Attach the array
v = sr.design.get_cfm_magnets("emptyCFM").strengths.get() # Ensure good attach
assert np.shape(v) == (0,)

Factory.clear()
Loading