11. Synchrotron Radiation#
11.1. History#
Synchrotron radiation was first observed in GE synchrotron on 1946.

Fig. 11.1 GE synchrotron#

Fig. 11.2 First paper of SR#
Then it was realized as the major obstacle to achieve higher electron energy in a ring accelerator. Since the radiation power is scaled as:
11.2. The Lienard- Wiechert Potential#
We are interested in the E-M field generated by a moving charged particle Suppose the charge particle has determined trajectory \(\mathbf{r}_0(t_r)\), the time \(t_r\) is the time at the charged particle. The observer located at \(P\) as position \(\mathbf{r}=\mathbf{r}_0(t_r) + \mathbf{R}(t_r)\). The time \(t\) is related to \(t_r\) by:
\(t_r\) is the retarded time. The time derivative of \(t_r\) is given by:
from \(R^2=\mathbf{R}\cdot\mathbf{R}\), we have
So the \(t_r\) ‘s derivative is :
From the wave form of the Maxwell equation of one particle:
Here, the charged density and current density are
The scalar and vector potential are
Then the potentials reduces to
Both are evaluated at time \(t_r\).
Show code cell source
import numpy as np
import matplotlib.pyplot as plt
%matplotlib widget
def cir_rtd_potential(theta, radius=1, boundary=10, ngrid=300, gamma=1000):
beta_amp=np.sqrt(1-1/gamma**2)
position=np.array([np.cos(theta), np.sin(theta)])*radius
velocity=np.array([np.cos(theta+np.pi/2), np.sin(theta+np.pi/2)])*beta_amp
x=np.linspace(-boundary/2.0, boundary/2.0, ngrid)
y=np.linspace(-boundary/2.0, boundary/2.0, ngrid)
xx,yy=np.meshgrid(x,y)
rdist=np.sqrt((xx-position[0])**2+(yy-position[1])**2)
betadotr=(velocity[0]*(xx-position[0])+velocity[1]*(yy-position[1]))/rdist
phi=1/(1-betadotr)/rdist
return xx, yy, phi
r=1
theta=3*np.pi/12
xx, yy, phi=cir_rtd_potential(theta, radius=r, gamma=500)
fig, ax=plt.subplots()
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
circle = plt.Circle( (0., 0. ), r ,fill = False, color='C3', alpha=0.5 )
ax.add_artist(circle)
ax.set_aspect('equal')
mask=xx*xx+yy*yy>1.3*r*r
ax.contour(xx, yy, phi, np.linspace(np.min(phi[mask]**0.5), np.max(phi[mask]**0.5),20, endpoint=True)**2, alpha=0.5)
ax.scatter([r*np.cos(theta),], [r*np.sin(theta),], c='C2', alpha=0.5)
<matplotlib.collections.PathCollection at 0x10eae47a0>
The fields therefore can be calculated as from
To evaluate these differential operations, it is important to know the following relations:
And we know that
Therefore we can gather all useful relations below:
The the electric field gives:
The magnetic field gives:
The first term does not involve acceleration, which described a ‘uniformly’ moving charge (see “The classical Theory of Fields” by Landau and Lifshitz). After a Lorentz transform, tt is just the static electric field from a charged particle. The emitted energy from this term is zero. Therefore only the contribution from the second term ‘radiates’ out, which is consequence of \(\boldsymbol{\dot{\beta}}\), or acceleration.
11.3. Radiation Field and Flux#
The Poynting vector of the radiation term gives (using the fact \(\mathbf{\hat{R}}\cdot \mathbf{E}=0\)):
The power dissipates in the unit solid angle gives, evalutated as source is :
11.3.1. Non-relativistic limit#
In this limit, the approximation \(\boldsymbol{\beta} \ll 1 \) is made, which leads to:
\(\mathbf{\hat{R}}-\boldsymbol{\beta} \approx \mathbf{\hat{R}}\)
\(1-\boldsymbol{\beta}\cdot\mathbf{\hat{R}} \approx 1\)
Then the power flux gives:
Here we establish the spherical coordinate system along \(\mathbf{\dot{v}}\) and the angle between \(\mathbf{\dot{v}}\) and \(\mathbf{\hat{R}}\) is \(\theta\). Therefore the total power is simply:
Which reduces to the Larmor’s formula
11.3.2. General Case#
In accelerator, we are interested in relativistic case. We start with
We need to establish a spherical coordinate system to go further. Let’s assume \(\boldsymbol{\beta}=\beta(0,0,1)\), \(\boldsymbol{\dot{\beta}}=\dot{\beta}(\sin\Theta,0,\cos\Theta)\) and \(\mathbf{\hat{R}}=(\sin\theta\cos\phi,\sin\theta\sin\phi,\cos\theta)\) and the result is calculated below by Sympy package.
Show code cell source
import sympy
from sympy.physics.vector import ReferenceFrame
sympy.init_printing()
bth,th,ph=sympy.symbols(r"\Theta, \theta, \phi")
beta,dbeta=sympy.symbols(r"\beta, \dot{\beta}")
ref=ReferenceFrame('N')
beta=1*ref.z*beta
beta_dot=(sympy.sin(bth)*ref.x+sympy.cos(bth)*ref.z)*dbeta
r_hat=sympy.sin(th)*sympy.cos(ph)*ref.x+sympy.sin(th)*sympy.sin(ph)*ref.y+sympy.cos(th)*ref.z
temp1=r_hat.dot(beta_dot)*(r_hat-beta)-(1-r_hat.dot(beta))*beta_dot
temp1=sympy.simplify(temp1.magnitude()*temp1.magnitude())
temp2=(1-r_hat.dot(beta))*(1-r_hat.dot(beta))
temp2*=temp2
temp2*=(1-r_hat.dot(beta))
ang_dep=temp1/temp2
sympy.simplify(ang_dep.subs(bth,sympy.pi/2).subs(ph,ph))
int1=sympy.integrate(temp1/temp2, (ph,0,2*sympy.pi))
u,v=sympy.symbols(r"u,v")
int2=sympy.simplify(int1.subs(th, sympy.acos(u)))
#int2=sympy.simplify(int2.subs(u, (1+v)/ba))
intg1=sympy.simplify(sympy.integrate(int2, u))
sympy.simplify(intg1.subs(u,1)-intg1.subs(u,-1))

