OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
ScatteringPhysics Class Reference

#include <ScatteringPhysics.h>

Inheritance diagram for ScatteringPhysics:
Collaboration diagram for ScatteringPhysics:

Public Member Functions

 ScatteringPhysics (const std::string &name, ElementBase *element, std::string &mat, bool enableRutherford, double lowEnergyThr)
 ~ScatteringPhysics ()
virtual void apply (PartBunchBase< double, 3 > *bunch, const std::pair< Vector_t, double > &boundingSphere) override
virtual const std::string getType () const override
virtual void print (Inform &os) override
virtual bool stillActive () override
virtual double getTime () override
virtual std::string getName () override
virtual size_t getParticlesInMat () override
virtual unsigned getRediffused () override
virtual unsigned int getNumEntered () override
void computeInteraction (PartBunchBase< double, 3 > *bunch)
virtual bool computeEnergyLoss (PartBunchBase< double, 3 > *bunch, Vector_t &P, const double deltat, bool includeFluctuations=true) const override
void setFlagAllParticlesIn (bool p)
bool getFlagAllParticlesIn () const
void updateElement (ElementBase *newref)
ElementBasegetElement ()

Protected Attributes

ElementBaseelement_ref_m
bool allParticleInMat_m
 if all particles are in matter stay inside the particle matter interaction
const std::string name_m
std::unique_ptr< InsideTesterhitTester_m

Private Member Functions

void configureMaterialParameters ()
 The material of the collimator.
void computeCoulombScattering (Vector_t &R, Vector_t &P, double dt)
void applyRotation (Vector_t &P, Vector_t &R, double xplane, double thetacou)
void applyRandomRotation (Vector_t &P, double theta0)
void copyFromBunch (PartBunchBase< double, 3 > *bunch, const std::pair< Vector_t, double > &boundingSphere)
void addBackToBunch (PartBunchBase< double, 3 > *bunch)
void addParticleBackToBunch (PartBunchBase< double, 3 > *bunch, const PART &particle, bool pdead=false)
void deleteParticleFromLocalVector ()
void calcStat (double Eng)
void gatherStatistics ()
void push ()
void resetTimeStep ()
void setTimeStepForLeavingParticles ()

Private Attributes

double T_m
double dT_m
double mass_m
double charge_m
gsl_rng * rGen_m
std::string material_m
double Z_m
double A_m
double rho_m
double X0_m
double I_m
double A1_c
double A2_c
double A3_c
double A4_c
double A5_c
double B1_c
double B2_c
double B3_c
double B4_c
double B5_c
unsigned int bunchToMatStat_m
unsigned int stoppedPartStat_m
unsigned int rediffusedStat_m
unsigned int totalPartsInMat_m
double Eavg_m
double Emax_m
double Emin_m
std::vector< PARTlocParts_m
std::unique_ptr< LossDataSinklossDs_m
bool enableRutherford_m
double lowEnergyThr_m
IpplTimings::TimerRef DegraderApplyTimer_m
IpplTimings::TimerRef DegraderLoopTimer_m
IpplTimings::TimerRef DegraderDestroyTimer_m

Detailed Description

Definition at line 58 of file ScatteringPhysics.h.

Constructor & Destructor Documentation

◆ ScatteringPhysics()

ScatteringPhysics::ScatteringPhysics ( const std::string & name,
ElementBase * element,
std::string & mat,
bool enableRutherford,
double lowEnergyThr )

◆ ~ScatteringPhysics()

ScatteringPhysics::~ScatteringPhysics ( )

Definition at line 166 of file ScatteringPhysics.cpp.

References locParts_m, lossDs_m, and rGen_m.

Member Function Documentation

◆ addBackToBunch()

void ScatteringPhysics::addBackToBunch ( PartBunchBase< double, 3 > * bunch)
private

Definition at line 493 of file ScatteringPhysics.cpp.

References addParticleBackToBunch(), deleteParticleFromLocalVector(), ParticleMatterInteractionHandler::element_ref_m, OpalData::getInstance(), ParticleMatterInteractionHandler::hitTester_m, locParts_m, and rediffusedStat_m.

Referenced by apply().

Here is the call graph for this function:

◆ addParticleBackToBunch()

void ScatteringPhysics::addParticleBackToBunch ( PartBunchBase< double, 3 > * bunch,
const PART & particle,
bool pdead = false )
private

