def test_dipole(): d = elements.Dipole('dipole', 1.0, 0.01) assert d.MaxOrder == 0 assert len(d.PolynomA) == 2 assert d.K == 0.0 d = elements.Dipole('dipole', 1.0, 0.01, -0.5) assert d.MaxOrder == 1 assert len(d.PolynomA) == 2 assert d.K == -0.5 d = elements.Dipole('dipole', 1.0, 0.01, PolynomB=[0.0, 0.1, 0.0]) assert d.MaxOrder == 1 assert len(d.PolynomA) == 3 assert d.K == 0.1 d = elements.Dipole('dipole', 1.0, 0.01, PolynomB=[0.0, 0.0, 0.005]) assert d.MaxOrder == 2 assert len(d.PolynomA) == 3 assert d.K == 0.0 d = elements.Dipole('dipole', 1.0, 0.01, PolynomB=[0.0, 0.0, 0.005], MaxOrder=0) assert d.MaxOrder == 0 assert len(d.PolynomA) == 3 assert d.K == 0.0
def test_lattice_energy_radiation_periodicity(): d = elements.Dipole('d1', 1, BendingAngle=numpy.pi/16, Energy=5.e+6, PassMethod='BndMPoleSymplectic4RadPass') lat = Lattice([d], name='lattice', energy=3.e+6) assert lat.energy == 3.e+6 assert lat.periodicity == 32 assert lat.radiation is True
def test_lattice_voltage_harmonic_number(): rf = elements.RFCavity('rf', 0, 0.2e6, 0.5e9, 5, 3.e6) d = elements.Dipole('d1', 2.99792458, BendingAngle=numpy.pi/5) lat = Lattice([rf, d], name='lattice') assert lat.energy == 3.e+6 assert lat.periodicity == 10 assert lat.rf_voltage == 2e6 assert lat.revolution_frequency == 10.e6 assert lat.harmonic_number == 50 assert lat.radiation is True
def test_lattice_creation_short_scan_reads_radiation_status_correctly(): d = elements.Dipole('d1', 1, BendingAngle=numpy.pi, Energy=5.e+6, PassMethod='BndMPoleSymplectic4RadPass') lat = Lattice([d], name='lattice', energy=3.e+6, periodicity=32) assert len(lat) == 1 assert lat.name == 'lattice' assert lat.energy == 3.e+6 assert lat.periodicity == 32 assert lat._radiation is True
def test_lattice_creation_from_lattice_inherits_attributes(): d = elements.Dipole('d1', 1, BendingAngle=numpy.pi, Energy=5.e+6, PassMethod='BndMPoleSymplectic4RadPass') lat1 = Lattice([d], name='lattice', energy=3.e+6, periodicity=32, an_attr=12) lat2 = Lattice(lat1, another_attr=5) assert id(lat1) != id(lat2) assert len(lat2) == 1 assert lat2.name == 'lattice' assert lat2.energy == 3.e+6 assert lat2.periodicity == 32 assert lat2.radiation is True assert lat2.another_attr == 5 with pytest.raises(AttributeError): assert lat2.an_attr == 12
def test_divide_splits_attributes_correctly(): pre = elements.Drift('drift', 1) post = pre.divide([0.2, 0.5, 0.3]) assert len(post) == 3 assert sum([e.Length for e in post]) == pre.Length pre = elements.Dipole('dipole', 1, KickAngle=[0.5, -0.5], BendingAngle=0.2) post = pre.divide([0.2, 0.5, 0.3]) assert len(post) == 3 assert sum([e.Length for e in post]) == pre.Length assert sum([e.KickAngle[0] for e in post]) == pre.KickAngle[0] assert sum([e.KickAngle[1] for e in post]) == pre.KickAngle[1] assert sum([e.BendingAngle for e in post]) == pre.BendingAngle pre = elements.RFCavity('rfc', 1, voltage=187500, frequency=3.5237e+8, harmonic_number=31, energy=6.e+9) post = pre.divide([0.2, 0.5, 0.3]) assert len(post) == 3 assert sum([e.Length for e in post]) == pre.Length assert sum([e.Voltage for e in post]) == pre.Voltage
def test_lattice_energy_is_not_defined_raises_AtError(): d = elements.Dipole('d1', 1, BendingAngle=numpy.pi) with pytest.raises(AtError): Lattice([d])
def test_bndstrmpole_symplectic_4_pass(rin): bend = elements.Dipole('b', 1.0) bend.PassMethod = 'BndStrMPoleSymplectic4Pass' l = Lattice([bend], name='lat', energy=3e9) atpass(l, rin, 1)