'''
List of available physics objects:
RF
AP
DRIFT
BPM
BEND
QUAD
SEXT
DIPOLE
HSTR
VSTR
HCHICA
VTRIM
HTRIM
MPW12
MPW15
BPM10
source
'''
[docs]class Physics(object):
''' Template class to represent an object for the simulation. '''''
def __init__(self, length):
self.length = length
[docs] def get_length(self, field, handle):
raise NotImplementedError('''This method should be overwritten
in children classes!''')
[docs] def set_length(self, field, unit):
raise NotImplementedError('''This method should be overwritten
in children classes!''')
[docs]class Hchica(Physics):
pass
[docs]class Vtrim(Physics):
pass
[docs]class Htrim(Physics):
pass
[docs]class Mpw12(Physics):
pass
[docs]class Mpw10(Physics):
pass
[docs]class Mpw15(Physics):
pass
[docs]class Bpm10(Physics):
def __init__(self, length, x=0, y=0):
super(Bpm10, self).__init__(length)
self.x = x
self.y = y
[docs]class Source(Physics):
pass
[docs]class Rf(Physics):
def __init__(self, length, voltage=0, frequency=0, harmonic_no=0, time_lag=0):
super(Rf, self).__init__(length)
self.voltage = voltage
self.frequency = frequency
self.harmonic_no = harmonic_no
self.time_lag = time_lag
[docs] def get_voltage(self):
return self.voltage
[docs] def set_voltage(self, value):
self.voltage = value
[docs] def get_frequency(self):
return self.frequency
[docs] def set_frequency(self, value):
self.frequency = value
[docs] def get_harmonic_no(self):
return self.harmonic_no
[docs] def set_harmonic_no(self, value):
self.harmonic_no = value
[docs] def get_time_lag(self):
return self.time_lag
[docs] def set_time_lag(self, value):
self.time_lag = value
[docs]class Ap(Physics):
def __init__(self, length):
super(Ap, self).__init__(length)
self.limits = [0] * 4
[docs]class Drift(Physics):
pass
[docs]class Bpm(Physics):
def __init__(self, length, x=None, y=None):
super(Bpm, self).__init__(length)
self.x = x
self.y = y
[docs] def get_x(self):
return self.x
[docs] def get_y(self):
return self.y
# Magnets
[docs]class Magnet(Physics):
# Should create subclasses of each magnet that inherit MagnetPhysics
# Quad, dipole, corrector, sext
def __init__(self, length, poly_a=0, poly_b=0, r1=0, r2=0, t1=0, t2=0):
super(Magnet, self).__init__(length)
self.poly_a = [0 for _ in range(4)]
self.poly_b = [0 for _ in range(4)]
self.r1 = [[0 for _ in range(6)] for _ in range(6)]
self.r2 = [[0 for _ in range(6)] for _ in range(6)]
self.t1 = [0 for _ in range(6)]
self.t2 = [0 for _ in range(6)]
[docs] def get_poly_a(self, value):
self.poly_a = value
[docs] def set_poly_a(self, value):
self.poly_a = value
[docs] def get_poly_b(self):
return self.poly_b
[docs] def set_poly_b(self, value):
self.poly_b = value
[docs] def get_r1(self):
return self.r1
[docs] def set_r1(self, value):
self.r1 = value
[docs] def get_r2(self):
return self.r2
[docs] def set_r2(self, value):
self.r2 = value
[docs] def get_t1(self):
return self.t1
[docs] def set_t1(self, value):
self.t1 = value
[docs] def get_t2(self):
return self.t2
[docs] def set_t2(self, value):
self.t2 = value
[docs]class Aperture(Physics):
def __init__(self, limits):
assert len(limits) == 4
self.limits = limits
[docs] def get_limits(self):
return self.limits
[docs] def set_limits(self, value):
self.limits = value
[docs]class Bend(Magnet):
pass
[docs]class Quad(Magnet):
def __init__(self, length):
super(Quad, self).__init__(length)
[docs]class Sext(Magnet):
pass
# Correctors
[docs]class Corrector(Magnet):
[docs]class Hstr(Corrector):
pass
[docs]class Vstr(Corrector):
pass
[docs]class Marker(Physics):
def __init__(self):
pass
[docs]class Monitor(Physics):
def __init__(self):
pass
[docs]class RF(Physics):
def __init__(self, voltage, frequency, harmonic_number, time_lag=0):
self.voltage = voltage
self.frequency = frequency
self.harmonic_number = harmonic_number
self.time_lag = time_lag
[docs] def get_voltage(self):
return self.voltage
[docs] def set_voltage(self, value):
self.voltage = value
[docs] def get_frequency(self):
return self.frequency
[docs] def set_frequency(self, value):
self.frequency = value
[docs] def get_harmonic_number(self):
return self.harmonic_number
[docs] def set_harmonic_number(self, value):
self.harmonic_number = value
[docs] def get_time_lag(self):
return self.time_lag
[docs] def set_time_lag(self, value):
self.time_lag = value
[docs]class Dipole(Magnet):
def __init__(self, bending_angle, entrance_angle, exit_angle,
full_gap, fringe_int1, fringe_int2):
self.bending_angle = bending_angle
self.entrance_angle = entrance_angle
self.exit_angle = exit_angle
self.full_gap = full_gap
self.fringe_int1 = fringe_int1
self.fringe_int2 = fringe_int2
[docs] def get_bending_angle(self):
return self.bending_angle
[docs] def set_bending_angle(self, value):
self.bending_angle = value
[docs] def get_entrance_angle(self):
return self.entrance_angle
[docs] def set_entrance_angle(self, value):
self.entrance_angle = value
[docs] def get_exit_angle(self):
return self.exit_angle
[docs] def set_exit_angle(self, value):
self.exit_angle = value
[docs] def get_full_gap(self):
return self.full_gap
[docs] def set_full_gap(self, value):
self.full_gap = value
[docs] def get_fringe_int1(self):
return self.fringe_int1
[docs] def set_fringe_int1(self, value):
self.fringe_int1 = value
[docs] def get_fringe_int2(self):
return self.fringe_int2
[docs] def set_fringe_int2(self, value):
self.fringe_int2 = value