We have derived the total power that emitted by an accelerated beam. The first term in the parentheses is the contribution from beam acceleration. The second term is the contribution from the bending term.
11.3.2.1. Radiation in linac#
In a linac, the total radiation power is:
It is more convenient to convert the change of velocity to the energy. From \(\beta^2\gamma^2=\gamma^2-1\), we have
Therefore:
The angular dependence becomes:
when the beam is ultra-relativistic, \(\beta\approx 1-\frac{1}{2\gamma^2}\), \(\sin\theta\approx\theta\), and \(\cos\theta\approx 1-\theta^2/2\), therefore, the angular distribution becomes:
The maximum angle locates at \(\theta\sim\frac{1}{\gamma}\).
Show code cell source
import matplotlib.pyplot as plt
import numpy as np
%matplotlib widget
fig,ax=plt.subplots()
ax.set_xlabel(r"$\theta$")
ax.set_ylabel(r"Power")
def power_dis(theta, beta):
return np.sin(theta)*np.sin(theta)/np.power(1.0-beta*np.cos(theta),5.0)
theta=np.linspace(0,np.pi/4,200)
betas=[0.8, 0.9,0.95,0.99]
for be in betas:
ax.semilogy(theta, power_dis(theta,be), label=r'$\beta$={}'.format(be))
ax.legend(loc='best');
Show code cell source
import matplotlib.pyplot as plt
import numpy as np
beta=0.9999
z=np.linspace(-2,20.0,1000)
x=np.linspace(-1.0,1.0,400)
zz,xx=np.meshgrid(z,x)
theta=np.arctan2(xx,zz)
r2=zz*zz+xx*xx
srp=np.sin(theta)*np.sin(theta)/np.power(1.0-beta*np.cos(theta),5.0)/r2
fig,ax=plt.subplots()
ax.set_ylabel("x [m]")
ax.set_xlabel("z [m]")
con=ax.contour(zz,xx,np.log(srp))
ax.clabel(con);
11.3.2.2. Radiation in dipole#
In the magnetic field, the velocity only changes its direction, \(\boldsymbol{\dot\beta}\perp\boldsymbol{\beta}\), and the amplitude is
Then the total power is:
We try to re-express the power in terms of the classical radius \(r_0\) and radiation constant \(C_\gamma\), who are defined as:
Then
For different particle species the constant \(C_\gamma\) gives:
The total energy radiated of the ring will be:
The angular distribution can be found as:
Show code cell source
import matplotlib.pyplot as plt
import numpy as np
beta=0.9999
gamma=1/np.sqrt(1-beta*beta)
print(gamma)
z=np.linspace(-2,20.0,1000)
x=np.linspace(-1.0,1.0,1000)
zz,xx=np.meshgrid(z,x)
theta=np.arctan2(xx,zz)
r2=zz*zz+xx*xx
sphi=1
sphith=sphi*np.sin(theta)/gamma
cth=np.cos(theta)
srp=(sphith*sphith+(beta-cth)*(beta-cth))/np.power(1.0-beta*cth,5.0)/r2
fig,ax=plt.subplots()
ax.set_ylabel("x [m]")
ax.set_xlabel("z [m]")
con=ax.contour(zz,xx,np.log(srp))
ax.clabel(con);
70.71244595191452
In the relativistic limit, we have
The power will drop significantly when \(\theta \gg 1/\gamma\).
11.4. Radiation Spectrum#
11.4.1. Qualitative analysis#