◆ apply()

◆ applyRandomRotation()

void ScatteringPhysics::applyRandomRotation ( Vector_t & P,
double theta0 )
private

Definition at line 427 of file ScatteringPhysics.cpp.

References cross(), dot(), euclidean_norm(), rGen_m, Physics::two_pi, and X.

Referenced by computeCoulombScattering().

Here is the call graph for this function:

◆ applyRotation()

void ScatteringPhysics::applyRotation ( Vector_t & P,
Vector_t & R,
double xplane,
double thetacou )
private

Definition at line 411 of file ScatteringPhysics.cpp.

References Physics::two_pi.

Referenced by computeCoulombScattering().

◆ calcStat()

void ScatteringPhysics::calcStat ( double Eng)
inlineprivate

Definition at line 176 of file ScatteringPhysics.h.

References Eavg_m, Emax_m, and Emin_m.

◆ computeCoulombScattering()

void ScatteringPhysics::computeCoulombScattering ( Vector_t & R,
Vector_t & P,
double dt )
private

Coulomb Scattering: Including Multiple Coulomb Scattering and large angle Rutherford Scattering. Using the distribution given in Classical Electrodynamics, by J. D. Jackson.

Definition at line 452 of file ScatteringPhysics.cpp.

References applyRandomRotation(), applyRotation(), Physics::c, charge_m, cos(), enableRutherford_m, euclidean_norm(), Util::getBeta(), mass_m, Physics::pi, rGen_m, CoordinateSystemTrafo::rotateFrom(), CoordinateSystemTrafo::rotateTo(), sin(), CoordinateSystemTrafo::transformFrom(), Physics::two_pi, and X0_m.

Referenced by computeInteraction().

Here is the call graph for this function:

◆ computeEnergyLoss()

bool ScatteringPhysics::computeEnergyLoss ( PartBunchBase< double, 3 > * bunch,
Vector_t & P,
const double deltat,
bool includeFluctuations = true ) const
overridevirtual

Energy Loss: using the Bethe-Bloch equation. In low-energy region use Andersen-Ziegler fitting (only for protons and alpha) Energy straggling: For relatively thick absorbers such that the number of collisions is large, the energy loss distribution is shown to be Gaussian in form. See Particle Physics Booklet, chapter 'Passage of particles through matter' or Review of Particle Physics, DOI: 10.1103/PhysRevD.86.010001, page 329 ff

Implements ParticleMatterInteractionHandler.

Definition at line 327 of file ScatteringPhysics.cpp.

References A1_c, A2_c, A3_c, A4_c, A5_c, A_m, ALPHA, Physics::amu, Physics::Avo, B1_c, B2_c, B3_c, B4_c, B5_c, Physics::c, charge_m, endl(), euclidean_norm(), Units::eV2keV, Util::getGamma(), PartBunchBase< T, Dim >::getPType(), Units::GeV2keV, I_m, INFOMSG, Units::keV2MeV, level4(), Units::m2cm, Physics::m_e, Physics::m_p, mass_m, Units::MeV2keV, Physics::pi, PROTON, Physics::r_e, rGen_m, rho_m, and Z_m.

Referenced by computeInteraction().

Here is the call graph for this function:

◆ computeInteraction()

void ScatteringPhysics::computeInteraction ( PartBunchBase< double, 3 > * bunch)

Definition at line 270 of file ScatteringPhysics.cpp.

References addParticleBackToBunch(), computeCoulombScattering(), computeEnergyLoss(), deleteParticleFromLocalVector(), OpalData::getInstance(), ParticleMatterInteractionHandler::hitTester_m, locParts_m, lossDs_m, stoppedPartStat_m, and T_m.

Referenced by apply().

Here is the call graph for this function:

◆ configureMaterialParameters()

void ScatteringPhysics::configureMaterialParameters ( )
private

The material of the collimator.

Definition at line 176 of file ScatteringPhysics.cpp.

References Physics::Material::A1, A1_c, Physics::Material::A2, A2_c, Physics::Material::A3, A3_c, Physics::Material::A4, A4_c, Physics::Material::A5, A5_c, A_m, Physics::Material::B1, B1_c, Physics::Material::B2, B2_c, Physics::Material::B3, B3_c, Physics::Material::B4, B4_c, Physics::Material::B5, B5_c, Physics::Material::getMaterial(), I_m, material_m, rho_m, X0_m, and Z_m.

