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 G4INCLXXInterface_hh 39 #define G4INCLXXInterface_hh 1 40 41 #include "G4Nucleon.hh" 42 #include "G4Nucleus.hh" 43 #include "G4HadronicInteraction.hh" 44 #include "G4VIntraNuclearTransportModel.hh" 45 #include "G4KineticTrackVector.hh" 46 #include "G4FragmentVector.hh" 47 #include "G4ParticleChange.hh" 48 #include "G4ReactionProductVector.hh" 49 #include "G4ReactionProduct.hh" 50 #include "globals.hh" 51 52 // INCL++ 53 #include "G4INCLCascade.hh" 54 55 // Geant4 de-excitation 56 #include "G4ExcitationHandler.hh" 57 58 // Binary cascade 59 #include "G4BinaryCascade.hh" 60 #include "G4BinaryLightIonReaction.hh" 61 62 // PreCompound 63 #include "G4VPreCompoundModel.hh" 64 #include "G4PreCompoundModel.hh" 65 66 // G4IonTable 67 #include "G4IonTable.hh" 68 69 // fission 70 #include "G4VLevelDensityParameter.hh" 71 #include "G4FissionProbability.hh" 72 73 #include <fstream> 74 #include <iostream> 75 76 class G4INCLXXInterfaceStore; 77 class G4INCLXXVInterfaceTally; 78 79 /** \brief INCL++ intra-nuclear cascade 80 * 81 * Interface for INCL++. This interface handles basic hadron bullet particles 82 * (protons, neutrons, pions), as well as light ions. 83 * 84 * Example usage in case of protons: 85 * @code 86 * G4INCLXXInterface* inclModel = new G4INCLXXInterface; 87 * inclModel -> SetMinEnergy(0.0 * MeV); // Set the energy limits 88 * inclModel -> SetMaxEnergy(3.0 * GeV); 89 * 90 * G4HadronInelasticProcess* protonInelasticProcess = new G4HadronInelasticProcess( "protonInelastic", G4Proton::Definition() ); 91 * G4VCrossSectionDataSet* protonInelasticCrossSection = new G4BGGNucleonInelasticXS( G4Proton::Proton() ); 92 * 93 * protonInelasticProcess -> RegisterMe(inclModel); 94 * protonInelasticProcess -> AddDataSet(protonInelasticCrossSection); 95 * 96 * particle = G4Proton::Proton(); 97 * processManager = particle -> GetProcessManager(); 98 * processManager -> AddDiscreteProcess(protonInelasticProcess); 99 * @endcode 100 * The same setup procedure is needed for neutron, pion and generic-ion 101 * inelastic processes as well. 102 */ 103 class G4INCLXXInterface : public G4VIntraNuclearTransportModel { 104 public: 105 G4INCLXXInterface(G4VPreCompoundModel * const aPreCompound = 0); 106 ~G4INCLXXInterface(); // Destructor 107 108 G4bool operator==(G4INCLXXInterface& right) { 109 return (this == &right); 110 } 111 112 G4bool operator!=(G4INCLXXInterface& right) { 113 return (this != &right); 114 } 115 116 G4ReactionProductVector* Propagate(G4KineticTrackVector* theSecondaries, G4V3DNucleus* theNucleus); // Idle 117 118 /** 119 * Main method to apply the INCL physics model. 120 * @param aTrack the projectile particle 121 * @param theNucleus target nucleus 122 * @return the output of the INCL physics model 123 */ 124 G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& theNucleus); 125 126 using G4VIntraNuclearTransportModel::SetDeExcitation; 127 128 void DeleteModel() { 129 delete theINCLModel; 130 theINCLModel = NULL; 131 } 132 133 virtual void ModelDescription(std::ostream& outFile) const; 134 135 G4String const &GetDeExcitationModelName() const; 136 137 private: 138 G4bool AccurateProjectile(const G4HadProjectile &aTrack, const G4Nucleus &theTargetNucleus) const; 139 140 /// \brief Dummy copy constructor to shut up Coverity warnings 141 G4INCLXXInterface(const G4INCLXXInterface &rhs); 142 143 /// \brief Dummy assignment operator to shut up Coverity warnings 144 G4INCLXXInterface &operator=(G4INCLXXInterface const &rhs); 145 146 /// \brief Convert G4ParticleDefinition to corresponding INCL particle type 147 G4INCL::ParticleType toINCLParticleType(G4ParticleDefinition const * const) const; 148 149 /// \brief Convert G4HadProjectile to corresponding INCL particle species 150 G4INCL::ParticleSpecies toINCLParticleSpecies(G4HadProjectile const &) const; 151 152 /// \brief Convert G4HadProjectile to corresponding INCL particle kinetic energy 153 G4double toINCLKineticEnergy(G4HadProjectile const &) const; 154 155 /// \brief Convert an INCL particle to a G4DynamicParticle 156 G4DynamicParticle *toG4Particle(G4int A, G4int Z, G4int S, G4int PDGCode , G4double kinE, G4double px, G4double py, G4double pz) const; 157 158 /// \brief Convert A, Z and S to a G4ParticleDefinition 159 G4ParticleDefinition *toG4ParticleDefinition (G4int A, G4int Z, G4int S, G4int PDGCode) const; 160 161 /// \brief Rescale remnant momentum if necessary 162 G4double remnant4MomentumScaling(G4double mass, 163 G4double kineticE, 164 G4double px, G4double py, G4double pz) const; 165 166 G4INCL::INCL *theINCLModel; 167 168 G4VPreCompoundModel *thePreCompoundModel; 169 170 G4HadFinalState theResult; 171 172 G4HadronicInteraction *theBackupModel; 173 G4HadronicInteraction *theBackupModelNucleon; 174 G4HadronicInteraction *theBackupModelAntiIonExceptAntiProton; 175 176 G4INCLXXInterfaceStore * const theInterfaceStore; 177 G4INCLXXVInterfaceTally * theTally; 178 179 G4bool complainedAboutBackupModel; 180 G4bool complainedAboutPreCompound; 181 182 G4IonTable * const theIonTable; 183 184 G4bool dumpRemnantInfo; 185 186 G4VLevelDensityParameter *theINCLXXLevelDensity; 187 G4FissionProbability *theINCLXXFissionProbability; 188 189 G4int secID; // Creator model ID for the secondaries 190 }; 191 192 #endif 193