Skip to main content

Element Class

Overview​

The Element class is the minimal atom-layer base class in CPBD. It stores basic geometry and offsets and provides generic create_*_params(...) hooks that transformations can use.

In normal user code, Element is usually not the object placed directly into a lattice. Instead, it is wrapped by an OpticElement subclass such as Quadrupole, Drift, or TDCavity.

from ocelot.cpbd.elements import Quadrupole

quad = Quadrupole(l=0.2, k1=1.0)

print(type(quad.element).__name__) # QuadrupoleAtom
print(quad.k1 == quad.element.k1) # True

Role in the Architecture​

  • stores element physics state such as length, offsets, and tilt
  • provides the hook surface used by transformations
  • supplies generic fallbacks for simple element families
  • serves as a base for more specialized atoms such as Magnet, CavityAtom, and TDCavityAtom

If an atom has has_edge=True, it must also provide the corresponding entrance and exit hooks required by the selected transformation family.

Common Attributes​

  • id (str): element identifier
  • has_edge (bool): whether the element uses entrance and exit maps
  • l (float): length in meters
  • angle (float): bending angle in radians
  • tilt (float): roll angle around the beam axis
  • dx, dy (float): transverse offsets
  • width, height, color: plotting metadata
  • params (dict): extra element-specific parameters

Default Hook Methods​

create_first_order_main_params(energy, delta_length=None)​

Builds generic first-order parameters for the main body of the element and returns a FirstOrderParams object. This is the default linear optics hook used by TransferMap if a family does not override it.

create_second_order_main_params(energy, delta_length=0.0)​

Builds generic second-order parameters and returns a SecondOrderParams object. It is a fallback implementation for families without a dedicated nonlinear model.

create_delta_e(total_length, delta_length=0.0)​

Returns the reference-energy change across the element. The default implementation returns 0.0, so active RF-like families override it when they need energy gain.

get_transfer_geometry()​

Returns the reference-trajectory geometry for the element. In the base class this is the straight-element case.

Notes on Specialization​

Concrete atoms usually override only the hooks that matter for their physics model. For example:

  • DriftAtom provides a specialized first-order map
  • Magnet adds magnetic strengths and kick hooks
  • CavityAtom adds RF-specific hooks and energy gain
  • BendAtom adds entrance and exit edge hooks

This makes Element a small but important base class: transformations do not contain element-specific physics formulas themselves. Instead, they request the needed parameter objects from the atom.

Summary​

Element is the foundation of the atom layer. It stores the physical state of an element and exposes the hook methods from which transformations build their runtime maps.