Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4INCLDeuteronDensity.cc
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// INCL++ revision: v5.1.8
34//
35#define INCLXX_IN_GEANT4_MODE 1
36
37#include "globals.hh"
38
39/** \file G4INCLDeuteronDensity.cc
40 * \brief Deuteron density in r and p according to the Paris potential.
41 *
42 * \date 6 March 2012
43 * \author Davide Mancusi
44 */
45
47#include "G4INCLGlobals.hh"
48// #include <cassert>
49#include <algorithm>
50
51namespace G4INCL {
52
53 /// \brief Coefficients for the deuteron wave function
54 const G4double DeuteronDensity::coeff1[coeffTableSize] = {
55 0.88688076e+0,
56 -0.34717093e+0,
57 -0.30502380e+1,
58 0.56207766e+2,
59 -0.74957334e+3,
60 0.53365279e+4,
61 -0.22706863e+5,
62 0.60434469e+5,
63 -0.10292058e+6,
64 0.11223357e+6,
65 -0.75925226e+5,
66 0.29059715e+5,
67 -0.48157368e+4
68 };
69
70 /// \brief Coefficients for the deuteron wave function
71 const G4double DeuteronDensity::coeff2[coeffTableSize] = {
72 0.23135193e-1,
73 -0.85604572e+0,
74 0.56068193e+1,
75 -0.69462922e+2,
76 0.41631118e+3,
77 -0.12546621e+4,
78 0.12387830e+4,
79 0.33739172e+4,
80 -0.13041151e+5,
81 0.19512524e+5,
82 -0.15634324e+5,
83 0.66231089e+4,
84 -0.11698185e+4
85 };
86
87 /// \brief Normalisation coefficient for the r-space deuteron wave function
88 const G4double DeuteronDensity::normalisationR = std::sqrt(32. * Math::pi) * 0.28212;
89
90 /// \brief Normalisation coefficient for the p-space deuteron wave function
91 const G4double DeuteronDensity::normalisationP = normalisationR / (std::sqrt(4. * Math::pi) * std::pow(PhysicalConstants::hc,1.5));
92
93 /// \brief Mysterious coefficient that appears in the wavefunctions
94 const G4double DeuteronDensity::al = 0.23162461;
95
97 const G4double sWave = wavefunctionR(0, r);
98 const G4double dWave = wavefunctionR(2, r);
99 return r*r*(sWave*sWave + dWave*dWave);
100 }
101
103 const G4double sWave = wavefunctionR(0, r);
104 const G4double dWave = wavefunctionR(2, r);
105 const G4double sWaveDeriv = derivWavefunctionR(0, r);
106 const G4double dWaveDeriv = derivWavefunctionR(2, r);
107 return (sWave*sWaveDeriv + dWave*dWaveDeriv) / Math::twoPi;
108 }
109
111 const G4double sWave = wavefunctionP(0, p);
112 const G4double dWave = wavefunctionP(2, p);
113 return p*p*(sWave*sWave + dWave*dWave);
114 }
115
117// assert(l==0 || l==2); // only s- and d-waves in a deuteron
118 const G4double r = 2. * std::max(theR, 1.e-4);
119
120 G4double result = 0.;
121 G4double fmr;
122
123 for(G4int i=0; i<coeffTableSize; ++i) {
124 fmr = r * (al+i);
125 if(l==0) { // s-wave
126 result += coeff1[i] * std::exp(-fmr);
127 } else { // d-wave
128 result += coeff2[i] * std::exp(-fmr) * (1.+3./fmr+3./(fmr*fmr));
129 }
130 }
131
132 result *= normalisationR/r;
133 return result;
134 }
135
137// assert(l==0 || l==2); // only s- and d-waves in a deuteron
138 const G4double r = 2. * std::max(theR, 1.e-4);
139
140 G4double result = 0.;
141 G4double fmr;
142
143 for(G4int i=0; i<coeffTableSize; ++i) {
144 fmr = r * (al+i);
145 if(l==0) { // s-wave
146 result += coeff1[i] * std::exp(-fmr) * (fmr + 1.);
147 } else { // d-wave
148 result += coeff2[i] * std::exp(-fmr) * (fmr + 4. + 9./fmr + 9./(fmr*fmr));
149 }
150 }
151
152 result *= -normalisationR/(r*r);
153 return result;
154 }
155
157// assert(l==0 || l==2); // only s- and d-waves in a deuteron
158 const G4double q = theQ / PhysicalConstants::hc;
159 const G4double q2 = q*q;
160 G4double result=0.;
161 G4double fmq, alPlusI;
162 for(G4int i=0; i<coeffTableSize; ++i) {
163 alPlusI = al+i;
164 fmq = q2 + alPlusI*alPlusI;
165 if(l==0) { // s-wave
166 result += coeff1[i] / fmq;
167 } else { // d-wave
168 result += coeff2[i] / fmq;
169 }
170 }
171
172 result *= normalisationP;
173 return result;
174 }
175
176}
177
Deuteron density in r and p according to the Paris potential.
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
static G4double wavefunctionR(const G4int l, const G4double r)
static G4double derivDensityR(const G4double r)
First derivative of the r-space density function.
static G4double derivWavefunctionR(const G4int l, const G4double r)
static G4double wavefunctionP(const G4int l, const G4double p)
static G4double densityR(const G4double r)
PDF for a nucleon in r space.
static G4double densityP(const G4double p)
PDF for a nucleon in p space.
const G4double pi
const G4double twoPi
const G4double hc
[MeV*fm]