Transition Radiation¶
The spectrally resolved far field radiation created by electrons passing through a metal foil.
Our simulation computes the transition radiation to calculate the emitted electromagnetic spectra for different observation angles.
Variable 
Meaning 

\(N_e\) 
Amount of real electrons 
\(\psi\) 
Azimuth angle of momentum vector from electrons to yaxis of simulation 
\(\theta\) 
Azimuth angle of observation vector 
\(\phi\) 
Polar angle between momentum vector from electrons and observation vector 
\(\omega\) 
The circular frequency of the radiation that is observed. 
\(h(\vec{r}, \vec{p})\) 
Normalized phasespace distribution of electrons 
\(g(\vec{p})\) 
Normalized momentum distribution of electrons 
\(g(\vec{p})\) 
Normalized momentum distribution of electrons 
\(\vec{k}\) 
Wavevector of electrons 
\(\vec{v}\) 
Velocity vector of electrons 
\(u\) 
Normalized momentum of electrons \(\beta \gamma\) 
\(\mathcal{E}\) 
Normalized energy of electrons 
\(\mathcal{N}\) 
Denominator of normalized energies 
\(F\) 
Normalized formfactor of electrons, contains phase informations 
This plugin allows to predict the emitted virtual transition radiation, which would be caused by the electrons in the simulation box passing through a virtual metal foil which is set at a specific location. The transition radiation can only be calculated for electrons at the moment.
External Dependencies¶
There are no external dependencies.
.param files¶
In order to setup the transition radiation plugin, the transitionRadiation.param has to be configured and the radiating particles need to have the attributes weighting
, momentum
, location
, and transitionRadiationMask
(which can be added in speciesDefinition.param) as well as the flags massRatio
and chargeRatio
.
In transitionRadiation.param, the number of frequencies N_omega
and observation directions N_theta
and N_phi
are defined.
Frequency range¶
The frequency range is set up by choosing a specific namespace that defines the frequency setup
/* choose linear frequency range */
namespace radiation_frequencies = linear_frequencies;
Currently you can choose from the following setups for the frequency range:
namespace 
Description 


linear frequency range from 

logarithmic frequency range from 


All three options require variable definitions in the according namespaces as described below:
For the linear frequency scale all definitions need to be in the picongpu::plugins::transitionRadiation::linear_frequencies
namespace.
The number of total sample frequencies N_omega
need to be defined as constexpr unsigned int
.
In the subnamespace SI
, a minimal frequency omega_min
and a maximum frequency omega_max
need to be defined as constexpr float_64
.
For the logarithmic frequency scale all definitions need to be in the picongpu::plugins::transitionRadiation::log_frequencies
namespace.
Equivalently to the linear case, three variables need to be defined:
The number of total sample frequencies N_omega
need to be defined as constexpr unsigned int
.
In the subnamespace SI
, a minimal frequency omega_min
and a maximum frequency omega_max
need to be defined as constexpr float_64
.
For the filebased frequency definition, all definitions need to be in the picongpu::plugins::transitionRadiation::frequencies_from_list
namespace.
The number of total frequencies N_omega
need to be defined as constexpr unsigned int
and the path to the file containing the frequency values in units of \([s^{1}]\) needs to be given as constexpr const char * listLocation = "/path/to/frequency_list";
.
The frequency values in the file can be separated by newlines, spaces, tabs, or any other whitespace. The numbers should be given in such a way, that c++ standard std::ifstream
can interpret the number e.g., as 2.5344e+16
.
Note
Currently, the variable listLocation
is required to be defined in the picongpu::plugins::transitionRadiation::frequencies_from_list
namespace, even if frequencies_from_list
is not used.
The string does not need to point to an existing file, as long as the filebased frequency definition is not used.
Observation directions¶
The number of observation directions N_theta
and the distribution of observation directions is defined in transitionRadiation.param.
There, the function observation_direction
defines the observation directions.
This function returns the x,y and z component of a unit vector pointing in the observation direction.
DINLINE vector_64
observation_direction( int const observation_id_extern )
{
/* use the scalar index const int observation_id_extern to compute an
* observation direction (x,y,y) */
return vector_64( x , y , z );
}
Note
The transitionRadiation.param
set up will be subject to further changes, since the radiationObserver.param
it is based on is subject to further changes.
These might be namespaces that describe several preconfigured layouts or a functor if C++ 11 is included in the nvcc.
Foil Position¶
If one wants to virtually propagate the electron bunch to a foil in a further distance to get a rough estimate of the effect of the divergence on the electron bunch, one can include a foil position. A foil position which is unequal to zero, adds the electrons momentum vectors onto the electron until they reach the given ycoordinate. To contain the longitudinal information of the bunch, the simulation window is actually virtually moved to the foil position and not each single electron.
namespace SI
{
// y position of the foil to calculate transition radiation at
// leave at 0 for no virtual particle propagation
constexpr float_64 foilPosition = 0.0;
}
Note
This is an experimental feature, which was not verified yet.
Macroparticle form factor¶
The macroparticle form factor is a method, which considers the shape of the macro particles when computing the radiation.
One can select between different macro particle shapes. Currently eight shapes are implemented. A shape can be selected by choosing one of the available namespaces:
/* choosing the 3D CIClike macro particle shape */
namespace radFormFactor = radFormFactor_CIC_3D;
Namespace 
Description 


