from SimulationFramework.Framework_objects import frameworkElement
from pydantic import computed_field, Field
[docs]
class sextupole(frameworkElement):
"""
Class defining a sextupole element
"""
length: float = Field(gt=0.0)
"""Length of magnet -- must be greater than zero"""
k2l: float = 0.0
"""Sextupole strength"""
n_kicks: int = 20
"""Number of kicks for sextupole tracking"""
strength_errors: list = [0]
"""Sextupole strength errors"""
@computed_field
@property
def k2(self) -> float:
"""
Sextupole strength in m^-3
Returns
-------
float
Sextupole strength
"""
return self.k2l / self.length
@k2.setter
def k2(self, k2: float) -> None:
"""
Setter for sextupole strength
Parameters
----------
k3: float
Sextupole strength
"""
self.k2l = self.length * k2
@property
def dk2(self) -> float:
"""
Normalised sextupole strength error
Returns
-------
float:
Sextupole strength error
"""
return self.strength_errors[0]
@dk2.setter
def dk2(self, dk2: float) -> None:
"""
Setter for sextupole strength error
Parameters
----------
dk3: float
Sextupole strength error
"""
self.strength_errors[0] = dk2
def _write_GPT(self, Brho, ccs="wcs", *args, **kwargs):
ccs_label, value_text = ccs.ccs_text(self.middle, self.rotation)
output = (
str(self.objecttype)
+ "( "
+ ccs.name
+ ", "
+ ccs_label
+ ", "
+ value_text
+ ", "
+ str(self.length)
+ ", "
+ str(-Brho * self.k2)
+ ");\n"
)
return output