Referenced by ScatteringPhysics().

Here is the call graph for this function:

◆ copyFromBunch()

◆ deleteParticleFromLocalVector()

void ScatteringPhysics::deleteParticleFromLocalVector ( )
private

Definition at line 652 of file ScatteringPhysics.cpp.

References Eavg_m, Emax_m, Emin_m, and locParts_m.

Referenced by addBackToBunch(), and computeInteraction().

◆ gatherStatistics()

void ScatteringPhysics::gatherStatistics ( )
private

Definition at line 726 of file ScatteringPhysics.cpp.

References allreduce(), bunchToMatStat_m, locParts_m, rediffusedStat_m, stoppedPartStat_m, and totalPartsInMat_m.

Referenced by apply().

Here is the call graph for this function:

◆ getElement()

ElementBase * ParticleMatterInteractionHandler::getElement ( )
inlineinherited

Definition at line 86 of file ParticleMatterInteractionHandler.h.

References element_ref_m.

◆ getFlagAllParticlesIn()

bool ParticleMatterInteractionHandler::getFlagAllParticlesIn ( ) const
inlineinherited

Definition at line 96 of file ParticleMatterInteractionHandler.h.

References allParticleInMat_m.

◆ getName()

std::string ScatteringPhysics::getName ( )
inlineoverridevirtual

◆ getNumEntered()

unsigned int ScatteringPhysics::getNumEntered ( )
inlineoverridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 205 of file ScatteringPhysics.h.

References bunchToMatStat_m.

◆ getParticlesInMat()

size_t ScatteringPhysics::getParticlesInMat ( )
inlineoverridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 195 of file ScatteringPhysics.h.

References totalPartsInMat_m.

◆ getRediffused()

unsigned int ScatteringPhysics::getRediffused ( )
inlineoverridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 200 of file ScatteringPhysics.h.

References rediffusedStat_m.

◆ getTime()

double ScatteringPhysics::getTime ( )
inlineoverridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 185 of file ScatteringPhysics.h.

References T_m.

◆ getType()

const std::string ScatteringPhysics::getType ( ) const
inlineoverridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 210 of file ScatteringPhysics.h.

◆ print()

void ScatteringPhysics::print ( Inform & os)
overridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 619 of file ScatteringPhysics.cpp.

References bunchToMatStat_m, ParticleMatterInteractionHandler::element_ref_m, endl(), Inform::flags(), level2(), material_m, ParticleMatterInteractionHandler::name_m, rediffusedStat_m, stoppedPartStat_m, OPALTimer::Timer::time(), Util::toStringWithThousandSep(), and totalPartsInMat_m.

Here is the call graph for this function:

◆ push()

void ScatteringPhysics::push ( )
private

Definition at line 677 of file ScatteringPhysics.cpp.

References Physics::c, dT_m, Util::getGamma(), and locParts_m.

Referenced by apply().

Here is the call graph for this function:

◆ resetTimeStep()

void ScatteringPhysics::resetTimeStep ( )
private

Definition at line 719 of file ScatteringPhysics.cpp.

References dT_m, and locParts_m.

Referenced by apply().

◆ setFlagAllParticlesIn()

void ParticleMatterInteractionHandler::setFlagAllParticlesIn ( bool p)
inlineinherited

◆ setTimeStepForLeavingParticles()

void ScatteringPhysics::setTimeStepForLeavingParticles ( )
private

Definition at line 693 of file ScatteringPhysics.cpp.

References Physics::c, dT_m, ParticleMatterInteractionHandler::element_ref_m, Util::getGamma(), OpalData::getInstance(), locParts_m, PAssert_GE, and PAssert_LE.

Referenced by apply().

Here is the call graph for this function:

◆ stillActive()

bool ScatteringPhysics::stillActive ( )
overridevirtual

Implements ParticleMatterInteractionHandler.

Definition at line 642 of file ScatteringPhysics.cpp.

References totalPartsInMat_m.

◆ updateElement()

void ParticleMatterInteractionHandler::updateElement ( ElementBase * newref)
inlineinherited

Definition at line 81 of file ParticleMatterInteractionHandler.h.

References element_ref_m.

