Geant4-11
Public Types | Public Member Functions | Protected Attributes | Private Attributes | Static Private Attributes
G4INCL::InteractionAvatar::ViolationEEnergyFunctor Class Reference

RootFunctor-derived object for enforcing energy conservation in delta production. More...

Inheritance diagram for G4INCL::InteractionAvatar::ViolationEEnergyFunctor:
G4INCL::RootFunctor G4INCL::IFunction1D

Public Types

typedef G4double(*const ManipulatorFunc) (const G4double)
 Typedef to simplify the syntax of inverseCDFTable. More...
 

Public Member Functions

void cleanUp (const G4bool success) const
 Clean up after root finding. More...
 
virtual G4double getXMaximum () const
 Return the maximum allowed value of the independent variable. More...
 
virtual G4double getXMinimum () const
 Return the minimum allowed value of the independent variable. More...
 
virtual G4double integrate (const G4double x0, const G4double x1, const G4double step=-1.) const
 Integrate the function between two values. More...
 
InterpolationTableinverseCDFTable (ManipulatorFunc fWrap=0, const G4int nNodes=60) const
 Return a pointer to the inverse of the CDF of this function. More...
 
G4double operator() (const G4double x) const
 Compute the energy-conservation violation. More...
 
IFunction1Dprimitive () const
 Return a pointer to the (numerical) primitive to this function. More...
 
void setParticleEnergy (const G4double energy) const
 Set the energy of the particle. More...
 
 ViolationEEnergyFunctor (Nucleus *const nucleus, Particle *const aParticle, const G4double totalEnergyBeforeInteraction, const G4bool localE)
 Prepare for calling the () operator and setParticleEnergy. More...
 
virtual ~ViolationEEnergyFunctor ()
 

Protected Attributes

G4double xMax
 Maximum value of the independent variable. More...
 
G4double xMin
 Minimum value of the independent variable. More...
 

Private Attributes

G4double energyThreshold
 Threshold for the energy of the particle. More...
 
G4double initialEnergy
 Total energy before the interaction. More...
 
const G4bool shouldUseLocalEnergy
 Whether we should use local energy. More...
 
G4double theEnergy
 The initial energy of the particle. More...
 
ThreeVector theMomentum
 The initial momentum of the particle. More...
 
NucleustheNucleus
 Pointer to the nucleus. More...
 
ParticletheParticle
 The final-state particle. More...
 

Static Private Attributes

static const G4double integrationCoefficients []
 Coefficients for numerical integration. More...
 

Detailed Description

RootFunctor-derived object for enforcing energy conservation in delta production.

Definition at line 163 of file G4INCLInteractionAvatar.hh.

Member Typedef Documentation

◆ ManipulatorFunc

typedef G4double(*const G4INCL::IFunction1D::ManipulatorFunc) (const G4double)
inherited

Typedef to simplify the syntax of inverseCDFTable.

Definition at line 93 of file G4INCLIFunction1D.hh.

Constructor & Destructor Documentation

◆ ViolationEEnergyFunctor()

G4INCL::InteractionAvatar::ViolationEEnergyFunctor::ViolationEEnergyFunctor ( Nucleus *const  nucleus,
Particle *const  aParticle,
const G4double  totalEnergyBeforeInteraction,
const G4bool  localE 
)

Prepare for calling the () operator and setParticleEnergy.

The constructor sets the private class members.

Definition at line 484 of file G4INCLInteractionAvatar.cc.

484 :
485 RootFunctor(0., 1E6),
486 initialEnergy(totalEnergyBeforeInteraction),
487 theNucleus(nucleus),
488 theParticle(aParticle),
493 {
494// assert(theParticle->isDelta());
495 }
G4double energyThreshold
Threshold for the energy of the particle.
G4double initialEnergy
Total energy before the interaction.
ThreeVector theMomentum
The initial momentum of the particle.
const G4bool shouldUseLocalEnergy
Whether we should use local energy.
G4double theEnergy
The initial energy of the particle.
G4double getEnergy() const
const G4INCL::ThreeVector & getMomentum() const
RootFunctor(const G4double x0, const G4double x1)
G4double energy(const ThreeVector &p, const G4double m)
G4ThreadLocal G4double minDeltaMass

◆ ~ViolationEEnergyFunctor()

