Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLCoulombNonRelativistic.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 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
28 // Davide Mancusi, CEA
29 // Alain Boudard, CEA
30 // Sylvie Leray, CEA
31 // Joseph Cugnon, University of Liege
32 //
33 #define INCLXX_IN_GEANT4_MODE 1
34 
35 #include "globals.hh"
36 
37 /** \file G4INCLCoulombNonRelativistic.hh
38  * \brief Class for non-relativistic Coulomb distortion.
39  *
40  * \date 14 February 2011
41  * \author Davide Mancusi
42  */
43 
44 #ifndef G4INCLCOULOMBNONRELATIVISTIC_HH_
45 #define G4INCLCOULOMBNONRELATIVISTIC_HH_
46 
47 #include "G4INCLParticle.hh"
48 #include "G4INCLNucleus.hh"
49 #include "G4INCLICoulomb.hh"
50 #include "G4INCLCoulombNone.hh"
51 #include "G4INCLGlobals.hh"
52 
53 namespace G4INCL {
54 
56  public:
59 
60  /** \brief Modify the momentum of the particle and position it on the
61  * surface of the nucleus.
62  *
63  * This method performs non-relativistic distortion.
64  *
65  * \param p incoming particle
66  * \param n distorting nucleus
67  **/
68  ParticleEntryAvatar *bringToSurface(Particle * const p, Nucleus * const n) const;
69 
70  /** \brief Modify the momentum of the incoming cluster and position it on
71  * the surface of the nucleus.
72  *
73  * This method performs non-relativistic distortion. The momenta of the
74  * particles that compose the cluster are also distorted.
75  *
76  * \param c incoming cluster
77  * \param n distorting nucleus
78  **/
79  IAvatarList bringToSurface(Cluster * const c, Nucleus * const n) const;
80 
81  /** \brief Modify the momenta of the outgoing particles.
82  *
83  * This method performs non-relativistic distortion.
84  *
85  * \param pL list of outgoing particles
86  * \param n distorting nucleus
87  */
88  void distortOut(ParticleList const &pL, Nucleus const * const n) const;
89 
90  /** \brief Return the maximum impact parameter for Coulomb-distorted
91  * trajectories. **/
92  G4double maxImpactParameter(ParticleSpecies const &p, const G4double kinE, Nucleus const *
93  const n) const;
94 
95  private:
96  /// \brief Return the minimum distance of approach in a head-on collision (b=0).
97  G4double minimumDistance(ParticleSpecies const &p, const G4double kineticEnergy, Nucleus const * const n) const {
98  const G4double particleMass = ParticleTable::getTableSpeciesMass(p);
99  const G4double nucleusMass = n->getTableMass();
100  const G4double reducedMass = particleMass*nucleusMass/(particleMass+nucleusMass);
101  const G4double kineticEnergyInCM = kineticEnergy * reducedMass / particleMass;
102  const G4double theMinimumDistance = PhysicalConstants::eSquared * p.theZ * n->getZ() * particleMass
103  / (kineticEnergyInCM * reducedMass);
104  INCL_DEBUG("Minimum distance of approach due to Coulomb = " << theMinimumDistance << std::endl);
105  return theMinimumDistance;
106  }
107 
108  /// \brief Return the minimum distance of approach in a head-on collision (b=0).
109  G4double minimumDistance(Particle const * const p, Nucleus const * const n) const {
110  return minimumDistance(p->getSpecies(), p->getKineticEnergy(), n);
111  }
112 
113  /** \brief Perform Coulomb deviation
114  *
115  * Modifies the entrance angle of the particle and its impact parameter.
116  * Can be applied to Particles and Clusters.
117  *
118  * The trajectory for an asymptotic impact parameter \f$b\f$ is
119  * parametrised as follows:
120  * \f[
121  * r(\theta) = \frac{(1-e^2)r_0/2}{1-e \sin(\theta-\theta_R/2)},
122  * \f]
123  * here \f$e\f$ is the hyperbola eccentricity:
124  * \f[
125  * e = \sqrt{1+4b^2/r_0^2};
126  * \f]
127  * \f$\theta_R\f$ is the Rutherford scattering angle:
128  * \f[
129  * \theta_R = \pi - 2\arctan\left(\frac{2b}{r_0}\right)
130  * \f]
131  * \f$\theta\f$ ranges from \f$\pi\f$ (initial state) to \f$\theta_R\f$
132  * (scattered particle) and \f$r_0\f$ is the minimum distance of approach
133  * in a head-on collision (see the minimumDistance() method).
134  *
135  * \param p pointer to the Particle
136  * \param n pointer to the Nucleus
137  * \return false if below the barrier
138  */
139  G4bool coulombDeviation(Particle * const p, Nucleus const * const n) const;
140 
141  /** \brief Get the Coulomb radius for a given particle
142  *
143  * That's the radius of the sphere that the Coulomb trajectory of the
144  * incoming particle should intersect. The intersection point is used to
145  * determine the effective impact parameter of the trajectory and the new
146  * entrance angle.
147  *
148  * If the particle is not a Cluster, the Coulomb radius reduces to the
149  * surface radius. We use a parametrisation for d, t, He3 and alphas. For
150  * heavier clusters we fall back to the surface radius.
151  *
152  * \param p the particle species
153  * \param n the deflecting nucleus
154  * \return Coulomb radius
155  */
156  G4double getCoulombRadius(ParticleSpecies const &p, Nucleus const * const n) const;
157 
158  /// \brief Internal CoulombNone slave to generate the avatars
159  CoulombNone theCoulombNoneSlave;
160  };
161 }
162 
163 #endif /* G4INCLCOULOMBNONRELATIVISTIC_HH_ */
ParticleEntryAvatar * bringToSurface(Particle *const p, Nucleus *const n) const
Modify the momentum of the particle and position it on the surface of the nucleus.
virtual G4double getTableMass() const
Get the real particle mass.
const G4double eSquared
Coulomb conversion factor [MeV*fm].
const char * p
Definition: xmltok.h:285
G4double maxImpactParameter(ParticleSpecies const &p, const G4double kinE, Nucleus const *const n) const
Return the maximum impact parameter for Coulomb-distorted trajectories.
bool G4bool
Definition: G4Types.hh:79
G4int getZ() const
Returns the charge number.
Placeholder class for no Coulomb distortion.
const G4int n
G4double getTableSpeciesMass(const ParticleSpecies &p)
Abstract interface for Coulomb distortion.
double G4double
Definition: G4Types.hh:76
#define INCL_DEBUG(x)
void distortOut(ParticleList const &pL, Nucleus const *const n) const
Modify the momenta of the outgoing particles.