OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
LinearCompton.h
Go to the documentation of this file.
1#ifndef OPAL_LINEAR_COMPTON_HH
2#define OPAL_LINEAR_COMPTON_HH
3
4#include "OPALTypes.h"
5
6#include <cstdint>
7#include <random>
8
9namespace Physics {
10 namespace LinearCompton {
11
41
61
74 double photonEnergyFromWavelengthGeV(double wavelength_m);
75
82 double electronGamma(double electronTotalEnergyGeV);
83
90 double electronBeta(double electronTotalEnergyGeV);
91
110 double electronTotalEnergyGeV, double laserPhotonEnergyGeV,
111 const Vector_t<double, 3>& beamDirection,
112 const Vector_t<double, 3>& laserDirection);
113
121 double invariantKappa(double incomingPhotonEnergyERFGeV);
122
130 double invariantX(double incomingPhotonEnergyERFGeV);
131
140 double invariantX(
141 double electronTotalEnergyGeV, double laserPhotonEnergyGeV,
142 const Vector_t<double, 3>& beamDirection,
143 const Vector_t<double, 3>& laserDirection);
144
153 double scatteredPhotonEnergyMinERFGeV(double incomingPhotonEnergyERFGeV);
154
163 double scatteredPhotonEnergyMaxERFGeV(double incomingPhotonEnergyERFGeV);
164
181 double incomingPhotonEnergyERFGeV, double scatteringCosineERF);
182
206 double incomingPhotonEnergyERFGeV, double scatteringCosineERF);
207
221 double electronTotalEnergyGeV, const Vector_t<double, 3>& beamDirection,
222 const Vector_t<double, 3>& laserDirection);
223
240 double electronTotalEnergyGeV, const Vector_t<double, 3>& beamDirection,
241 const Vector_t<double, 3>& laserDirection, double scatteringCosineERF,
242 double azimuthERF);
243
260 double labPhotonEnergyGeV(
261 double electronTotalEnergyGeV, double laserPhotonEnergyGeV,
262 const Vector_t<double, 3>& beamDirection, const Vector_t<double, 3>& laserDirection,
263 double scatteringCosineERF, double azimuthERF);
264
297 double incomingPhotonEnergyERFGeV, double scatteredPhotonEnergyERFGeV);
298
320 double totalCrossSection(double incomingPhotonEnergyERFGeV);
321
326 double thomsonCrossSection();
327
340 double electronTotalEnergyGeV, const Vector_t<double, 3>& beamDirection,
341 const Vector_t<double, 3>& laserDirection);
342
357 double electronTotalEnergyGeV, double laserPhotonEnergyGeV,
358 const Vector_t<double, 3>& beamDirection,
359 const Vector_t<double, 3>& laserDirection);
360
371 std::mt19937_64 makeHostRandomEngine(std::uint64_t streamIndex = 0);
372
397 double electronTotalEnergyGeV, double laserPhotonEnergyGeV,
398 const Vector_t<double, 3>& beamDirection,
399 const Vector_t<double, 3>& laserDirection);
400
419 SampledEvent sampleEvent(const SamplingKernel& kernel, std::mt19937_64& engine);
420
421 } // namespace LinearCompton
422} // namespace Physics
423
424#endif // OPAL_LINEAR_COMPTON_HH
ippl::Vector< T, Dim > Vector_t
double differentialCrossSectionOmegaERF(double incomingPhotonEnergyERFGeV, double scatteredPhotonEnergyERFGeV)
Unpolarized Klein-Nishina differential cross section in the scattered-photon energy.
double restFrameScatteringCosineForLabForwardPhoton(double electronTotalEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection)
Rest-frame scattering cosine corresponding to a lab-forward photon.
Vector_t< double, 3 > scatteredPhotonDirectionLab
Normalized outgoing photon direction in the laboratory frame.
SamplingKernel makeSamplingKernel(double electronTotalEnergyGeV, double laserPhotonEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection)
Build a cached sampling kernel for repeated event generation.
double labForwardPhotonEnergyGeV(double electronTotalEnergyGeV, double laserPhotonEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection)
Forward scattered photon energy in the laboratory frame.
double electronGamma(double electronTotalEnergyGeV)
Compute the electron Lorentz factor from total energy.
double scatteredPhotonEnergyLabGeV
Outgoing photon energy in the laboratory frame [GeV].
Vector_t< double, 3 > labPhotonDirection(double electronTotalEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection, double scatteringCosineERF, double azimuthERF)
Laboratory-frame photon direction from electron-rest-frame scattering angles.
double scatteringCosineERF
Rest-frame polar scattering cosine .
double totalCrossSection(double incomingPhotonEnergyERFGeV)
Total unpolarized Klein-Nishina cross section.
double differentialCrossSectionSolidAngleERF(double incomingPhotonEnergyERFGeV, double scatteringCosineERF)
Unpolarized Klein-Nishina differential cross section in solid angle.
double electronTotalEnergyGeV
Incoming electron total energy in the lab frame [GeV].
std::mt19937_64 makeHostRandomEngine(std::uint64_t streamIndex)
Create a deterministic host-side random engine for Monte Carlo validation.
SampledEvent sampleEvent(const SamplingKernel &kernel, std::mt19937_64 &engine)
Sample one unpolarized linear-Compton event on the host.
Vector_t< double, 3 > beamDirection
Normalized incoming electron direction in the lab frame.
double invariantX(double incomingPhotonEnergyERFGeV)
Compute CAIN's linear-Compton invariant .
double scatteredPhotonEnergyERFGeV
Outgoing photon energy in the electron rest frame [GeV].
double labPhotonEnergyGeV(double electronTotalEnergyGeV, double laserPhotonEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection, double scatteringCosineERF, double azimuthERF)
Laboratory-frame photon energy from electron-rest-frame scattering angles.
double laserPhotonEnergyGeV
Incoming laser-photon energy in the lab frame [GeV].
double thomsonCrossSection()
Thomson limit cross section.
double scatteredPhotonEnergyMaxERFGeV(double incomingPhotonEnergyERFGeV)
Maximum scattered photon energy in the electron rest frame.
Vector_t< double, 3 > laserDirection
Normalized incoming laser direction in the lab frame.
Vector_t< double, 3 > restFrameIncomingPhotonDirection(double electronTotalEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection)
Incoming laser-photon direction in the electron rest frame.
double scatteredPhotonEnergyERFGeV(double incomingPhotonEnergyERFGeV, double scatteringCosineERF)
Compute the scattered photon energy in the electron rest frame.
double electronBeta(double electronTotalEnergyGeV)
Compute the electron speed in units of c from total energy.
double restFrameIncomingPhotonEnergyGeV(double electronTotalEnergyGeV, double laserPhotonEnergyGeV, const Vector_t< double, 3 > &beamDirection, const Vector_t< double, 3 > &laserDirection)
Compute the incoming photon energy in the electron rest frame.
double photonEnergyFromWavelengthGeV(double wavelength_m)
Convert a laser wavelength to a single-photon energy.
double scatteredPhotonEnergyMinERFGeV(double incomingPhotonEnergyERFGeV)
Minimum scattered photon energy in the electron rest frame.
double invariantKappa(double incomingPhotonEnergyERFGeV)
Compute the dimensionless Klein-Nishina parameter .
Sampled single-photon Compton event.
Host-only cached data for repeated linear-Compton event sampling.
Definition Air.h:27