Skip to content

Commit 99d7076

Browse files
authored
Merge pull request #101 from xsuite/release/v0.5.3
Release 0.5.3
2 parents a932828 + da0a779 commit 99d7076

File tree

7 files changed

+20
-14
lines changed

7 files changed

+20
-14
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "xcoll"
3-
version = "0.5.2"
3+
version = "0.5.3"
44
description = "Xsuite collimation package"
55
homepage = "https://github.com/xsuite/xcoll"
66
repository = "https://github.com/xsuite/xcoll"

tests/test_adt.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import xcoll as xc
1212
from xpart.test_helpers import flaky_assertions, retry
1313
from xobjects.test_helpers import for_all_test_contexts
14+
import xobjects as xo
1415

1516
num_turns = 25
1617
num_part = 5000
@@ -30,7 +31,7 @@ def test_blow_up(beam, plane, test_context):
3031
tank_start = f'adtk{plane.lower()}.{pos}.a.b{beam}'
3132
tank_end = f'adtk{plane.lower()}.{pos}.d.b{beam}'
3233
adt_pos = 0.5*line.get_s_position(tank_start) + 0.5*line.get_s_position(tank_end)
33-
adt = xc.BlowUp.install(line, name=name, at_s=adt_pos, need_apertures=False, plane=plane,
34+
adt = xc.BlowUp.install(line, name=f'{name}_blowup', at_s=adt_pos, need_apertures=False, plane=plane,
3435
stop_at_turn=num_turns, use_individual_kicks=True)
3536
mon = xc.EmittanceMonitor.install(line, name="monitor", at_s=adt_pos, stop_at_turn=num_turns)
3637

@@ -49,17 +50,17 @@ def test_blow_up(beam, plane, test_context):
4950
# Verify emittances
5051
with flaky_assertions():
5152
if plane == 'H':
52-
nemitt_expected = 9.37e-6 if beam == 1 else 9.70e-6
53-
assert abs(mon.nemitt_x[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
54-
assert abs(mon.nemitt_I[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
53+
nemitt_expected = 6.43e-6 if beam == 1 else 6.46e-6
54+
xo.assert_allclose(mon.nemitt_x[-1], nemitt_expected, rtol=7.5e-2)
55+
xo.assert_allclose(mon.nemitt_I[-1], nemitt_expected, rtol=7.5e-2)
5556
assert mon.nemitt_x.argmin() < 0.05*num_turns
5657
assert mon.nemitt_x.argmax() > 0.95*num_turns
5758
# y should not have changed (max 10%):
5859
assert all([abs(nn-nemitt_y)/nemitt_y < 1.e-1 for nn in mon.nemitt_y])
5960
else:
60-
nemitt_expected = 6.06e-6 if beam == 1 else 6.50e-6
61-
assert abs(mon.nemitt_y[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
62-
assert abs(mon.nemitt_II[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
61+
nemitt_expected = 4.32e-6 if beam == 1 else 4.49e-6
62+
xo.assert_allclose(mon.nemitt_y[-1], nemitt_expected, rtol=7.5e-2)
63+
xo.assert_allclose(mon.nemitt_II[-1], nemitt_expected, rtol=7.5e-2)
6364
assert mon.nemitt_y.argmin() < 0.05*num_turns
6465
assert mon.nemitt_y.argmax() > 0.95*num_turns
6566
# x should not have changed (max 10%):

tests/test_black_absorber.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ def test_black_crystal(test_context, side, sign_R):
175175
y = np.random.uniform(-1, 1, n_part)
176176
py = np.random.uniform(-1, 1, n_part)
177177
part_init = xp.build_particles(x=x, px=px, y=y, py=py, particle_ref=ref)
178-
dri = xt.Drift(length=1) # To send the surviving particles further out
178+
drift_length = 1 # To send the surviving particles further out
179+
dri = xt.Drift(length=drift_length)
179180

180181
for R in [0.87, 3.3, 17]:
181182
R = sign_R*R
@@ -205,15 +206,15 @@ def test_black_crystal(test_context, side, sign_R):
205206
Rx = x_BU + R if sign_R == 1 else x_TU + R
206207

207208
mask_alive = part.state > 0
208-
assert np.allclose(part.s[mask_alive], length+1)
209+
assert np.allclose(part.s[mask_alive], length+drift_length)
209210

210211
# Rotate particles to tilted frame
211212
part_s = part.s * np.cos(np.deg2rad(tilt)) + (part.x - x_BU) * np.sin(np.deg2rad(tilt))
212213
part_x = -part.s * np.sin(np.deg2rad(tilt)) + (part.x - x_BU) * np.cos(np.deg2rad(tilt)) + x_BU
213214

214-
mask_not_end = part.s < length+1
215+
mask_not_end = part.s < length + drift_length
215216
mask_height = (part.y < height/2) & (part.y > -height/2)
216-
mask_front = np.isclose(part_s, 0) & mask_height
217+
mask_front = np.isclose(part_s, 0) & mask_height & mask_not_end
217218
assert np.all(part.state[mask_front] < 1)
218219
assert np.all(part_x[mask_front] <= x_TU)
219220
assert np.all(part_x[mask_front] >= x_BU)

tests/test_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
from xcoll import __version__
77

88
def test_version():
9-
assert __version__ == '0.5.2'
9+
assert __version__ == '0.5.3'
1010

xcoll/beam_elements/blowup.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ def __init__(self, **kwargs):
6161
@classmethod
6262
def install(cls, line, name, *, at_s=None, at=None, need_apertures=True, aperture=None, s_tol=1.e-6, **kwargs):
6363
self = cls(**kwargs)
64+
if name in line.element_names:
65+
raise ValueError(f"Element {name} already exists in the line as {line[name].__class__.__name__}.")
6466
line.insert_element(element=self, name=name, at_s=at_s, at=at, s_tol=s_tol)
6567
self._name = name
6668
self._line = line

xcoll/beam_elements/monitor.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ def __init__(self, **kwargs):
137137
@classmethod
138138
def install(cls, line, name, *, at_s=None, at=None, s_tol=1.e-6, **kwargs):
139139
self = cls(**kwargs)
140+
if name in line.element_names:
141+
raise ValueError(f"Element {name} already exists in the line as {line[name].__class__.__name__}.")
140142
line.insert_element(element=self, name=name, at_s=at_s, at=at, s_tol=s_tol)
141143
self._name = name
142144
self._line = line

xcoll/general.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@
1212
# ======================
1313
# Do not change
1414
# ======================
15-
__version__ = '0.5.2'
15+
__version__ = '0.5.3'
1616
# ======================

0 commit comments

Comments
 (0)