Geant4 11.4.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron Class Reference

#include <MCGIDI_distributions.hpp>

Inheritance diagram for MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron:

Public Member Functions

LUPI_HOST_DEVICE IncoherentPhotoAtomicScatteringElectron ()
LUPI_HOST IncoherentPhotoAtomicScatteringElectron (SetupInfo &a_setupInfo)
LUPI_HOST_DEVICE ~IncoherentPhotoAtomicScatteringElectron ()
template<typename RNG>
LUPI_HOST_DEVICE void sample (double a_energy, Sampling::Input &a_input, RNG &&a_rng) const
template<typename RNG>
LUPI_HOST_DEVICE double angleBiasing (Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, RNG &&a_rng, double &a_energy_out) const
LUPI_HOST_DEVICE void serialize (LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)
template<typename RNG>
LUPI_HOST_DEVICE double angleBiasing (LUPI_maybeUnused Reaction const *a_reaction, LUPI_maybeUnused double a_temperature, LUPI_maybeUnused double a_energy_in, LUPI_maybeUnused double a_mu_lab, LUPI_maybeUnused RNG &&a_rng, double &a_energy_out) const
Public Member Functions inherited from MCGIDI::Distributions::Distribution
LUPI_HOST_DEVICE Distribution ()
LUPI_HOST Distribution (Type a_type, GIDI::Distributions::Distribution const &a_distribution, SetupInfo &a_setupInfo)
LUPI_HOST Distribution (Type a_type, GIDI::Frame a_productFrame, SetupInfo &a_setupInfo)
LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION ~Distribution () MCGIDI_TRUE_VIRTUAL
LUPI_HOST_DEVICE Type type () const
LUPI_HOST_DEVICE GIDI::Frame productFrame () const
LUPI_HOST_DEVICE double projectileMass () const
LUPI_HOST_DEVICE double targetMass () const
LUPI_HOST_DEVICE double productMass () const
LUPI_HOST void setModelDBRC_data (Sampling::Upscatter::ModelDBRC_data *a_modelDBRC_data)
template<typename RNG>
LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION void sample (double a_X, Sampling::Input &a_input, RNG &&a_rng) const MCGIDI_TRUE_VIRTUAL
template<typename RNG>
LUPI_HOST_DEVICE MCGIDI_VIRTUAL_FUNCTION double angleBiasing (Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, RNG &&a_rng, double &a_energy_out) const MCGIDI_TRUE_VIRTUAL
LUPI_HOST_DEVICE void serialize (LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)
template<typename RNG>
LUPI_HOST_DEVICE void sample (double a_X, MCGIDI::Sampling::Input &a_input, RNG &&a_rng) const
template<typename RNG>
LUPI_HOST_DEVICE double angleBiasing (Reaction const *a_reaction, double a_temperature, double a_energy_in, double a_mu_lab, RNG &&a_rng, double &a_energy_out) const

Detailed Description

This class represents the distribution for the outgoing electron for incoherent photo-atomic scattering.

Definition at line 339 of file MCGIDI_distributions.hpp.

Constructor & Destructor Documentation

◆ IncoherentPhotoAtomicScatteringElectron() [1/2]

LUPI_HOST_DEVICE MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::IncoherentPhotoAtomicScatteringElectron ( )

Plain constructor.

Definition at line 1127 of file MCGIDI_distributions.cc.

1127 {
1128
1129}

Referenced by IncoherentPhotoAtomicScatteringElectron(), and IncoherentPhotoAtomicScatteringElectron().

◆ IncoherentPhotoAtomicScatteringElectron() [2/2]

LUPI_HOST MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::IncoherentPhotoAtomicScatteringElectron ( SetupInfo & a_setupInfo)

Constructor.

Parameters
a_setupInfo[in] Used internally when constructing a Protare to pass information to other constructors.

Definition at line 1137 of file MCGIDI_distributions.cc.

◆ ~IncoherentPhotoAtomicScatteringElectron()

LUPI_HOST_DEVICE MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::~IncoherentPhotoAtomicScatteringElectron ( )

Destructor.

Definition at line 1146 of file MCGIDI_distributions.cc.

1146 {
1147
1148}