virtual G4INCL::InteractionAvatar::ViolationEEnergyFunctor::~ViolationEEnergyFunctor ( )
inlinevirtual

Definition at line 170 of file G4INCLInteractionAvatar.hh.

170{}

Member Function Documentation

◆ cleanUp()

void G4INCL::InteractionAvatar::ViolationEEnergyFunctor::cleanUp ( const G4bool  success) const
virtual

Clean up after root finding.

Implements G4INCL::RootFunctor.

Definition at line 540 of file G4INCLInteractionAvatar.cc.

540 {
541 if(!success)
543 }
void setParticleEnergy(const G4double energy) const
Set the energy of the particle.

◆ getXMaximum()

virtual G4double G4INCL::IFunction1D::getXMaximum ( ) const
inlinevirtualinherited

Return the maximum allowed value of the independent variable.

Definition at line 75 of file G4INCLIFunction1D.hh.

75{ return xMax; }
G4double xMax
Maximum value of the independent variable.

References G4INCL::IFunction1D::xMax.

Referenced by G4INCL::IFunction1D::inverseCDFTable(), G4INCL::InvFInterpolationTable::InvFInterpolationTable(), and G4INCL::IFunction1D::primitive().

◆ getXMinimum()

virtual G4double G4INCL::IFunction1D::getXMinimum ( ) const
inlinevirtualinherited

Return the minimum allowed value of the independent variable.

Definition at line 72 of file G4INCLIFunction1D.hh.

72{ return xMin; }
G4double xMin
Minimum value of the independent variable.

References G4INCL::IFunction1D::xMin.

Referenced by G4INCL::IFunction1D::inverseCDFTable(), G4INCL::InvFInterpolationTable::InvFInterpolationTable(), and G4INCL::IFunction1D::primitive().

◆ integrate()

G4double G4INCL::IFunction1D::integrate ( const G4double  x0,
const G4double  x1,
const G4double  step = -1. 
) const
virtualinherited

Integrate the function between two values.

Parameters
x0lower integration bound
x1upper integration bound
steplargest integration step size; if <0, 45 steps will be used
Returns
$\int_{x_0}^{x_1} f(x) dx$

Definition at line 66 of file G4INCLIFunction1D.cc.

66 {
67 G4double xi = std::max(x0, xMin);
68 G4double xa = std::min(x1, xMax);
70
71 if(x1 <= x0) {
72 sign = -1.0;
73 std::swap(xi, xa);
74 } else
75 sign = 1.0;
76
77 const G4double interval = xa - xi;
78
79 G4int nIntervals;
80 if(step<0.) {
81 nIntervals = 45;
82 } else {
83 nIntervals = G4int(interval/step);
84
85 // Round up nIntervals to the closest multiple of 9
86 G4int remainder = nIntervals % 9;
87 if (remainder != 0)
88 nIntervals += 9 - remainder;
89
90 nIntervals = std::max(nIntervals, 9);
91 }
92
93 const G4double dx = interval/nIntervals;
94 G4double result = (operator()(xi) + operator()(xa)) * integrationCoefficients[0]/2;
95 for(G4int j = 1; j<nIntervals; ++j) {
96 const G4double x = xi + interval*G4double(j)/G4double(nIntervals);
97 const unsigned index = j%9;
98 result += operator()(x) * integrationCoefficients[index];
99 }
100
101 return result*dx*sign;
102
103 }
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
virtual G4double operator()(const G4double x) const =0
Compute the value of the function.
static const G4double integrationCoefficients[]
Coefficients for numerical integration.
T max(const T t1, const T t2)
brief Return the largest of the two arguments
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
G4int sign(const T t)

References G4INCL::IFunction1D::integrationCoefficients, G4INCL::Math::max(), G4INCL::Math::min(), G4INCL::IFunction1D::operator()(), G4INCL::Math::sign(), G4INCL::IFunction1D::xMax, and G4INCL::IFunction1D::xMin.

◆ inverseCDFTable()

InterpolationTable * G4INCL::IFunction1D::inverseCDFTable ( IFunction1D::ManipulatorFunc  fWrap = 0,
const G4int  nNodes = 60 
) const
inherited

Return a pointer to the inverse of the CDF of this function.

