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 #ifndef G4INCLNuclearDensity_hh 39 #define G4INCLNuclearDensity_hh 1 40 41 #include <vector> 42 #include <map> 43 // #include <cassert> 44 #include "G4INCLThreeVector.hh" 45 #include "G4INCLIFunction1D.hh" 46 #include "G4INCLParticle.hh" 47 #include "G4INCLGlobals.hh" 48 #include "G4INCLRandom.hh" 49 #include "G4INCLINuclearPotential.hh" 50 #include "G4INCLInterpolationTable.hh" 51 52 namespace G4INCL { 53 54 class NuclearDensity { 55 public: 56 NuclearDensity(const G4int A, const G4int Z, const G4int S, InterpolationTable const * const rpCorrelationTableProton, InterpolationTable const * const rpCorrelationTableNeutron, InterpolationTable const * const rpCorrelationTableLambda); 57 ~NuclearDensity(); 58 59 /// \brief Copy constructor 60 NuclearDensity(const NuclearDensity &rhs); 61 62 /// \brief Assignment operator 63 NuclearDensity &operator=(const NuclearDensity &rhs); 64 65 /// \brief Helper method for the assignment operator 66 void swap(NuclearDensity &rhs); 67 68 /** \brief Get the maximum allowed radius for a given momentum. 69 * \param t type of the particle 70 * \param p absolute value of the particle momentum, divided by the 71 * relevant Fermi momentum. 72 * \return maximum allowed radius. 73 */ 74 G4double getMaxRFromP(const ParticleType t, const G4double p) const; 75 76 G4double getMinPFromR(const ParticleType t, const G4double r) const; 77 78 G4double getMaximumRadius() const { return theMaximumRadius; }; 79 80 /** \brief The radius used for calculating the transmission coefficient. 81 * 82 * \return the radius 83 */ 84 G4double getTransmissionRadius(Particle const * const p) const { 85 const ParticleType t = p->getType(); 86 // assert(t!= antiLambda && t!=antiNeutron && t!=Neutron && t!=PiZero && t!=DeltaZero && t!=Eta && t!=Omega && t!=EtaPrime && t!=Photon && t!= Lambda && t!=SigmaZero && t!=KZero && t!=KZeroBar && t!=KShort && t!=KLong); // no neutral particles here 87 if(t==Composite) { 88 return transmissionRadius[t] + 89 ParticleTable::getNuclearRadius(t, p->getA(), p->getZ()); 90 } else 91 return transmissionRadius[t]; 92 }; 93 94 /** \brief The radius used for calculating the transmission coefficient. 95 * 96 * \return the radius 97 */ 98 G4double getTransmissionRadius(ParticleType type) const { 99 // assert(type!=Composite); 100 return transmissionRadius[type]; 101 }; 102 103 /// \brief Get the mass number. 104 G4int getA() const { return theA; } 105 106 /// \brief Get the charge number. 107 G4int getZ() const { return theZ; } 108 109 /// \brief Get the strange number. 110 G4int getS() const { return theS; } 111 112 G4double getProtonNuclearRadius() const { return theProtonNuclearRadius; } 113 void setProtonNuclearRadius(const G4double r) { theProtonNuclearRadius = r; } 114 115 private: 116 117 /** \brief Initialize the transmission radius. */ 118 void initializeTransmissionRadii(); 119 120 G4int theA, theZ, theS; 121 G4double theMaximumRadius; 122 /// \brief Represents INCL4.5's R0 variable 123 G4double theProtonNuclearRadius; 124 125 /* \brief map of transmission radii per particle type */ 126 G4double transmissionRadius[UnknownParticle]; 127 128 InterpolationTable const *rFromP[UnknownParticle]; 129 InterpolationTable const *pFromR[UnknownParticle]; 130 }; 131 132 } 133 134 #endif 135