Member Function Documentation

◆ angleBiasing() [1/2]

template<typename RNG>
LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::angleBiasing ( LUPI_maybeUnused Reaction const * a_reaction,
LUPI_maybeUnused double a_temperature,
LUPI_maybeUnused double a_energy_in,
LUPI_maybeUnused double a_mu_lab,
LUPI_maybeUnused RNG && a_rng,
double & a_energy_out ) const

Returns the probability for a projectile with energy a_energy_in causing a particle to be emitted at angle a_mu_lab as seen in the lab frame. a_energy_out is the sampled outgoing energy. Currently, this method only returns 0.0 for the probability and outgoing energy.

Parameters
a_reaction[in] The reaction containing the particle which this distribution describes.
a_temperature[in] The temperature of the material.
a_energy_in[in] The energy of the incident particle.
a_mu_lab[in] The desired mu in the lab frame for the emitted particle.
a_rng[in] The random number generator function that returns a double in the range [0, 1.0).
a_energy_out[in] The energy of the emitted outgoing particle.
Returns
The probability of emitting outgoing particle into lab angle a_mu_lab.

Definition at line 1359 of file MCGIDI_headerSource.hpp.

1360 {
1361
1362 a_energy_out = 0;
1363 return( 0.0 );
1364}

◆ angleBiasing() [2/2]

template<typename RNG>
LUPI_HOST_DEVICE double MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::angleBiasing ( Reaction const * a_reaction,
double a_temperature,
double a_energy_in,
double a_mu_lab,
RNG && a_rng,
double & a_energy_out ) const

◆ sample()

template<typename RNG>
LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::sample ( double a_energy,
Sampling::Input & a_input,
RNG && a_rng ) const

This method returns the outgoing electron energy and angle given that the photon when out at an angle of a_input.m_mu. Ergo, this method must be called directly after the photon has been sampled.

Parameters
a_energy[in] The energy of the projectile.
a_input[in] Sample options requested by user.
a_rng[in] The random number generator function that returns a double in the range [0, 1.0).

Definition at line 1328 of file MCGIDI_headerSource.hpp.

1328 {
1329
1330 double halfTheta = 0.5 * acos( a_input.m_mu );
1331 double cot_psi = ( 1.0 + a_energy / PoPI_electronMass_MeV_c2 ) * tan( halfTheta );
1332 double psi = atan( 1.0 / cot_psi );
1333
1334 double deltaE_photon = a_energy - a_input.m_energyOut1;
1335 double electronMomentum2 = deltaE_photon * ( deltaE_photon + 2.0 * PoPI_electronMass_MeV_c2 ); // Square of the electron outlgoing momentum.
1336
1337 a_input.m_energyOut1 = electronMomentum2 / ( sqrt( electronMomentum2 + PoPI_electronMass_MeV_c2 * PoPI_electronMass_MeV_c2 ) + PoPI_electronMass_MeV_c2 );
1338 a_input.m_mu = cos( psi );
1339 a_input.m_phi = 2.0 * M_PI * a_rng( );
1340 a_input.m_frame = productFrame( );
1341}
#define PoPI_electronMass_MeV_c2
Definition PoPI.hpp:31
#define M_PI
Definition SbMath.h:33
LUPI_HOST_DEVICE GIDI::Frame productFrame() const

◆ serialize()

LUPI_HOST_DEVICE void MCGIDI::Distributions::IncoherentPhotoAtomicScatteringElectron::serialize ( LUPI::DataBuffer & a_buffer,
LUPI::DataBuffer::Mode a_mode )

This method serializes this for broadcasting as needed for MPI and GPUs. The method can count the number of required bytes, pack this or unpack this depending on a_mode.

Parameters
a_buffer[in] The buffer to read or write data to depending on a_mode.
a_mode[in] Specifies the action of this method.

Definition at line 1158 of file MCGIDI_distributions.cc.

1158 {
1159
1160 Distribution::serialize( a_buffer, a_mode );
1161}
LUPI_HOST_DEVICE void serialize(LUPI::DataBuffer &a_buffer, LUPI::DataBuffer::Mode a_mode)

The documentation for this class was generated from the following files: