Geant4 Cross Reference |
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 // Alain Boudard, CEA-Saclay, France 28 // Joseph Cugnon, University of Liege, Belgium 29 // Jean-Christophe David, CEA-Saclay, France 30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland 31 // Sylvie Leray, CEA-Saclay, France 32 // Davide Mancusi, CEA-Saclay, France 33 // 34 #define INCLXX_IN_GEANT4_MODE 1 35 36 #include "globals.hh" 37 38 /** \file G4INCLCrossSectionsMultiPions.hh 39 * \brief Cross sections used in INCL Multipions 40 * 41 * \date 26th November 2013 42 * \author Jean-Christophe David 43 */ 44 45 #ifndef G4INCLCROSSSECTIONSMULTIPIONS_HH 46 #define G4INCLCROSSSECTIONSMULTIPIONS_HH 47 48 #include "G4INCLICrossSections.hh" 49 #include "G4INCLHornerFormEvaluator.hh" 50 51 namespace G4INCL { 52 /// \brief Cross sections used in INCL Multipions 53 54 class CrossSectionsMultiPions : public ICrossSections{ 55 public: 56 CrossSectionsMultiPions(); 57 58 /// \brief Elastic particle-particle cross section 59 virtual G4double elastic(Particle const * const p1, Particle const * const p2); 60 61 /// \brief Total (elastic+inelastic) particle-particle cross section 62 virtual G4double total(Particle const * const p1, Particle const * const p2); 63 64 /// \brief Cross section for NDelta->NN 65 virtual G4double NDeltaToNN(Particle const * const p1, Particle const * const p2); 66 67 /// \brief Cross section for Delta production - NN Channel 68 virtual G4double NNToNDelta(Particle const * const p1, Particle const * const p2); 69 70 /// \brief Cross section for Delta production - piN Channel 71 virtual G4double piNToDelta(Particle const * const p1, Particle const * const p2); 72 73 /// \brief Cross section for X pion production - piN Channel 74 virtual G4double piNToxPiN(const G4int xpi, Particle const * const p1, Particle const * const p2); 75 76 /// \brief Cross section for X pion production - NN Channel 77 virtual G4double NNToxPiNN(const G4int xpi, Particle const * const p1, Particle const * const p2); 78 79 /** \brief Calculate the slope of the NN DDXS. 80 * 81 * \param energyCM energy in the CM frame, in MeV 82 * \param iso total isospin of the system 83 * 84 * \return the slope of the angular distribution 85 */ 86 virtual G4double calculateNNAngularSlope(G4double energyCM, G4int iso); 87 88 /// \brief Cross sections for mesonic resonance production - piN Channel 89 virtual G4double piNToEtaN(Particle const * const p1, Particle const * const p2); 90 virtual G4double piNToOmegaN(Particle const * const p1, Particle const * const p2); 91 virtual G4double piNToEtaPrimeN(Particle const * const p1, Particle const * const p2); 92 93 /// \brief Cross sections for mesonic resonance absorption on nucleon - pipiN Channel 94 virtual G4double etaNToPiPiN(Particle const * const p1, Particle const * const p2); 95 virtual G4double omegaNToPiPiN(Particle const * const p1, Particle const * const p2); 96 97 /// \brief Cross sections for mesonic resonance absorption on nucleon - piN Channel 98 virtual G4double etaNToPiN(Particle const * const p1, Particle const * const p2); 99 virtual G4double omegaNToPiN(Particle const * const p1, Particle const * const p2); 100 virtual G4double etaPrimeNToPiN(Particle const * const p1, Particle const * const p2); 101 102 /// \brief Cross section for Eta production - NN entrance channel 103 virtual G4double NNToNNEta(Particle const * const particle1, Particle const * const particle2); 104 105 /// \brief Cross section for Eta production (exclusive) - NN entrance channel 106 virtual G4double NNToNNEtaExclu(Particle const * const particle1, Particle const * const particle2); 107 108 /// \brief Cross section for X pion production - NNEta Channel 109 virtual G4double NNToNNEtaxPi(const G4int xpi, Particle const * const p1, Particle const * const p2); 110 111 /// \brief Cross section for N-Delta-Eta production - NNEta Channel 112 virtual G4double NNToNDeltaEta(Particle const * const p1, Particle const * const p2); 113 114 /// \brief Cross section for Eta production - NN entrance channel 115 virtual G4double NNToNNOmega(Particle const * const particle1, Particle const * const particle2); 116 117 /// \brief Cross section for Eta production (exclusive) - NN entrance channel 118 virtual G4double NNToNNOmegaExclu(Particle const * const particle1, Particle const * const particle2); 119 120 /// \brief Cross section for X pion production - NNEta Channel 121 virtual G4double NNToNNOmegaxPi(const G4int xpi, Particle const * const p1, Particle const * const p2); 122 123 /// \brief Cross section for N-Delta-Eta production - NNEta Channel 124 virtual G4double NNToNDeltaOmega(Particle const * const p1, Particle const * const p2); 125 126 127 /// \brief elastic scattering for Nucleon-Strange Particles cross sections 128 virtual G4double NYelastic(Particle const * const p1, Particle const * const p2); 129 virtual G4double NKbelastic(Particle const * const p1, Particle const * const p2); 130 virtual G4double NKelastic(Particle const * const p1, Particle const * const p2); 131 132 /// \brief Nucleon-Nucleon to Stange particles cross sections 133 virtual G4double NNToNLK(Particle const * const p1, Particle const * const p2); 134 virtual G4double NNToNSK(Particle const * const p1, Particle const * const p2); 135 virtual G4double NNToNLKpi(Particle const * const p1, Particle const * const p2); 136 virtual G4double NNToNSKpi(Particle const * const p1, Particle const * const p2); 137 virtual G4double NNToNLK2pi(Particle const * const p1, Particle const * const p2); 138 virtual G4double NNToNSK2pi(Particle const * const p1, Particle const * const p2); 139 virtual G4double NNToNNKKb(Particle const * const p1, Particle const * const p2); 140 141 virtual G4double NNToMissingStrangeness(Particle const * const p1, Particle const * const p2); 142 143 /// \brief Nucleon-Delta to Stange particles cross sections 144 virtual G4double NDeltaToNLK(Particle const * const p1, Particle const * const p2); 145 virtual G4double NDeltaToNSK(Particle const * const p1, Particle const * const p2); 146 virtual G4double NDeltaToDeltaLK(Particle const * const p1, Particle const * const p2); 147 virtual G4double NDeltaToDeltaSK(Particle const * const p1, Particle const * const p2); 148 149 virtual G4double NDeltaToNNKKb(Particle const * const p1, Particle const * const p2); 150 151 /// \brief Nucleon-Pion to Stange particles cross sections 152 virtual G4double NpiToLK(Particle const * const p1, Particle const * const p2); 153 virtual G4double NpiToSK(Particle const * const p1, Particle const * const p2); 154 virtual G4double p_pimToSzKz(Particle const * const p1, Particle const * const p2); 155 virtual G4double p_pimToSmKp(Particle const * const p1, Particle const * const p2); 156 virtual G4double p_pizToSzKp(Particle const * const p1, Particle const * const p2); 157 virtual G4double NpiToLKpi(Particle const * const p1, Particle const * const p2); 158 virtual G4double NpiToSKpi(Particle const * const p1, Particle const * const p2); 159 virtual G4double NpiToLK2pi(Particle const * const p1, Particle const * const p2); 160 virtual G4double NpiToSK2pi(Particle const * const p1, Particle const * const p2); 161 virtual G4double NpiToNKKb(Particle const * const p1, Particle const * const p2); 162 163 virtual G4double NpiToMissingStrangeness(Particle const * const p1, Particle const * const p2); 164 165 /// \brief Nucleon-Hyperon cross sections 166 virtual G4double NLToNS(Particle const * const p1, Particle const * const p2); 167 virtual G4double NSToNL(Particle const * const p1, Particle const * const p2); 168 virtual G4double NSToNS(Particle const * const p1, Particle const * const p2); 169 170 /// \brief Nucleon-Kaon quasi-elastic and inelastic cross sections 171 virtual G4double NKToNK(Particle const * const p1, Particle const * const p2); 172 virtual G4double NKToNKpi(Particle const * const p1, Particle const * const p2); 173 virtual G4double NKToNK2pi(Particle const * const p1, Particle const * const p2); 174 175 /// \brief Nucleon-antiKaon quasi-elastic and inelastic cross sections 176 virtual G4double NKbToNKb(Particle const * const p1, Particle const * const p2); 177 virtual G4double NKbToSpi(Particle const * const p1, Particle const * const p2); 178 virtual G4double NKbToLpi(Particle const * const p1, Particle const * const p2); 179 virtual G4double NKbToS2pi(Particle const * const p1, Particle const * const p2); 180 virtual G4double NKbToL2pi(Particle const * const p1, Particle const * const p2); 181 virtual G4double NKbToNKbpi(Particle const * const p1, Particle const * const p2); 182 virtual G4double NKbToNKb2pi(Particle const * const p1, Particle const * const p2); 183 184 /// \brief antiparticle cross sections 185 /// \brief Nucleon-AntiNucleon to Baryon-AntiBaryon cross sections 186 virtual G4double NNbarElastic(Particle const* const p1, Particle const* const p2); 187 virtual G4double NNbarCEX(Particle const* const p1, Particle const* const p2); 188 189 virtual G4double NNbarToLLbar(Particle const * const p1, Particle const * const p2); 190 191 /// \brief Nucleon-AntiNucleon to Nucleon-AntiNucleon + pions cross sections 192 virtual G4double NNbarToNNbarpi(Particle const* const p1, Particle const* const p2); 193 virtual G4double NNbarToNNbar2pi(Particle const* const p1, Particle const* const p2); 194 virtual G4double NNbarToNNbar3pi(Particle const* const p1, Particle const* const p2); 195 196 /// \brief Nucleon-AntiNucleon total annihilation cross sections 197 virtual G4double NNbarToAnnihilation(Particle const* const p1, Particle const* const p2); 198 199 protected: 200 /// \brief Maximum number of outgoing pions in NN collisions 201 static const G4int nMaxPiNN; 202 203 /// \brief Maximum number of outgoing pions in piN collisions 204 static const G4int nMaxPiPiN; 205 206 /// \brief Horner coefficients for s11pz 207 const HornerC7 s11pzHC; 208 /// \brief Horner coefficients for s01pp 209 const HornerC8 s01ppHC; 210 /// \brief Horner coefficients for s01pz 211 const HornerC4 s01pzHC; 212 /// \brief Horner coefficients for s11pm 213 const HornerC4 s11pmHC; 214 /// \brief Horner coefficients for s12pm 215 const HornerC5 s12pmHC; 216 /// \brief Horner coefficients for s12pp 217 const HornerC3 s12ppHC; 218 /// \brief Horner coefficients for s12zz 219 const HornerC4 s12zzHC; 220 /// \brief Horner coefficients for s02pz 221 const HornerC4 s02pzHC; 222 /// \brief Horner coefficients for s02pm 223 const HornerC6 s02pmHC; 224 /// \brief Horner coefficients for s12mz 225 const HornerC4 s12mzHC; 226 227 /// \brief One over threshold for s11pz 228 static const G4double s11pzOOT; 229 /// \brief One over threshold for s01pp 230 static const G4double s01ppOOT; 231 /// \brief One over threshold for s01pz 232 static const G4double s01pzOOT; 233 /// \brief One over threshold for s11pm 234 static const G4double s11pmOOT; 235 /// \brief One over threshold for s12pm 236 static const G4double s12pmOOT; 237 /// \brief One over threshold for s12pp 238 static const G4double s12ppOOT; 239 /// \brief One over threshold for s12zz 240 static const G4double s12zzOOT; 241 /// \brief One over threshold for s02pz 242 static const G4double s02pzOOT; 243 /// \brief One over threshold for s02pm 244 static const G4double s02pmOOT; 245 /// \brief One over threshold for s12mz 246 static const G4double s12mzOOT; 247 248 /// \brief Internal implementation of the NN elastic cross section 249 G4double NNElastic(Particle const * const part1, Particle const * const part2); 250 251 /// \brief Internal implementation of the NN elastic cross section with fixed isospin 252 G4double NNElasticFixed(const G4double s, const G4int i); 253 254 /// \brief Internal implementation of the NN total cross section 255 G4double NNTot(Particle const * const part1, Particle const * const part2); 256 257 /// \brief Internal implementation of the NN total cross section with fixed isospin 258 G4double NNTotFixed(const G4double s, const G4int i); 259 260 /// \brief Internal implementation of the isospin dependent NN reaction cross section 261 G4double NNInelasticIso(const G4double ener, const G4int iso); 262 263 /// \brief Cross section for direct 1-pion production + delta production - NN entrance channel 264 virtual G4double NNOnePiOrDelta(const G4double ener, const G4int iso, const G4double xsiso); 265 /// \brief Cross section for direct 2-pion production - NN entrance channel 266 virtual G4double NNTwoPi(const G4double ener, const G4int iso, const G4double xsiso); 267 /// \brief Cross section for direct 3-pion production - NN entrance channel 268 virtual G4double NNThreePi(const G4double ener, const G4int iso, const G4double xsiso, const G4double xs1pi, const G4double xs2pi); 269 270 /// \brief Cross section for direct 1-pion production - NN entrance channel 271 virtual G4double NNOnePi(Particle const * const part1, Particle const * const part2); 272 /// \brief Cross section for direct 1-pion production - NN entrance channel 273 virtual G4double NNOnePiOrDelta(Particle const * const part1, Particle const * const part2); 274 /// \brief Cross section for direct 2-pion production - NN entrance channel 275 virtual G4double NNTwoPi(Particle const * const part1, Particle const * const part2); 276 /// \brief Cross section for direct 3-pion production - NN entrance channel 277 virtual G4double NNThreePi(Particle const * const part1, Particle const * const part2); 278 /// \brief Cross section for direct 4-pion production - NN entrance channel 279 virtual G4double NNFourPi(Particle const * const part1, Particle const * const part2); 280 281 /// \brief Internal function for pion cross sections 282 G4double spnPiPlusPHE(const G4double x); 283 /// \brief Internal function for pion cross sections 284 G4double spnPiMinusPHE(const G4double x); 285 G4double piNIne(Particle const * const p1, Particle const * const p2); 286 G4double piNTot(Particle const * const p1, Particle const * const p2); 287 G4double piNTopiN(Particle const * const p1, Particle const * const p2); 288 G4double piPluspIne(Particle const * const p1, Particle const * const p2); 289 G4double piMinuspIne(Particle const * const p1, Particle const * const p2); 290 G4double piPluspOnePi(Particle const * const p1, Particle const * const p2); 291 G4double piMinuspOnePi(Particle const * const p1, Particle const * const p2); 292 G4double piPluspTwoPi(Particle const * const p1, Particle const * const p2); 293 G4double piMinuspTwoPi(Particle const * const p1, Particle const * const p2); 294 295 /// \brief Cross section for One (more) pion production - piN entrance channel 296 virtual G4double piNOnePi(Particle const * const p1, Particle const * const p2); 297 298 /// \brief Cross section for Two (more) pion production - piN entrance channel 299 virtual G4double piNTwoPi(Particle const * const p1, Particle const * const p2); 300 301 302 }; 303 } 304 305 #endif 306