Skip to content

Commit

Permalink
Merge pull request #101 from xsuite/release/v0.5.3
Browse files Browse the repository at this point in the history
Release 0.5.3
  • Loading branch information
freddieknets authored Sep 30, 2024
2 parents a932828 + da0a779 commit 99d7076
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "xcoll"
version = "0.5.2"
version = "0.5.3"
description = "Xsuite collimation package"
homepage = "https://github.com/xsuite/xcoll"
repository = "https://github.com/xsuite/xcoll"
Expand Down
15 changes: 8 additions & 7 deletions tests/test_adt.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import xcoll as xc
from xpart.test_helpers import flaky_assertions, retry
from xobjects.test_helpers import for_all_test_contexts
import xobjects as xo

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

Expand All @@ -49,17 +50,17 @@ def test_blow_up(beam, plane, test_context):
# Verify emittances
with flaky_assertions():
if plane == 'H':
nemitt_expected = 9.37e-6 if beam == 1 else 9.70e-6
assert abs(mon.nemitt_x[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
assert abs(mon.nemitt_I[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
nemitt_expected = 6.43e-6 if beam == 1 else 6.46e-6
xo.assert_allclose(mon.nemitt_x[-1], nemitt_expected, rtol=7.5e-2)
xo.assert_allclose(mon.nemitt_I[-1], nemitt_expected, rtol=7.5e-2)
assert mon.nemitt_x.argmin() < 0.05*num_turns
assert mon.nemitt_x.argmax() > 0.95*num_turns
# y should not have changed (max 10%):
assert all([abs(nn-nemitt_y)/nemitt_y < 1.e-1 for nn in mon.nemitt_y])
else:
nemitt_expected = 6.06e-6 if beam == 1 else 6.50e-6
assert abs(mon.nemitt_y[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
assert abs(mon.nemitt_II[-1]-nemitt_expected)/nemitt_expected < 7.5e-2
nemitt_expected = 4.32e-6 if beam == 1 else 4.49e-6
xo.assert_allclose(mon.nemitt_y[-1], nemitt_expected, rtol=7.5e-2)
xo.assert_allclose(mon.nemitt_II[-1], nemitt_expected, rtol=7.5e-2)
assert mon.nemitt_y.argmin() < 0.05*num_turns
assert mon.nemitt_y.argmax() > 0.95*num_turns
# x should not have changed (max 10%):
Expand Down
9 changes: 5 additions & 4 deletions tests/test_black_absorber.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,8 @@ def test_black_crystal(test_context, side, sign_R):
y = np.random.uniform(-1, 1, n_part)
py = np.random.uniform(-1, 1, n_part)
part_init = xp.build_particles(x=x, px=px, y=y, py=py, particle_ref=ref)
dri = xt.Drift(length=1) # To send the surviving particles further out
drift_length = 1 # To send the surviving particles further out
dri = xt.Drift(length=drift_length)

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

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

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

mask_not_end = part.s < length+1
mask_not_end = part.s < length + drift_length
mask_height = (part.y < height/2) & (part.y > -height/2)
mask_front = np.isclose(part_s, 0) & mask_height
mask_front = np.isclose(part_s, 0) & mask_height & mask_not_end
assert np.all(part.state[mask_front] < 1)
assert np.all(part_x[mask_front] <= x_TU)
assert np.all(part_x[mask_front] >= x_BU)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@
from xcoll import __version__

def test_version():
assert __version__ == '0.5.2'
assert __version__ == '0.5.3'

2 changes: 2 additions & 0 deletions xcoll/beam_elements/blowup.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ def __init__(self, **kwargs):
@classmethod
def install(cls, line, name, *, at_s=None, at=None, need_apertures=True, aperture=None, s_tol=1.e-6, **kwargs):
self = cls(**kwargs)
if name in line.element_names:
raise ValueError(f"Element {name} already exists in the line as {line[name].__class__.__name__}.")
line.insert_element(element=self, name=name, at_s=at_s, at=at, s_tol=s_tol)
self._name = name
self._line = line
Expand Down
2 changes: 2 additions & 0 deletions xcoll/beam_elements/monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ def __init__(self, **kwargs):
@classmethod
def install(cls, line, name, *, at_s=None, at=None, s_tol=1.e-6, **kwargs):
self = cls(**kwargs)
if name in line.element_names:
raise ValueError(f"Element {name} already exists in the line as {line[name].__class__.__name__}.")
line.insert_element(element=self, name=name, at_s=at_s, at=at, s_tol=s_tol)
self._name = name
self._line = line
Expand Down
2 changes: 1 addition & 1 deletion xcoll/general.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
# ======================
# Do not change
# ======================
__version__ = '0.5.2'
__version__ = '0.5.3'
# ======================

0 comments on commit 99d7076

Please sign in to comment.