Member Data Documentation

◆ A1_c

double ScatteringPhysics::A1_c
private

◆ A2_c

double ScatteringPhysics::A2_c
private

◆ A3_c

double ScatteringPhysics::A3_c
private

◆ A4_c

double ScatteringPhysics::A4_c
private

◆ A5_c

double ScatteringPhysics::A5_c
private

◆ A_m

double ScatteringPhysics::A_m
private

◆ allParticleInMat_m

bool ParticleMatterInteractionHandler::allParticleInMat_m
protectedinherited

if all particles are in matter stay inside the particle matter interaction

Definition at line 66 of file ParticleMatterInteractionHandler.h.

Referenced by ScatteringPhysics::apply(), getFlagAllParticlesIn(), ParticleMatterInteractionHandler(), and setFlagAllParticlesIn().

◆ B1_c

double ScatteringPhysics::B1_c
private

◆ B2_c

double ScatteringPhysics::B2_c
private

◆ B3_c

double ScatteringPhysics::B3_c
private

◆ B4_c

double ScatteringPhysics::B4_c
private

◆ B5_c

double ScatteringPhysics::B5_c
private

◆ bunchToMatStat_m

unsigned int ScatteringPhysics::bunchToMatStat_m
private

◆ charge_m

double ScatteringPhysics::charge_m
private

◆ DegraderApplyTimer_m

IpplTimings::TimerRef ScatteringPhysics::DegraderApplyTimer_m
private

Definition at line 170 of file ScatteringPhysics.h.

Referenced by apply(), and ScatteringPhysics().

◆ DegraderDestroyTimer_m

IpplTimings::TimerRef ScatteringPhysics::DegraderDestroyTimer_m
private

Definition at line 172 of file ScatteringPhysics.h.

Referenced by copyFromBunch(), and ScatteringPhysics().

◆ DegraderLoopTimer_m

IpplTimings::TimerRef ScatteringPhysics::DegraderLoopTimer_m
private

Definition at line 171 of file ScatteringPhysics.h.

Referenced by apply(), and ScatteringPhysics().

◆ dT_m

double ScatteringPhysics::dT_m
private

◆ Eavg_m

double ScatteringPhysics::Eavg_m
private

◆ element_ref_m

◆ Emax_m

double ScatteringPhysics::Emax_m
private

◆ Emin_m

double ScatteringPhysics::Emin_m
private

◆ enableRutherford_m

bool ScatteringPhysics::enableRutherford_m
private

Definition at line 167 of file ScatteringPhysics.h.

Referenced by computeCoulombScattering(), and ScatteringPhysics().

◆ hitTester_m

◆ I_m

double ScatteringPhysics::I_m
private

◆ locParts_m

◆ lossDs_m

std::unique_ptr<LossDataSink> ScatteringPhysics::lossDs_m
private

Definition at line 165 of file ScatteringPhysics.h.

Referenced by computeInteraction(), ScatteringPhysics(), and ~ScatteringPhysics().

◆ lowEnergyThr_m

double ScatteringPhysics::lowEnergyThr_m
private

Definition at line 168 of file ScatteringPhysics.h.

Referenced by ScatteringPhysics().

◆ mass_m

double ScatteringPhysics::mass_m
private

◆ material_m

std::string ScatteringPhysics::material_m
private

Definition at line 127 of file ScatteringPhysics.h.

Referenced by configureMaterialParameters(), print(), and ScatteringPhysics().

◆ name_m

const std::string ParticleMatterInteractionHandler::name_m
protectedinherited

◆ rediffusedStat_m

unsigned int ScatteringPhysics::rediffusedStat_m
private

◆ rGen_m

gsl_rng* ScatteringPhysics::rGen_m
private

◆ rho_m

double ScatteringPhysics::rho_m
private

◆ stoppedPartStat_m

unsigned int ScatteringPhysics::stoppedPartStat_m
private

◆ T_m

double ScatteringPhysics::T_m
private

Definition at line 118 of file ScatteringPhysics.h.

Referenced by apply(), computeInteraction(), getTime(), and ScatteringPhysics().

◆ totalPartsInMat_m

unsigned int ScatteringPhysics::totalPartsInMat_m
private

◆ X0_m

double ScatteringPhysics::X0_m
private

◆ Z_m

double ScatteringPhysics::Z_m
private

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