Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/interface/include/G4INCLXXInterface.hh

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 ]

  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