mbtrack2.tracking.ibs module

Module for intrabeam scattering computations.

class IntrabeamScattering(ring: Synchrotron, model: str, n_points: int = 1000, n_bin: int = 100)[source]

Bases: Element

Intrabeam scattering class computes the IBS growth rate analytically each turn and apply corresponding kicks to each particle according to the following models:

Piwinski Standard (PS):

Uses classical model that computes the sum of scattering events based on Rutherford formalism [1].

Piwinski Modified (PM):

Modification of the PS model in order to take into account the dispersion and the variation of the optic functions around the ring [2].

Bane (Bane):

Approximation for high-energy beams which allows computing a single scattering integral instead of two [3].

Completely integrated modified Piwinski model (CIMP):

Approximating elliptic integral as a special Legendre function [4].

Parameters:

ring: Synchrotron object

Ring to consider.

bunch: Bunch or Beam object

Bunch or Beam object which will be tracked.

model: {‘CIMP’,’Bane’,’PM’,’PS’}
Implemented computational models for computing the growth rate T_(x,y,p):

CIMP: the CIMP model [4]. Bane: the Bane model [3]. PM: the modified model of Piwinski [2]. PS: the standard model of Piwinski [1].

n_points: int, optional

Number of partitions (sampling) of the optics functions (depends on the lattice complexity), can use a lower value if the beta function is simpler, thus gaining computation speed. The Default is 1000

n_bin: int, optional

Number of bins for the bunch.binning profile function. Will determine the number of slices for the profile function. If the value of n_bin is greater than 1 the kick method will compute the kick[5], applying momentum change according to the positions of each macroparticle with respect to the density of macroparticles in that position. If n_bin is set to 1, the kick will be computed assuming Rho(z) as a uniform distribution. The Default is 100.

Methods:

initialize(bunch):

Initializes the dynamic parameters at each turn, modifies the class variables according to the selected model.

scatter():

Computes the scattering integrals according to the selected model.

get_scatter_T():

Computes the growth rate from the scattering integrals.

kick(bunch, T_x, T_y, T_p):

Tracking method of IntrabeamScattering takes T_(x,y,p) and apply momentum change to the coordinates of macroparticles inside the bunch.

References:

[1] A. Piwinski, Intra-Beam-Scattering, (1974). http://dx.doi.org/10.5170/CERN-1992-001.226 [2] K. L. F. Bane, A Simplified Model of Intrabeam Scattering, in 8th European Particle Accelerator Conference (Paris, France, 2002), p. 1443. https://doi.org/10.48550/arXiv.physics/0206002 [3] K. L. F. Bane, H. Hayano, K. Kubo, T. Naito, T. Okugi, and J. Urakawa, Intrabeam Scattering Analysis of Measurements at KEK’s Accelerator Test Facility Damping Ring, Phys. Rev. ST Accel. Beams 5, 084403 (2002). https://doi.org/10.1103/PhysRevSTAB.5.084403 [4] K. Kubo, S. K. Mtingwa, and A. Wolski, Intrabeam Scattering Formulas for High Energy Beams, Phys. Rev. ST Accel. Beams 8, 081001 (2005). https://doi.org/10.1103/PhysRevSTAB.8.081001 [5] R. Bruce, J. M. Jowett, M. Blaskiewicz, and W. Fischer, Time Evolution of the Luminosity of Colliding Heavy-Ion Beams in BNL Relativistic Heavy Ion Collider and CERN Large Hadron Collider, Phys. Rev. ST Accel. Beams 13, 091001 (2010). https://doi.org/10.1103/PhysRevSTAB.13.091001

__init__(ring: Synchrotron, model: str, n_points: int = 1000, n_bin: int = 100)[source]
initialize(bunch: Bunch)[source]

Initializes the dynamic parameters at each turn, modifies the class variables according to the selected model.

Parameters

bunch: Bunch or Beam object

Bunch or Beam object which will be tracked.

scatter()[source]

Computes the scattering integrals according to the selected model.

Returns

If self.model == “PM” or “PS”:
vabq, v1aq, v1bq: arrays

Array of scattering integral values at each point around the ring.

If self.model == “Bane”:
gval: array

Array of scattering integral values at each point around the ring.

If self.model == “CIMP”:
g_ab, g_ba: arrays

Array of analytical function g(a/b) and g(b/a) respectively, that simulate the integrals at each point around the ring.

get_scatter_T(vabq=None, v1aq=None, v1bq=None, g_ab=None, g_ba=None, gval=None)[source]
Computes the growth rate from the scattering integrals:

Piwinski: Eq. (16-18) in [2]. Bane: Eq (14) and (20) in [3]. CIMP: Eq (35-37) in [4].

The growth rate can be defined as:

1/T_ibs = 1/sigma * d(sigma)/dt

Parameters

If self.model == “PM” or “PS”:
vabq, v1aq, v1bq: arrays

Takes integral values from scatter() method. The default is None.

If self.model == “Bane”:
gval: array

Takes elliptical integral array from scatter() method. The default is None.

If self.model == “CIMP:

g_ab, g_ba: arrays Takes analytical function arrays, g(a/b) and g(b/a) respectively. The default is None.

Returns

T_x: float

Average IBS growth rate on the horizontal plane over the entire ring in [1/s].

T_y: float

Average IBS growth rate on the vertical over the entire ring in [1/s].

T_p: float

Average IBS growth rate on the longitudinal plane over the entire ring int [1/s].

kick(bunch: Bunch, T_x: float, T_y: float, T_p: float)[source]

Apply kick to the bunch coordinates by converting growth rate to momentum change [1].

Parameters

bunchObject

Bunch or Beam object.

T_pfloat

Growth rate of ‘delta’ in [1/s].

T_xfloat

Growth rate of ‘xp’ in [1/s].

T_yfloat

Growth rate of ‘yp’ in [1/s].

Reference:

[1] R. Bruce, J. M. Jowett, M. Blaskiewicz, and W. Fischer, Time Evolution of the Luminosity of Colliding Heavy-Ion Beams in BNL Relativistic Heavy Ion Collider and CERN Large Hadron Collider, Phys. Rev. ST Accel. Beams 13, 091001 (2010). https://doi.org/10.1103/PhysRevSTAB.13.091001

_abc_impl = <_abc._abc_data object>
track(bunch: Bunch | Beam)[source]

Tracking method of IntrabeamScattering takes T_(x,y,p) and apply momentum change to the coordinates of macroparticles inside the bunch.

parameters:

bunch: Object

Bunch or Beam object.