Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/de_excitation/util/src/G4KalbachCrossSection.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/de_excitation/util/src/G4KalbachCrossSection.cc (Version 11.3.0) and /processes/hadronic/models/de_excitation/util/src/G4KalbachCrossSection.cc (Version 5.1)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 //                                                
 27 //                                                
 28 // V.Ivanchenko 26.02.2018                        
 29 //                                                
 30                                                   
 31 #include "G4KalbachCrossSection.hh"               
 32 #include "G4Exp.hh"                               
 33 #include "G4Pow.hh"                               
 34                                                   
 35 //from subroutine sigpar of PRECO-2000  by Con    
 36 //     Calculate optical model reaction cross     
 37 //     using the empirical parameterization       
 38 //     of Narasimha Murthy, Chaterjee, and Gup    
 39 //     going over to the geometrical limit at     
 40 //                                                
 41 //           Proton cross sections scaled down    
 42 //           (appropriate for becchetti-greenl    
 43 //           p2 reduced and global red'n facto    
 44 //           Neutron cross sections scaled dow    
 45 //           Scaled up for A>210 (added June '    
 46 //           my published papers)                 
 47 //           (appropriate for Mani et al poten    
 48 //                                                
 49                                                   
 50 // index: 0-neutron, 1-proton, 2-deuteron, 3-t    
 51 // parameters: p0, p1, p2, lambda0, lambda1, m    
 52                                                   
 53 static const G4double paramK[6][11] = {           
 54   // n from mani, melkanoff and iori              
 55   {-312., 0.,      0.,  12.10,  -11.27, 234.1,    
 56   // p from  becchetti and greenlees (but modi    
 57   // correction function and p2 changed from -    
 58   {15.72, 9.65, -300.,  0.00437,-16.58, 244.7,    
 59   // d from o.m. of perey and perey               
 60   {0.798, 420.3,-1651., 0.00619, -7.54, 583.5,    
 61   // t from o.m. of hafele, flynn et al           
 62   {-21.45,484.7,-1608., 0.0186, -8.9,   686.3,    
 63   // 3he from o.m. of gibson et al                
 64   {-2.88,205.6, -1487.,0.00459,-8.93,   611.2,    
 65   // alpha from huizenga and igo                  
 66   { 10.95,-85.2, 1146.,  0.0643,-13.96, 781.2,    
 67 };                                                
 68                                                   
 69 G4double G4KalbachCrossSection::ComputePowerPa    
 70 {                                                 
 71   return G4Pow::GetInstance()->powZ(resA, para    
 72 }                                                 
 73                                                   
 74 G4double                                          
 75 G4KalbachCrossSection::ComputeCrossSection(G4d    
 76                    G4double resA13, G4double a    
 77                    G4int idx, G4int Z, G4int A    
 78                    G4int resA)                    
 79 {                                                 
 80   G4double sig = 0.0;                             
 81   G4double signor = 1.0;                          
 82   G4double lambda, mu, nu;                        
 83   G4double ec = std::min(4.0, 100./(G4double)r    
 84   if(0 < Z) { ec = cb; }                          
 85                                                   
 86   G4double ecsq = ec*ec;                          
 87   G4double elab = K * (A + resA) / G4double(re    
 88                                                   
 89   if(idx == 0) { // parameterization for neutr    
 90                                                   
 91     if(resA < 40)       { signor =0.7 + resA*0    
 92     else if(resA > 210) { signor = 1. + (resA-    
 93     lambda = paramK[idx][3]/resA13 + paramK[id    
 94     mu = (paramK[idx][5] + paramK[idx][6]*resA    
 95     // JMQ 20.11.2008 very low energy behaviou    
 96     //                (problem for A (apprx.)>    
 97     //                neutron xs going to zero    
 98     nu = std::abs((paramK[idx][7]*resA + param    
 99       + paramK[idx][9]);                          
100                                                   
101   } else { // parameterization for charged        
102     // proton correction                          
103     if(idx == 1) {                                
104       if (resA <= 60)      { signor = 0.92; }     
105       else if (resA < 100) { signor = 0.8 + re    
106     }                                             
107     lambda = paramK[idx][3]*resA + paramK[idx]    
108     mu = paramK[idx][5]*amu1;                     
109     nu = amu1* (paramK[idx][7] + paramK[idx][8    
110   }                                               
111   /*                                              
112     G4cout << "## idx=" << idx << " K=" << K <    
113            << " ec=" << ec << " lambda=" << la    
114            << "  nu=" << nu << G4endl;            
115   */                                              
116   // threashold cross section                     
117   if(elab < ec) {                                 
118     G4double p = paramK[idx][0];                  
119     if(0 < Z) { p += paramK[idx][1]/ec + param    
120     G4double a = -2*p*ec + lambda - nu/ecsq;      
121     G4double b = p*ecsq + mu + 2*nu/ec;           
122     G4double det = a*a - 4*p*b;                   
123     G4double ecut = (det > 0.0) ? (std::sqrt(d    
124                                                   
125     //G4cout << "  elab= " << elab << " ecut=     
126     //       << "  sig1= " << (p*elab*elab + a    
127     // If ecut>0, sig=0 at elab=ecut              
128     if(0 == idx) {                                
129       sig = (lambda*ec + mu + nu/ec)*signor*st    
130     } else if(elab >= ecut) {                     
131       sig = (p*elab*elab + a*elab + b)*signor;    
132                                                   
133       // extra proton correction                  
134       if(1 == idx) {                              
135   // c and w are for global correction factor     
136   // they are scaled down for light targets wh    
137   G4double cc = std::min(3.15, ec*0.5);           
138   G4double signor2 = (ec - elab - cc) *3.15/ (    
139   sig /= (1. + G4Exp(signor2));                   
140       }                                           
141     }                                             
142     //G4cout << "       ecut= " << ecut << " a    
143     //     <<  " signor= " << signor << " sig=    
144                                                   
145     // high energy cross section                  
146   } else {                                        
147     // etest is the energy above which the rxn    
148     // compared with the geometrical limit and    
149                                                   
150     // neutron parameters                         
151     G4double etest  = 32.;                        
152     G4double xnulam = 1.0;                        
153                                                   
154     // parameters for charged                     
155     static const G4double flow = 1.e-18;          
156     static const G4double spill= 1.e+18;          
157     if(0 < Z) {                                   
158       etest = 0.0;                                
159       xnulam = nu / lambda;                       
160       xnulam = std::min(xnulam, spill);           
161       if (xnulam >= flow) {                       
162   if(1 == idx) { etest = std::sqrt(xnulam) + 7    
163   else         { etest = 1.2 *std::sqrt(xnulam    
164       }                                           
165     }                                             
166     // ** For xnulam.gt.0, sig reaches a maxim    
167     sig = (lambda*elab + mu + nu/elab)*signor;    
168     if (xnulam >= flow && elab >= etest) {        
169       G4double geom = std::sqrt(A*K);             
170       geom = 1.23*resA13 + paramK[idx][10] + 4    
171       geom = 31.416 * geom * geom;                
172       sig = std::max(sig, geom);                  
173     }                                             
174   }                                               
175   sig = std::max(sig, 0.0);                       
176   //G4cout << "  ---- sig= " << sig << G4endl;    
177   return sig;                                     
178 }                                                 
179