Source code for shadow4.sources.s4_electron_beam

"""
Defines the shadow4 electron beam.
"""
from syned.storage_ring.electron_beam import ElectronBeam

[docs]class S4ElectronBeam(ElectronBeam): """ Defines an electron beam at a given point of the storage ring. Parameters ---------- energy_in_GeV : float, optional The electron energy in GeV. energy_spread : float, optional The electron energy spread (in a fraction of the energy_in_GeV). current : float, optional The electron beam current intensity in A. moment_xx : float, optional The <x^2> moment. moment_xxp : float, optional The <x x'> moment. moment_xpxp : float, optional The <x'^2> moment. moment_yy : float, optional The <y^2> moment. moment_yyp : float, optional The <y y'> moment. moment_ypyp : float, optional The <y'^2> moment. dispersion_x : float, optional The eta_x parameter, spatial dispersion dispersion_y : float, optional The eta_y parameter, spatial dispersion dispersionp_x : float, optional The eta'_x parameter, angular dispersion dispersionp_y : float, optional The eta'_y parameter, angular dispersion """ def __init__(self, energy_in_GeV = 1.0, energy_spread = 0.0, # not used, but defined for the future. current = 0.1, number_of_bunches = 0, # todo: delete moment_xx = 0.0, moment_xxp = 0.0, moment_xpxp = 0.0, moment_yy = 0.0, moment_yyp = 0.0, moment_ypyp = 0.0, dispersion_x = 0.0, dispersion_y = 0.0, dispersionp_x = 0.0, dispersionp_y = 0.0): super().__init__( energy_in_GeV = energy_in_GeV , energy_spread = energy_spread , current = current , number_of_bunches = number_of_bunches, moment_xx = moment_xx , moment_xxp = moment_xxp , moment_xpxp = moment_xpxp , moment_yy = moment_yy , moment_yyp = moment_yyp , moment_ypyp = moment_ypyp , dispersion_x = dispersion_x, dispersion_y = dispersion_y, dispersionp_x = dispersionp_x, dispersionp_y = dispersionp_y, )
[docs] def to_python_code(self): """ Returns the python code to create the electron beam. Returns ------- str The python code. """ script = "\n# electron beam" script += "\nfrom shadow4.sources.s4_electron_beam import S4ElectronBeam" script += "\nelectron_beam = S4ElectronBeam(energy_in_GeV=%g,energy_spread=%g,current=%g)" % \ (self.energy(), self._energy_spread, self.current()) moment_xx, moment_xxp, moment_xpxp = self.get_moments_horizontal(dispersion=False) moment_yy, moment_yyp, moment_ypyp = self.get_moments_vertical(dispersion=False) if moment_yyp == 0 and moment_xxp == 0: sigma_x, sigma_xp, sigma_y, sigma_yp = self.get_sigmas_all(dispersion=False) script += "\nelectron_beam.set_sigmas_all(sigma_x=%g, sigma_y=%g, sigma_xp=%g, sigma_yp=%g)" % \ (sigma_x, sigma_y, sigma_xp, sigma_yp) else: script += "\nelectron_beam.set_moments_horizontal(%g,%g,%g)" % (moment_xx, moment_xxp, moment_xpxp) script += "\nelectron_beam.set_moments_vertical(%g,%g,%g)" % (moment_yy, moment_yyp, moment_ypyp) dispersion_x, dispersionp_x, dispersion_y, dispersionp_y = self.get_dispersion_all() script += "\nelectron_beam.set_dispersion_all(%g,%g,%g, %g)" % (dispersion_x, dispersionp_x, dispersion_y, dispersionp_y) return script
if __name__ == "__main__": a = S4ElectronBeam() print(a.to_python_code())