def test_create_radiation_undulator(self): undulator_test = Undulator(K=1.87, period_length=0.035, length=0.035 * 14) electron_beam_test = ElectronBeam(Electron_energy=1.3, I_current=1.0) source_test = SourceUndulatorPlane(undulator=undulator_test, electron_beam=electron_beam_test) traj_fact = TrajectoryFactory(Nb_pts=1001, method=TRAJECTORY_METHOD_ANALYTIC) traj = traj_fact.create_from_source(source_test) rad_fact = RadiationFactory( photon_frequency=source_test.harmonic_frequency(1), method=RADIATION_METHOD_NEAR_FIELD) rad = rad_fact.create_for_one_relativistic_electron(trajectory=traj, source=source_test) self.assertFalse(rad.X is None) self.assertFalse(rad.Y is None) self.assertFalse(rad.distance is None) rad_fact.method = RADIATION_METHOD_APPROX_FARFIELD rad2 = rad_fact.create_for_one_relativistic_electron( trajectory=traj, source=source_test) self.assertTrue(rad2.distance == None) rad2 = rad_fact.create_for_one_relativistic_electron( trajectory=traj, source=source_test, distance=rad.distance) self.assertFalse(rad.distance == None) err = rad.difference_with(rad2) self.assertTrue(rad.XY_are_similar_to(rad2)) self.assertTrue(rad.XY_are_similar_to(err)) self.assertTrue(rad.distance == rad2.distance) self.assertTrue(err.distance == rad2.distance) self.assertGreaterEqual(err.intensity.min(), 0.0) self.assertLessEqual(err.max(), rad.max() * 1e-1) # srio changed 1e-3 by 1e-1 traj_test2 = TrajectoryFactory( Nb_pts=1001, method=TRAJECTORY_METHOD_ODE, initial_condition=traj_fact.initial_condition).create_from_source( source_test) rad3 = rad_fact.create_for_one_relativistic_electron( trajectory=traj_test2, source=source_test, distance=rad.distance) err = rad2.difference_with(rad3) self.assertLessEqual(err.max(), rad2.max() * 1e-3)
def Exemple_FARFIELD(): from pySRU.MagneticStructureUndulatorPlane import MagneticStructureUndulatorPlane as Undulator from pySRU.ElectronBeam import ElectronBeam from pySRU.SourceUndulatorPlane import SourceUndulatorPlane from pySRU.TrajectoryFactory import TrajectoryFactory,TRAJECTORY_METHOD_ODE,TRAJECTORY_METHOD_ANALYTIC import time undulator_test = Undulator(K=1.87, period_length=0.035, length=0.035 * 14) electron_beam_test = ElectronBeam(Electron_energy=1.3, I_current=1.0) magnetic_field_test = undulator_test.create_magnetic_field() magnetic_field_test.plot_z(0,0,np.linspace(-0.035 * (14+8) / 2,0.035 * (14+8) / 2,500)) source_test = SourceUndulatorPlane(undulator=undulator_test, electron_beam=electron_beam_test, magnetic_field=magnetic_field_test) traj = TrajectoryFactory(Nb_pts=2000, method=TRAJECTORY_METHOD_ODE).create_from_source(source_test) t0 = time.time() Rad = RadiationFactory(photon_frequency=source_test.harmonic_frequency(1), method=RADIATION_METHOD_APPROX_FARFIELD, Nb_pts=101 ).create_for_one_relativistic_electron(trajectory=traj, source=source_test) print("Elapsed time in RadiationFactory: ",time.time()-t0) print('Screen distance :') print(Rad.distance) print("screen shape ") print(Rad.intensity.shape) print('X max :') print(Rad.X.max()) print('Y max :') print(Rad.Y.max()) print('intensity max ()') print(Rad.max()) print('plot') Rad.plot(title="FAR FIELD")
def test_create_radiation_undulator(self): undulator_test = Undulator(K=1.87, period_length=0.035, length=0.035 * 14) electron_beam_test = ElectronBeam(Electron_energy=1.3, I_current=1.0) source_test=SourceUndulatorPlane(undulator=undulator_test, electron_beam=electron_beam_test) traj_fact=TrajectoryFactory(Nb_pts=1001, method=TRAJECTORY_METHOD_ANALYTIC) traj=traj_fact.create_from_source(source_test) rad_fact = RadiationFactory(photon_frequency=source_test.harmonic_frequency(1), method=RADIATION_METHOD_NEAR_FIELD) rad=rad_fact.create_for_one_relativistic_electron(trajectory=traj, source=source_test) self.assertFalse(rad.X is None) self.assertFalse(rad.Y is None) self.assertFalse(rad.distance is None) rad_fact.method=RADIATION_METHOD_APPROX_FARFIELD rad2=rad_fact.create_for_one_relativistic_electron(trajectory=traj, source=source_test) self.assertTrue(rad2.distance == None) rad2=rad_fact.create_for_one_relativistic_electron(trajectory=traj, source=source_test,distance=rad.distance) self.assertFalse(rad.distance == None) err=rad.difference_with(rad2) self.assertTrue(rad.XY_are_similar_to(rad2)) self.assertTrue(rad.XY_are_similar_to(err)) self.assertTrue(rad.distance == rad2.distance) self.assertTrue(err.distance == rad2.distance) self.assertGreaterEqual(err.intensity.min(),0.0) self.assertLessEqual(err.max(), rad.max()*1e-1) # srio changed 1e-3 by 1e-1 traj_test2=TrajectoryFactory(Nb_pts=1001, method=TRAJECTORY_METHOD_ODE, initial_condition=traj_fact.initial_condition).create_from_source(source_test) rad3=rad_fact.create_for_one_relativistic_electron(trajectory=traj_test2,source=source_test,distance=rad.distance) err = rad2.difference_with(rad3) self.assertLessEqual(err.max(),rad2.max()*1e-3)
def test_copy(self): K = 1.87 lambda_u = 0.035 L = 0.035 * 14 E=1.3 I=1.0 undulator = Undulator(K=K, period_length=lambda_u, length=L) beam=ElectronBeam(Electron_energy=E, I_current=I) source=SourceUndulatorPlane(undulator=undulator, electron_beam=beam) source2=source.copy() source2.electron_beam.I_current=0.3 self.assertEqual(source.I_current(),1.0) self.assertEqual(source2.I_current() ,0.3) self.assertAlmostEqual(source.harmonic_frequency(1)/1e17, 2.5346701615509917,5) self.assertAlmostEqual(source.Lorentz_factor(), 2544.0367765521196,2 ) self.assertAlmostEqual(source.electron_speed(), 0.99999992274559524,5) self.assertEqual(source.magnetic_structure.period_number(), 14) self.assertAlmostEqual(source.choose_distance_automatic(2),49.000000000000,10 )
def test_copy(self): K = 1.87 lambda_u = 0.035 L = 0.035 * 14 E = 1.3 I = 1.0 undulator = Undulator(K=K, period_length=lambda_u, length=L) beam = ElectronBeam(Electron_energy=E, I_current=I) source = SourceUndulatorPlane(undulator=undulator, electron_beam=beam) source2 = source.copy() source2.electron_beam.I_current = 0.3 self.assertEqual(source.I_current(), 1.0) self.assertEqual(source2.I_current(), 0.3) self.assertAlmostEqual( source.harmonic_frequency(1) / 1e17, 2.5346701615509917, 5) self.assertAlmostEqual(source.Lorentz_factor(), 2544.0367765521196, 2) self.assertAlmostEqual(source.electron_speed(), 0.99999992274559524, 5) self.assertEqual(source.magnetic_structure.period_number(), 14) self.assertAlmostEqual(source.choose_distance_automatic(2), 49.000000000000, 10)