Fig. 11.3 Cartoon of an ESR#
We are interested in an electron storage ring. The retarded time interval of shining the SR cone to a far field target is
Convert to the observer’s time:
Therefore the frequency content is approximated with:
11.4.2. Quantitative analysis#
To study the frequency spectrum of the synchrotron radiation, we return to the flux, evaluated at the observation point gives
We define an amplitude radiation function which is the square root of the flux:
Then the frequency content is given by Fourier transform:
Now we have to use far field approximation to proceed. We know that \(\mathbf{R}=\mathbf{r}-\mathbf{r}_0\). The far field approximation implies \(\left|\mathbf{r}\right|\gg\left|\mathbf{r}_0\right|\), then
Then the frequency spectrum becomes
Here we use the relation below and integration by part:
Here we found the frequency spectrum of the radiation amplitude. However, what we can measure is the total radiation energy per solid angle:
Therefore we will then focus on the spectrum of the energy:

Fig. 11.4 Coordinates for calculation#
Now we concentrate on the spectrum of an electron storage ring with coordinate as shown.
Assume \(\mathbf{r}_0\) is along a ring with radius \(\rho\), therefore:
Here, \(\omega_0\) is the angular revolution frequency. The velocity therefore gives
And the unit vector \(\mathbf{\hat{R}}\) in spherical coordinate is written as:
We may only consider the tangential plane (\(y\)-\(z\)), without losing generality, viz. \(\phi=\pi/2\). Therefore
Also we use the following assumption:
small cone size \(\theta\sim1/\gamma \ll 1\)
short retarded time interval \(\omega_0t_r \ll 1\)
We have:
and
Now, we redefine the variable \(a\equiv\gamma\theta\sim 1\), and further define:
Here we define the critical frequency of synchrotron radiation:
Then, we have:
The spectrum of the energy flux finally reduces to:
Clearly, the total frequency spectrum of the radiation intensity consists the contribution from two transverse components \({G}_x\) and \({G}_y\). The integral yields the modified Bessel functions of the second kind:
Then the frequency spectrum becomes
We are interest in the frequency range of the characteristic frequency of the SR. Using the definition of critical frequency, \(\omega_c=3\gamma^3\omega_0/2\):
The two terms of modified Bessel function corresponds to the contribution from the horizontal and vertical polarized radiation field respectively.
We see that in the bending plane, \(a=\gamma\theta=0\), the radiation is purely horizontal polarized.
Show code cell source
import matplotlib.pyplot as plt
import numpy as np
import scipy.special as special
%matplotlib widget
fig, ax=plt.subplots()
ax.set_xlim(1e-5,10)
ax.set_ylim(1e-8,1)
ax.set_xlabel(r'$\omega/\omega_c$')
ax.set_ylabel(r'$\sim dI/ d\omega$')
omega_ratio=np.logspace(-6,1,1000)
for a in [0,1,2,5]:
xi=omega_ratio/2.0*(1+a*a)**1.5
k23=special.kv(2.0/3,xi)
k13=special.kv(1.0/3,xi)
Igx=xi*xi*k23*k23
Igy=xi*xi*k13*k13
ax.loglog(omega_ratio, (Igx+a*a*Igy/(1+a*a))/(1+a*a), label=r'$\gamma\theta={}$'.format(a))
ax.legend(loc='best');
We see that the spectrum is broad band and sudden drops when the the frequency exceeds the critical frequency.
Recall that:
Therefore, the energy spectrum can be achieved by integrating all solid angles:
By defining
which satisfy \(\int_0^{\infty}S(\xi)d\xi=1\), we will rewrite the energy spectrum as:
Show code cell source
import matplotlib.pyplot as plt
import numpy as np
import scipy.special as special
import pickle
%matplotlib widget
omega_ratio=np.logspace(-6,1,10001)
xi=np.sqrt((omega_ratio[:-1]*omega_ratio[1:]))
k53=special.kv(5.0/3,xi)
diff=np.diff(omega_ratio)
allsum=np.sum(k53*diff)
intg=allsum-np.cumsum(k53*diff)
s_xi=xi*intg*9*np.sqrt(3)/8/np.pi
int2=np.sum(s_xi*diff)
fig, ax=plt.subplots()
ax.set_xlim(1e-6,20)
#ax.set_ylim(1e-8,1)
ax.set_xlabel(r'$\omega/\omega_c$')
ax.set_ylabel(r'$S(\omega/\omega_c)$')
omega_ratio=np.logspace(-6,1,1000)
ax.loglog(xi, s_xi, label=r'$S(\omega/\omega_c)$')
ax.legend(loc='best')
print("The integral of S function is:", int2);
The integral of S function is: 0.9976699617994194
The total energy can be also attained from the frequency domain integration.
We return to the earlier SR power from time domain integral.
11.5. Quantum Fluctuation#
The photon emission in the SR process is a quantum effect. The energy \(u\) of the photon is related to its frequency by \(u=\hbar\omega\) The photon number is found by:
Therefore: the photon number density gives:
here \(u_c=\hbar\omega_c\) is the critical photon energy. And using the integration fact:
We get the total emitted photon in one revolution gives:
Here \(\alpha\) is the fine structure constant. These photons emits randomly around one revolution.
The average emitted photon gives energy by
And the variation gives by
We can summarized the synchrotron radiation parameters’s dependence on energy:
Quantities |
Power of energy |
---|---|
Radiation Power (fix \(\rho\)) |
\(P\sim\gamma^4/\rho^2\) |
Radiation Power (fix field) |
\(P\sim\gamma^2 B^2\) |
Number of Photon |
\(N\sim \gamma\) |
Average photon energy |
\(\bar{u}\sim \gamma^3\) |
Photon energy variation |
\(\bar{u^2}\sim \gamma^6\) |
Accumulated photon energy variation |
\(\bar{Nu^2}\sim \gamma^7\) |