Source code for pml.physics

'''
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] def put_b0(self): pass
[docs] def get_b0(self): pass
[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