Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCrossSections.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/inclxx/incl_physics/src/G4INCLCrossSections.cc (Version 11.3.0) and /processes/hadronic/models/inclxx/incl_physics/src/G4INCLCrossSections.cc (Version 10.0.p3)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // INCL++ intra-nuclear cascade model              26 // INCL++ intra-nuclear cascade model
 27 // Alain Boudard, CEA-Saclay, France           <<  27 // Pekka Kaitaniemi, CEA and Helsinki Institute of Physics
 28 // Joseph Cugnon, University of Liege, Belgium <<  28 // Davide Mancusi, CEA
 29 // Jean-Christophe David, CEA-Saclay, France   <<  29 // Alain Boudard, CEA
 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H <<  30 // Sylvie Leray, CEA
 31 // Sylvie Leray, CEA-Saclay, France            <<  31 // Joseph Cugnon, University of Liege
 32 // Davide Mancusi, CEA-Saclay, France          << 
 33 //                                                 32 //
 34 #define INCLXX_IN_GEANT4_MODE 1                    33 #define INCLXX_IN_GEANT4_MODE 1
 35                                                    34 
 36 #include "globals.hh"                              35 #include "globals.hh"
 37                                                    36 
 38 #include "G4INCLCrossSections.hh"                  37 #include "G4INCLCrossSections.hh"
 39 #include "G4INCLKinematicsUtils.hh"                38 #include "G4INCLKinematicsUtils.hh"
 40 #include "G4INCLParticleTable.hh"                  39 #include "G4INCLParticleTable.hh"
 41 #include "G4INCLLogger.hh"                         40 #include "G4INCLLogger.hh"
 42 #include "G4INCLCrossSectionsINCL46.hh"        << 
 43 #include "G4INCLCrossSectionsMultiPions.hh"    << 
 44 #include "G4INCLCrossSectionsTruncatedMultiPio << 
 45 #include "G4INCLCrossSectionsMultiPionsAndReso << 
 46 #include "G4INCLCrossSectionsStrangeness.hh"   << 
 47 #include "G4INCLCrossSectionsAntiparticles.hh" << 
 48 // #include <cassert>                              41 // #include <cassert>
 49                                                    42 
 50 namespace G4INCL {                                 43 namespace G4INCL {
 51                                                    44 
 52   namespace {                                      45   namespace {
 53     G4ThreadLocal ICrossSections *theCrossSect     46     G4ThreadLocal ICrossSections *theCrossSections;
 54   }                                                47   }
 55                                                    48 
 56   namespace CrossSections {                        49   namespace CrossSections {
 57     G4double elastic(Particle const * const p1     50     G4double elastic(Particle const * const p1, Particle const * const p2) {
 58       return theCrossSections->elastic(p1,p2);     51       return theCrossSections->elastic(p1,p2);
 59     }                                              52     }
 60                                                    53 
 61     G4double total(Particle const * const p1,      54     G4double total(Particle const * const p1, Particle const * const p2) {
 62       return theCrossSections->total(p1,p2);       55       return theCrossSections->total(p1,p2);
 63     }                                              56     }
 64                                                    57 
 65     G4double NDeltaToNN(Particle const * const <<  58     G4double pionNucleon(Particle const * const p1, Particle const * const p2) {
 66       return theCrossSections->NDeltaToNN(p1,p <<  59       return theCrossSections->pionNucleon(p1,p2);
 67     }                                              60     }
 68                                                    61 
 69     G4double NNToNDelta(Particle const * const <<  62     G4double recombination(Particle const * const p1, Particle const * const p2) {
 70       return theCrossSections->NNToNDelta(p1,p <<  63       return theCrossSections->recombination(p1,p2);
 71     }                                              64     }
 72                                                    65 
 73   G4double NNToxPiNN(const G4int xpi, Particle <<  66     G4double deltaProduction(Particle const * const p1, Particle const * const p2) {
 74     return theCrossSections->NNToxPiNN(xpi,p1, <<  67       return theCrossSections->deltaProduction(p1,p2);
 75   }                                            << 
 76                                                << 
 77   G4double piNToDelta(Particle const * const p << 
 78           return theCrossSections->piNToDelta( << 
 79   }                                            << 
 80                                                << 
 81   G4double piNToxPiN(const G4int xpi, Particle << 
 82           return theCrossSections->piNToxPiN(x << 
 83   }                                            << 
 84                                                << 
 85   G4double piNToEtaN(Particle const * const p1 << 
 86       return theCrossSections->piNToEtaN(p1,p2 << 
 87   }                                            << 
 88                                                << 
 89   G4double piNToOmegaN(Particle const * const  << 
 90       return theCrossSections->piNToOmegaN(p1, << 
 91   }                                            << 
 92                                                << 
 93   G4double piNToEtaPrimeN(Particle const * con << 
 94       return theCrossSections->piNToEtaPrimeN( << 
 95   }                                            << 
 96                                                << 
 97   G4double etaNToPiN(Particle const * const p1 << 
 98       return theCrossSections->etaNToPiN(p1,p2 << 
 99   }                                            << 
100                                                << 
101   G4double etaNToPiPiN(Particle const * const  << 
102       return theCrossSections->etaNToPiPiN(p1, << 
103   }                                            << 
104                                                << 
105   G4double omegaNToPiN(Particle const * const  << 
106       return theCrossSections->omegaNToPiN(p1, << 
107   }                                            << 
108                                                << 
109   G4double omegaNToPiPiN(Particle const * cons << 
110       return theCrossSections->omegaNToPiPiN(p << 
111   }                                            << 
112                                                << 
113   G4double etaPrimeNToPiN(Particle const * con << 
114       return theCrossSections->etaPrimeNToPiN( << 
115   }                                            << 
116                                                << 
117   G4double NNToNNEta(Particle const * const p1 << 
118       return theCrossSections->NNToNNEta(p1,p2 << 
119   }                                            << 
120                                                << 
121   G4double NNToNNEtaExclu(Particle const * con << 
122       return theCrossSections->NNToNNEtaExclu( << 
123   }                                            << 
124                                                << 
125   G4double NNToNNEtaxPi(const G4int xpi, Parti << 
126         return theCrossSections->NNToNNEtaxPi( << 
127   }                                            << 
128                                                << 
129   G4double NNToNDeltaEta(Particle const * cons << 
130       return theCrossSections->NNToNDeltaEta(p << 
131   }                                            << 
132                                                << 
133                                                << 
134    G4double NNToNNOmega(Particle const * const << 
135       return theCrossSections->NNToNNOmega(p1, << 
136    }                                           << 
137                                                << 
138    G4double NNToNNOmegaExclu(Particle const *  << 
139       return theCrossSections->NNToNNOmegaExcl << 
140    }                                           << 
141                                                << 
142    G4double NNToNNOmegaxPi(const G4int xpi, Pa << 
143         return theCrossSections->NNToNNOmegaxP << 
144    }                                           << 
145                                                << 
146    G4double NNToNDeltaOmega(Particle const * c << 
147       return theCrossSections->NNToNDeltaOmega << 
148    }                                           << 
149                                                << 
150                                                << 
151     G4double NYelastic(Particle const * const  << 
152       return theCrossSections->NYelastic(p1,p2 << 
153     }                                          << 
154                                                << 
155     G4double NKbelastic(Particle const * const << 
156       return theCrossSections->NKbelastic(p1,p << 
157     }                                          << 
158                                                << 
159     G4double NKelastic(Particle const * const  << 
160       return theCrossSections->NKelastic(p1,p2 << 
161     }                                          << 
162                                                << 
163     G4double NNToNLK(Particle const * const p1 << 
164       return theCrossSections->NNToNLK(p1,p2); << 
165     }                                          << 
166                                                << 
167     G4double NNToNSK(Particle const * const p1 << 
168       return theCrossSections->NNToNSK(p1,p2); << 
169     }                                          << 
170                                                << 
171     G4double NNToNLKpi(Particle const * const  << 
172       return theCrossSections->NNToNLKpi(p1,p2 << 
173     }                                              68     }
174                                                    69 
175     G4double NNToNSKpi(Particle const * const  << 
176       return theCrossSections->NNToNSKpi(p1,p2 << 
177     }                                          << 
178                                                << 
179     G4double NNToNLK2pi(Particle const * const << 
180       return theCrossSections->NNToNLK2pi(p1,p << 
181     }                                          << 
182                                                << 
183     G4double NNToNSK2pi(Particle const * const << 
184       return theCrossSections->NNToNSK2pi(p1,p << 
185     }                                          << 
186                                                << 
187     G4double NNToNNKKb(Particle const * const  << 
188       return theCrossSections->NNToNNKKb(p1,p2 << 
189     }                                          << 
190                                                << 
191     G4double NNToMissingStrangeness(Particle c << 
192       return theCrossSections->NNToMissingStra << 
193     }                                          << 
194                                                << 
195     G4double NDeltaToNLK(Particle const * cons << 
196         return theCrossSections->NDeltaToNLK(p << 
197     }                                          << 
198     G4double NDeltaToNSK(Particle const * cons << 
199         return theCrossSections->NDeltaToNSK(p << 
200     }                                          << 
201     G4double NDeltaToDeltaLK(Particle const *  << 
202         return theCrossSections->NDeltaToDelta << 
203     }                                          << 
204     G4double NDeltaToDeltaSK(Particle const *  << 
205         return theCrossSections->NDeltaToDelta << 
206     }                                          << 
207                                                << 
208     G4double NDeltaToNNKKb(Particle const * co << 
209         return theCrossSections->NDeltaToNNKKb << 
210     }                                          << 
211                                                << 
212     G4double NpiToLK(Particle const * const p1 << 
213       return theCrossSections->NpiToLK(p1,p2); << 
214     }                                          << 
215                                                << 
216     G4double NpiToSK(Particle const * const p1 << 
217       return theCrossSections->NpiToSK(p1,p2); << 
218     }                                          << 
219                                                << 
220     G4double p_pimToSmKp(Particle const * cons << 
221       return theCrossSections->p_pimToSmKp(p1, << 
222     }                                          << 
223                                                << 
224     G4double p_pimToSzKz(Particle const * cons << 
225       return theCrossSections->p_pimToSzKz(p1, << 
226     }                                          << 
227                                                << 
228   G4double p_pizToSzKp(Particle const * const  << 
229       return theCrossSections->p_pizToSzKp(p1, << 
230     }                                          << 
231                                                << 
232     G4double NpiToLKpi(Particle const * const  << 
233       return theCrossSections->NpiToLKpi(p1,p2 << 
234     }                                          << 
235                                                << 
236     G4double NpiToSKpi(Particle const * const  << 
237       return theCrossSections->NpiToSKpi(p1,p2 << 
238     }                                          << 
239                                                << 
240     G4double NpiToLK2pi(Particle const * const << 
241       return theCrossSections->NpiToLK2pi(p1,p << 
242     }                                          << 
243                                                << 
244     G4double NpiToSK2pi(Particle const * const << 
245       return theCrossSections->NpiToSK2pi(p1,p << 
246     }                                          << 
247                                                << 
248     G4double NpiToNKKb(Particle const * const  << 
249       return theCrossSections->NpiToNKKb(p1,p2 << 
250     }                                          << 
251                                                << 
252     G4double NpiToMissingStrangeness(Particle  << 
253       return theCrossSections->NpiToMissingStr << 
254     }                                          << 
255                                                << 
256     G4double NLToNS(Particle const * const p1, << 
257       return theCrossSections->NLToNS(p1,p2);  << 
258     }                                          << 
259                                                << 
260     G4double NSToNL(Particle const * const p1, << 
261       return theCrossSections->NSToNL(p1,p2);  << 
262     }                                          << 
263                                                << 
264     G4double NSToNS(Particle const * const p1, << 
265       return theCrossSections->NSToNS(p1,p2);  << 
266     }                                          << 
267                                                << 
268     G4double NKToNK(Particle const * const p1, << 
269       return theCrossSections->NKToNK(p1,p2);  << 
270     }                                          << 
271                                                << 
272     G4double NKToNKpi(Particle const * const p << 
273       return theCrossSections->NKToNKpi(p1,p2) << 
274     }                                          << 
275                                                << 
276     G4double NKToNK2pi(Particle const * const  << 
277       return theCrossSections->NKToNK2pi(p1,p2 << 
278     }                                          << 
279                                                << 
280     G4double NKbToNKb(Particle const * const p << 
281       return theCrossSections->NKbToNKb(p1,p2) << 
282     }                                          << 
283                                                << 
284     G4double NKbToSpi(Particle const * const p << 
285       return theCrossSections->NKbToSpi(p1,p2) << 
286     }                                          << 
287                                                << 
288     G4double NKbToLpi(Particle const * const p << 
289       return theCrossSections->NKbToLpi(p1,p2) << 
290     }                                          << 
291                                                << 
292     G4double NNbarElastic(Particle const* cons << 
293       return theCrossSections->NNbarElastic(p1 << 
294     }                                          << 
295     G4double NNbarCEX(Particle const* const p1 << 
296       return theCrossSections->NNbarCEX(p1,p2) << 
297     }                                          << 
298     G4double NNbarToLLbar(Particle const* cons << 
299       return theCrossSections->NNbarToLLbar(p1 << 
300     }                                          << 
301                                                << 
302     G4double NNbarToNNbarpi(Particle const* co << 
303       return theCrossSections->NNbarToNNbarpi( << 
304     }                                          << 
305     G4double NNbarToNNbar2pi(Particle const* c << 
306       return theCrossSections->NNbarToNNbar2pi << 
307     }                                          << 
308     G4double NNbarToNNbar3pi(Particle const* c << 
309       return theCrossSections->NNbarToNNbar3pi << 
310     }                                          << 
311                                                << 
312     G4double NNbarToAnnihilation(Particle cons << 
313       return theCrossSections->NNbarToAnnihila << 
314     }                                          << 
315                                                << 
316     G4double NKbToS2pi(Particle const * const  << 
317       return theCrossSections->NKbToS2pi(p1,p2 << 
318     }                                          << 
319                                                << 
320     G4double NKbToL2pi(Particle const * const  << 
321       return theCrossSections->NKbToL2pi(p1,p2 << 
322     }                                          << 
323                                                << 
324     G4double NKbToNKbpi(Particle const * const << 
325       return theCrossSections->NKbToNKbpi(p1,p << 
326     }                                          << 
327                                                << 
328     G4double NKbToNKb2pi(Particle const * cons << 
329       return theCrossSections->NKbToNKb2pi(p1, << 
330     }                                          << 
331                                                << 
332                                                << 
333     G4double calculateNNAngularSlope(G4double      70     G4double calculateNNAngularSlope(G4double energyCM, G4int iso) {
334       return theCrossSections->calculateNNAngu     71       return theCrossSections->calculateNNAngularSlope(energyCM, iso);
335     }                                              72     }
336                                                    73 
337     G4double interactionDistancePiN(const G4do     74     G4double interactionDistancePiN(const G4double projectileKineticEnergy) {
338       ThreeVector nullVector;                      75       ThreeVector nullVector;
339       ThreeVector unitVector(0., 0., 1.);          76       ThreeVector unitVector(0., 0., 1.);
340                                                    77 
341       Particle piPlusProjectile(PiPlus, unitVe     78       Particle piPlusProjectile(PiPlus, unitVector, nullVector);
342       piPlusProjectile.setEnergy(piPlusProject     79       piPlusProjectile.setEnergy(piPlusProjectile.getMass()+projectileKineticEnergy);
343       piPlusProjectile.adjustMomentumFromEnerg     80       piPlusProjectile.adjustMomentumFromEnergy();
344       Particle piZeroProjectile(PiZero, unitVe     81       Particle piZeroProjectile(PiZero, unitVector, nullVector);
345       piZeroProjectile.setEnergy(piZeroProject     82       piZeroProjectile.setEnergy(piZeroProjectile.getMass()+projectileKineticEnergy);
346       piZeroProjectile.adjustMomentumFromEnerg     83       piZeroProjectile.adjustMomentumFromEnergy();
347       Particle piMinusProjectile(PiMinus, unit     84       Particle piMinusProjectile(PiMinus, unitVector, nullVector);
348       piMinusProjectile.setEnergy(piMinusProje     85       piMinusProjectile.setEnergy(piMinusProjectile.getMass()+projectileKineticEnergy);
349       piMinusProjectile.adjustMomentumFromEner     86       piMinusProjectile.adjustMomentumFromEnergy();
350                                                    87 
351       Particle protonTarget(Proton, nullVector     88       Particle protonTarget(Proton, nullVector, nullVector);
352       Particle neutronTarget(Neutron, nullVect     89       Particle neutronTarget(Neutron, nullVector, nullVector);
353       const G4double sigmapipp = total(&piPlus     90       const G4double sigmapipp = total(&piPlusProjectile, &protonTarget);
354       const G4double sigmapipn = total(&piPlus     91       const G4double sigmapipn = total(&piPlusProjectile, &neutronTarget);
355       const G4double sigmapi0p = total(&piZero     92       const G4double sigmapi0p = total(&piZeroProjectile, &protonTarget);
356       const G4double sigmapi0n = total(&piZero     93       const G4double sigmapi0n = total(&piZeroProjectile, &neutronTarget);
357       const G4double sigmapimp = total(&piMinu     94       const G4double sigmapimp = total(&piMinusProjectile, &protonTarget);
358       const G4double sigmapimn = total(&piMinu     95       const G4double sigmapimn = total(&piMinusProjectile, &neutronTarget);
359       /* We compute the interaction distance f     96       /* We compute the interaction distance from the largest of the pi-N cross
360        * sections. Note that this is different     97        * sections. Note that this is different from INCL4.6, which just takes the
361        * average of the six, and will in gener     98        * average of the six, and will in general lead to a different geometrical
362        * cross section.                            99        * cross section.
363        */                                         100        */
364       const G4double largestSigma = std::max(s    101       const G4double largestSigma = std::max(sigmapipp, std::max(sigmapipn, std::max(sigmapi0p, std::max(sigmapi0n, std::max(sigmapimp,sigmapimn)))));
365       const G4double interactionDistance = std    102       const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
366                                                   103 
367       return interactionDistance;                 104       return interactionDistance;
368     }                                             105     }
369                                                   106 
370     G4double interactionDistanceNN(const Parti    107     G4double interactionDistanceNN(const ParticleSpecies &aSpecies, const G4double kineticEnergy) {
371 // assert(aSpecies.theType==Proton || aSpecies    108 // assert(aSpecies.theType==Proton || aSpecies.theType==Neutron || aSpecies.theType==Composite);
372 // assert(aSpecies.theA>0);                       109 // assert(aSpecies.theA>0);
373       ThreeVector nullVector;                     110       ThreeVector nullVector;
374       ThreeVector unitVector(0.,0.,1.);           111       ThreeVector unitVector(0.,0.,1.);
375                                                   112 
376       const G4double kineticEnergyPerNucleon =    113       const G4double kineticEnergyPerNucleon = kineticEnergy / aSpecies.theA;
377                                                   114 
378       Particle protonProjectile(Proton, unitVe    115       Particle protonProjectile(Proton, unitVector, nullVector);
379       protonProjectile.setEnergy(protonProject    116       protonProjectile.setEnergy(protonProjectile.getMass()+kineticEnergyPerNucleon);
380       protonProjectile.adjustMomentumFromEnerg    117       protonProjectile.adjustMomentumFromEnergy();
381       Particle neutronProjectile(Neutron, unit    118       Particle neutronProjectile(Neutron, unitVector, nullVector);
382       neutronProjectile.setEnergy(neutronProje    119       neutronProjectile.setEnergy(neutronProjectile.getMass()+kineticEnergyPerNucleon);
383       neutronProjectile.adjustMomentumFromEner    120       neutronProjectile.adjustMomentumFromEnergy();
384                                                   121 
385       Particle protonTarget(Proton, nullVector    122       Particle protonTarget(Proton, nullVector, nullVector);
386       Particle neutronTarget(Neutron, nullVect    123       Particle neutronTarget(Neutron, nullVector, nullVector);
387       const G4double sigmapp = total(&protonPr    124       const G4double sigmapp = total(&protonProjectile, &protonTarget);
388       const G4double sigmapn = total(&protonPr    125       const G4double sigmapn = total(&protonProjectile, &neutronTarget);
389       const G4double sigmann = total(&neutronP    126       const G4double sigmann = total(&neutronProjectile, &neutronTarget);
390       /* We compute the interaction distance f    127       /* We compute the interaction distance from the largest of the NN cross
391        * sections. Note that this is different    128        * sections. Note that this is different from INCL4.6, which just takes the
392        * average of the four, and will in gene    129        * average of the four, and will in general lead to a different geometrical
393        * cross section.                           130        * cross section.
394        */                                         131        */
395       const G4double largestSigma = std::max(s    132       const G4double largestSigma = std::max(sigmapp, std::max(sigmapn, sigmann));
396       const G4double interactionDistance = std    133       const G4double interactionDistance = std::sqrt(largestSigma/Math::tenPi);
397                                                   134 
398       return interactionDistance;                 135       return interactionDistance;
399     }                                             136     }
400                                                   137 
401     G4double interactionDistanceKN(const G4dou << 
402       ThreeVector nullVector;                  << 
403       ThreeVector unitVector(0.,0.,1.);        << 
404                                                << 
405       Particle kpProjectile(KPlus, unitVector, << 
406       kpProjectile.setEnergy(kpProjectile.getM << 
407       kpProjectile.adjustMomentumFromEnergy(); << 
408       Particle kzProjectile(KZero, unitVector, << 
409       kzProjectile.setEnergy(kzProjectile.getM << 
410       kzProjectile.adjustMomentumFromEnergy(); << 
411                                                << 
412       Particle protonTarget(Proton, nullVector << 
413       Particle neutronTarget(Neutron, nullVect << 
414       const G4double sigmakpp = total(&kpProje << 
415       const G4double sigmakpn = total(&kpProje << 
416       const G4double sigmakzp = total(&kzProje << 
417       const G4double sigmakzn = total(&kzProje << 
418                                                << 
419       const G4double largestSigma = std::max(s << 
420       const G4double interactionDistance = std << 
421                                                << 
422       return interactionDistance;              << 
423     }                                          << 
424                                                << 
425     G4double interactionDistanceKbarN(const G4 << 
426       ThreeVector nullVector;                  << 
427       ThreeVector unitVector(0.,0.,1.);        << 
428                                                << 
429       Particle kmProjectile(KMinus, unitVector << 
430       kmProjectile.setEnergy(kmProjectile.getM << 
431       kmProjectile.adjustMomentumFromEnergy(); << 
432       Particle kzProjectile(KZeroBar, unitVect << 
433       kzProjectile.setEnergy(kzProjectile.getM << 
434       kzProjectile.adjustMomentumFromEnergy(); << 
435                                                << 
436       Particle protonTarget(Proton, nullVector << 
437       Particle neutronTarget(Neutron, nullVect << 
438       const G4double sigmakmp = total(&kmProje << 
439       const G4double sigmakmn = total(&kmProje << 
440       const G4double sigmakzp = total(&kzProje << 
441       const G4double sigmakzn = total(&kzProje << 
442                                                << 
443       const G4double largestSigma = std::max(s << 
444       const G4double interactionDistance = std << 
445                                                << 
446       return interactionDistance;              << 
447     }                                          << 
448                                                << 
449     G4double interactionDistanceYN(const G4dou << 
450       ThreeVector nullVector;                  << 
451       ThreeVector unitVector(0.,0.,1.);        << 
452                                                << 
453       Particle lProjectile(Lambda, unitVector, << 
454       lProjectile.setEnergy(lProjectile.getMas << 
455       lProjectile.adjustMomentumFromEnergy();  << 
456       Particle spProjectile(SigmaPlus, unitVec << 
457       spProjectile.setEnergy(spProjectile.getM << 
458       spProjectile.adjustMomentumFromEnergy(); << 
459       Particle szProjectile(SigmaZero, unitVec << 
460       szProjectile.setEnergy(szProjectile.getM << 
461       szProjectile.adjustMomentumFromEnergy(); << 
462       Particle smProjectile(SigmaMinus, unitVe << 
463       smProjectile.setEnergy(smProjectile.getM << 
464       smProjectile.adjustMomentumFromEnergy(); << 
465                                                << 
466       Particle protonTarget(Proton, nullVector << 
467       Particle neutronTarget(Neutron, nullVect << 
468       const G4double sigmalp = total(&lProject << 
469       const G4double sigmaln = total(&lProject << 
470       const G4double sigmaspp = total(&spProje << 
471       const G4double sigmaspn = total(&spProje << 
472       const G4double sigmaszp = total(&szProje << 
473       const G4double sigmaszn = total(&szProje << 
474       const G4double sigmasmp = total(&smProje << 
475       const G4double sigmasmn = total(&smProje << 
476                                                << 
477       const G4double largestSigma = std::max(s << 
478       const G4double interactionDistance = std << 
479                                                << 
480       return interactionDistance;              << 
481     }                                          << 
482                                                << 
483     void setCrossSections(ICrossSections *c) {    138     void setCrossSections(ICrossSections *c) {
484       theCrossSections = c;                       139       theCrossSections = c;
485     }                                             140     }
486                                                   141 
487     void deleteCrossSections() {                  142     void deleteCrossSections() {
488       delete theCrossSections;                    143       delete theCrossSections;
489       theCrossSections = NULL;                    144       theCrossSections = NULL;
490     }                                             145     }
491                                                << 
492     void initialize(Config const * const theCo << 
493       CrossSectionsType crossSections = theCon << 
494       if(crossSections == INCL46CrossSections) << 
495         setCrossSections(new CrossSectionsINCL << 
496       else if(crossSections == MultiPionsCross << 
497         setCrossSections(new CrossSectionsMult << 
498       else if(crossSections == TruncatedMultiP << 
499         const G4int nMaxPi = theConfig->getMax << 
500         if(nMaxPi>0)                           << 
501           setCrossSections(new CrossSectionsTr << 
502         else {                                 << 
503           INCL_WARN("Truncated multipion cross << 
504               << "number of pions is <=0. Fall << 
505           setCrossSections(new CrossSectionsMu << 
506         }                                      << 
507       } else if(crossSections == MultiPionsAnd << 
508         setCrossSections(new CrossSectionsMult << 
509       else if(crossSections == StrangenessCros << 
510         setCrossSections(new CrossSectionsStra << 
511       else if(crossSections == AntiparticlesCr << 
512         setCrossSections(new CrossSectionsAnti << 
513     }                                          << 
514   }                                               146   }
515 }                                                 147 }
516                                                   148