1#ifndef OPAL_LINEAR_COMPTON_HH
2#define OPAL_LINEAR_COMPTON_HH
10 namespace LinearCompton {
110 double electronTotalEnergyGeV,
double laserPhotonEnergyGeV,
130 double invariantX(
double incomingPhotonEnergyERFGeV);
141 double electronTotalEnergyGeV,
double laserPhotonEnergyGeV,
181 double incomingPhotonEnergyERFGeV,
double scatteringCosineERF);
206 double incomingPhotonEnergyERFGeV,
double scatteringCosineERF);
261 double electronTotalEnergyGeV,
double laserPhotonEnergyGeV,
263 double scatteringCosineERF,
double azimuthERF);
357 double electronTotalEnergyGeV,
double laserPhotonEnergyGeV,
397 double electronTotalEnergyGeV,
double laserPhotonEnergyGeV,
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.
double rejectionUpperBoundSolidAngleERF
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 incomingPhotonEnergyERFGeV
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.