Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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]