Geant4-11
G4INCLInteractionAvatar.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
38/* \file G4INCLInteractionAvatar.hh
39 * \brief Virtual class for interaction avatars.
40 *
41 * This class is inherited by decay and collision avatars. The goal is to
42 * provide a uniform treatment of common physics, such as Pauli blocking,
43 * enforcement of energy conservation, etc.
44 *
45 * \date Mar 1st, 2011
46 * \author Davide Mancusi
47 */
48
49#ifndef G4INCLINTERACTIONAVATAR_HH_
50#define G4INCLINTERACTIONAVATAR_HH_
51
52#include "G4INCLIAvatar.hh"
53#include "G4INCLNucleus.hh"
54#include "G4INCLFinalState.hh"
55#include "G4INCLRootFinder.hh"
58
59namespace G4INCL {
60
62 public:
65 virtual ~InteractionAvatar();
66
68 static const G4double locEAccuracy;
70 static const G4int maxIterLocE;
71
73 static void deleteBackupParticles();
74
75 protected:
77
79
84 void preInteractionLocalEnergy(Particle * const p);
85
93
94 void preInteraction();
96
101 void restoreParticles() const;
102
105
113
114 private:
117 public:
122 ViolationEMomentumFunctor(Nucleus * const nucleus, ParticleList const &modAndCre, const G4double totalEnergyBeforeInteraction, ThreeVector const &boost, const G4bool localE);
124
130 G4double operator()(const G4double x) const;
131
133 void cleanUp(const G4bool success) const;
134
135 private:
139 std::vector<ThreeVector> particleMomenta;
146
149
158 void scaleParticleMomenta(const G4double alpha) const;
159
160 };
161
164 public:
169 ViolationEEnergyFunctor(Nucleus * const nucleus, Particle * const aParticle, const G4double totalEnergyBeforeInteraction, const G4bool localE);
171
177 G4double operator()(const G4double x) const;
178
180 void cleanUp(const G4bool success) const;
181
186 void setParticleEnergy(const G4double energy) const;
187
188 private:
206 };
207
209
210 protected:
222
224
226 };
227
228}
229
230#endif /* G4INCLINTERACTIONAVATAR_HH_ */
Singleton for recycling allocation of instances of a given class.
#define INCL_DECLARE_ALLOCATION_POOL(T)
Static root-finder algorithm.
static const G4double alpha
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
RootFunctor-derived object for enforcing energy conservation in delta production.
G4double energyThreshold
Threshold for the energy of the particle.
G4double operator()(const G4double x) const
Compute the energy-conservation violation.
G4double initialEnergy
Total energy before the interaction.
ThreeVector theMomentum
The initial momentum of the particle.
ViolationEEnergyFunctor(Nucleus *const nucleus, Particle *const aParticle, const G4double totalEnergyBeforeInteraction, const G4bool localE)
Prepare for calling the () operator and setParticleEnergy.
void cleanUp(const G4bool success) const
Clean up after root finding.
void setParticleEnergy(const G4double energy) const
Set the energy of the particle.
const G4bool shouldUseLocalEnergy
Whether we should use local energy.
G4double theEnergy
The initial energy of the particle.
RootFunctor-derived object for enforcing energy conservation in N-N.
ThreeVector const & boostVector
Pointer to the boost vector.
ViolationEMomentumFunctor(Nucleus *const nucleus, ParticleList const &modAndCre, const G4double totalEnergyBeforeInteraction, ThreeVector const &boost, const G4bool localE)
Prepare for calling the () operator and scaleParticleMomenta.
void cleanUp(const G4bool success) const
Clean up after root finding.
ParticleList finalParticles
List of final-state particles.
void scaleParticleMomenta(const G4double alpha) const
Scale the momenta of the modified and created particles.
G4double operator()(const G4double x) const
Compute the energy-conservation violation.
std::vector< ThreeVector > particleMomenta
CM particle momenta, as determined by the channel.
const G4bool shouldUseLocalEnergy
True if we should use local energy.
G4double initialEnergy
Total energy before the interaction.
static const G4int maxIterLocE
Max number of iterations for the determination of the local-energy Q-value.
void restoreParticles() const
Restore the state of both particles.
G4bool enforceEnergyConservation(FinalState *const fs)
Enforce energy conservation.
static void deleteBackupParticles()
Release the memory allocated for the backup particles.
void preInteractionBlocking()
Store the state of the particles before the interaction.
static const G4double locEAccuracy
Target accuracy in the determination of the local-energy Q-value.
virtual G4INCL::IChannel * getChannel()=0
InteractionAvatar(G4double, G4INCL::Nucleus *, G4INCL::Particle *)
static G4ThreadLocal Particle * backupParticle2
G4bool shouldUseLocalEnergy() const
true if the given avatar should use local energy
static G4ThreadLocal Particle * backupParticle1
G4bool bringParticleInside(Particle *const p)
void preInteractionLocalEnergy(Particle *const p)
Apply local-energy transformation, if appropriate.
G4double energy(const ThreeVector &p, const G4double m)
#define G4ThreadLocal
Definition: tls.hh:77