The function parameter fWrap is wrapped around the return value of operator(). If fWrap=NULL (default), fWrap=identity.

Definition at line 123 of file G4INCLIFunction1D.cc.

123 {
124 class InverseCDF : public IFunction1D {
125 public:
126 InverseCDF(IFunction1D const * const f, ManipulatorFunc fw) :
128 theFunction(f),
129 normalisation(1./theFunction->integrate(xMin,xMax)),
130 fWrap(fw)
131 {}
132
133 G4double operator()(const G4double x) const {
134 if(fWrap)
135 return fWrap(std::min(1., normalisation * theFunction->integrate(xMin,x)));
136 else
137 return std::min(1., normalisation * theFunction->integrate(xMin,x));
138 }
139 private:
140 IFunction1D const * const theFunction;
141 const G4double normalisation;
142 ManipulatorFunc fWrap;
143 } *theInverseCDF = new InverseCDF(this, fWrap);
144
145 InterpolationTable *theTable = new InvFInterpolationTable(*theInverseCDF, nNodes);
146 delete theInverseCDF;
147 return theTable;
148 }
virtual G4double getXMaximum() const
Return the maximum allowed value of the independent variable.
G4double(*const ManipulatorFunc)(const G4double)
Typedef to simplify the syntax of inverseCDFTable.
virtual G4double integrate(const G4double x0, const G4double x1, const G4double step=-1.) const
Integrate the function between two values.
virtual G4double getXMinimum() const
Return the minimum allowed value of the independent variable.

References G4INCL::IFunction1D::getXMaximum(), G4INCL::IFunction1D::getXMinimum(), G4INCL::IFunction1D::IFunction1D(), G4INCL::Math::min(), G4INCL::IFunction1D::operator()(), G4INCL::IFunction1D::xMax, and G4INCL::IFunction1D::xMin.

Referenced by G4INCL::NuclearDensityFactory::createPCDFTable(), G4INCL::NuclearDensityFactory::createRCDFTable(), and G4INCL::NuclearDensityFactory::createRPCorrelationTable().

◆ operator()()

G4double G4INCL::InteractionAvatar::ViolationEEnergyFunctor::operator() ( const G4double  x) const
virtual

Compute the energy-conservation violation.

Parameters
xscale factor for the particle energy
Returns
the energy-conservation violation

Implements G4INCL::IFunction1D.

Definition at line 497 of file G4INCLInteractionAvatar.cc.

497 {
500 }
static const G4double alpha
G4double getPotentialEnergy() const
Get the particle potential energy.

References alpha.

◆ primitive()

IFunction1D * G4INCL::IFunction1D::primitive ( ) const
inherited

Return a pointer to the (numerical) primitive to this function.

Definition at line 105 of file G4INCLIFunction1D.cc.

105 {
106 class Primitive : public IFunction1D {
107 public:
108 Primitive(IFunction1D const * const f) :
110 theFunction(f)
111 {}
112
113 G4double operator()(const G4double x) const {
114 return theFunction->integrate(xMin,x);
115 }
116 private:
117 IFunction1D const * const theFunction;
118 } *thePrimitive = new Primitive(this);
119
120 return thePrimitive;
121 }

References G4INCL::IFunction1D::getXMaximum(), G4INCL::IFunction1D::getXMinimum(), G4INCL::IFunction1D::IFunction1D(), G4INCL::IFunction1D::operator()(), Primitive, and G4INCL::IFunction1D::xMin.

◆ setParticleEnergy()

void G4INCL::InteractionAvatar::ViolationEEnergyFunctor::setParticleEnergy ( const G4double  energy) const

Set the energy of the particle.

Parameters
energy

Definition at line 502 of file G4INCLInteractionAvatar.cc.