3D CloudInCell shape 

3D Triangular shaped density cloud 

3D Quadratic spline density shape (Piecewise Cubic Spline assignment function) 

CloudInCell shape in ydirection, dot like in the other directions 

symmetric Gauss charge distribution 

Gauss charge distribution according to cell size 

forces a completely incoherent emission by scaling the macro particle charge with the square root of the weighting 

forces a completely coherent emission by scaling the macro particle charge with the weighting 
Note
One should not confuse this macroparticle form factor with the form factor \(F\), which was previously mentioned. This form factor is equal to the macroparticle shape, while \(F\) contains the phase information of the whole electron bunch. Both are necessary for a physically correct transition radiation calculation.
Gamma filter¶
In order to consider the radiation only of particles with a gamma higher than a specific threshold.
In order to do that, the radiating particle species needs the flag transitionRadiationMask
(which is initialized as false
) which further needs to be manipulated, to set to true for specific (random) particles.
Using a filter functor as:
using GammaFilter = picongpu::particles::manipulators::generic::Free<
GammaFilterFunctor
>;
(see TransitionRadiation example for details) sets the flag to true if a particle fulfills the gamma condition.
Note
More sophisticated filters might come in the near future. Therefore, this part of the code might be subject to changes.
.cfg file¶
For a specific (charged) species <species>
e.g. e
, the radiation can be computed by the following commands.
Command line option 
Description 


Gives the number of time steps between which the radiation should be calculated. 
Memory Complexity¶
Accelerator¶
two counters (float_X
) and two counters (complex_X
) are allocated permanently
Host¶
as on accelerator.
Output¶
Contains ASCII files in simOutput/transRad
that have the total spectral intensity until the timestep specified by the filename.
Each row gives data for one observation direction (same order as specified in the observer.py
).
The values for each frequency are separated by tabs and have the same order as specified in transitionRadiation.param
.
The spectral intensity is stored in the units [J s].
Analysing tools¶
The transition_radiation_visualizer.py
in lib/python/picongpu/plugins/plot_mpl
can be used to analyze the radiation data after the simulation.
See transitionradiation_visualizer.py help
for more information.
It only works, if the input frequency are on a divided logarithmically!
Known Issues¶
The output is currently only physically correct for electron passing through a metal foil.
References¶
 Theory of coherent transition radiation generated at a plasmavacuum interface
Schroeder, C. B. and Esarey, E. and van Tilborg, J. and Leemans, W. P., American Physical Society(2004), https://link.aps.org/doi/10.1103/PhysRevE.69.016501
 Diagnostics for plasmabased electron accelerators
Downer, M. C. and Zgadzaj, R. and Debus, A. and Schramm, U. and Kaluza, M. C., American Physical Society(2018), https://link.aps.org/doi/10.1103/RevModPhys.90.035002
 Synthetic characterization of ultrashort electron bunches using transition radiation
Carstens, F.O., Bachelor thesis on the transition radiation plugin, https://doi.org/10.5281/zenodo.3469663
 Quantitatively consistent computation of coherent and incoherent radiation in particleincell codes — A general form factor formalism for macroparticles
Pausch, R., Description for the effect of macroparticle shapes in particleincell codes, https://doi.org/10.1016/j.nima.2018.02.020