502 {
503
504 G4double locE;
506// assert(theNucleus); // Local energy without a nucleus doesn't make sense
507 locE = KinematicsUtils::getLocalEnergy(theNucleus, theParticle); // Initial value of local energy
508 } else
509 locE = 0.;
510 G4double locEOld;
512 for(G4int iterLocE=0;
514 ++iterLocE) {
515 locEOld = locE;
516 G4double particleEnergy = energyThreshold + locE + alpha*(theEnergy-energyThreshold);
517 const G4double theMass2 = std::pow(particleEnergy,2.)-theMomentum.mag2();
518 G4double theMass;
520 theMass = std::sqrt(theMass2);
521 else {
523 particleEnergy = energyThreshold;
524 }
525 theParticle->setMass(theMass);
526 theParticle->setEnergy(particleEnergy); // Update the energy of the particle...
527 if(theNucleus) {
528 theNucleus->updatePotentialEnergy(theParticle); // ...update its potential energy...
530 locE = KinematicsUtils::getLocalEnergy(theNucleus, theParticle); // ...and recompute locE.
531 else
532 locE = 0.;
533 } else
534 locE = 0.;
535 deltaLocE = std::abs(locE-locEOld);
536 }
537
538 }
static const G4int maxIterLocE
Max number of iterations for the determination of the local-energy Q-value.
static const G4double locEAccuracy
Target accuracy in the determination of the local-energy Q-value.
void updatePotentialEnergy(Particle *p) const
Update the particle potential energy.
void setMass(G4double mass)
void setEnergy(G4double energy)
G4double mag2() const
G4double getLocalEnergy(Nucleus const *const n, Particle *const p)
G4ThreadLocal G4double minDeltaMass2

References alpha, G4INCL::KinematicsUtils::getLocalEnergy(), G4INCL::InteractionAvatar::locEAccuracy, G4INCL::InteractionAvatar::maxIterLocE, G4INCL::ParticleTable::minDeltaMass, G4INCL::ParticleTable::minDeltaMass2, G4INCL::InteractionAvatar::shouldUseLocalEnergy(), G4INCL::InteractionAvatar::theNucleus, and G4INCL::Nucleus::updatePotentialEnergy().

Field Documentation

◆ energyThreshold

G4double G4INCL::InteractionAvatar::ViolationEEnergyFunctor::energyThreshold
private

Threshold for the energy of the particle.

The particle (a delta) cannot have less than this energy.

Definition at line 203 of file G4INCLInteractionAvatar.hh.

◆ initialEnergy

G4double G4INCL::InteractionAvatar::ViolationEEnergyFunctor::initialEnergy
private

Total energy before the interaction.

Definition at line 190 of file G4INCLInteractionAvatar.hh.

◆ integrationCoefficients

const G4double G4INCL::IFunction1D::integrationCoefficients
staticprivateinherited
Initial value:
= {
2.*95.0/288.0,
317.0/240.0,
23.0/30.0,
793.0/720.0,
157.0/160.0,
157.0/160.0,
793.0/720.0,
23.0/30.0,
317.0/240.0,
}

Coefficients for numerical integration.

Definition at line 110 of file G4INCLIFunction1D.hh.

Referenced by G4INCL::IFunction1D::integrate().

◆ shouldUseLocalEnergy

const G4bool G4INCL::InteractionAvatar::ViolationEEnergyFunctor::shouldUseLocalEnergy
private

Whether we should use local energy.

Definition at line 205 of file G4INCLInteractionAvatar.hh.

◆ theEnergy

G4double G4INCL::InteractionAvatar::ViolationEEnergyFunctor::theEnergy
private

The initial energy of the particle.

Definition at line 196 of file G4INCLInteractionAvatar.hh.

◆ theMomentum

ThreeVector G4INCL::InteractionAvatar::ViolationEEnergyFunctor::theMomentum
private

The initial momentum of the particle.

Definition at line 198 of file G4INCLInteractionAvatar.hh.

◆ theNucleus

Nucleus* G4INCL::InteractionAvatar::ViolationEEnergyFunctor::theNucleus
private

Pointer to the nucleus.

Definition at line 192 of file G4INCLInteractionAvatar.hh.

◆ theParticle

Particle* G4INCL::InteractionAvatar::ViolationEEnergyFunctor::theParticle
private

The final-state particle.

Definition at line 194 of file G4INCLInteractionAvatar.hh.

◆ xMax

G4double G4INCL::IFunction1D::xMax
protectedinherited

Maximum value of the independent variable.

Definition at line 106 of file G4INCLIFunction1D.hh.

Referenced by G4INCL::IFunction1D::getXMaximum(), G4INCL::IFunction1D::integrate(), and G4INCL::IFunction1D::inverseCDFTable().

◆ xMin

G4double G4INCL::IFunction1D::xMin
protectedinherited

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