Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/management/include/G4HadronicInteraction.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 //
 27 //
 28 // Hadronic Interaction  abstract base class
 29 // This class is the base class for the model classes.
 30 // It sorts out the energy-range for the models and provides
 31 // class utilities.
 32 // original by H.P. Wellisch
 33 // Modified by J.L.Chuma, TRIUMF, 21-Mar-1997
 34 // Last modified: 3-Apr-1997
 35 // Added units to energy initialization: J.L. Chuma  04-Apr-97
 36 // Modified by J.L.Chuma, 05-May-97  to Initialize theBlockedCounter
 37 // Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes
 38 // Adding a registry for memory management of hadronic models, HPW 22-Mar-99
 39 // 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
 40 //                          and reorder methods in the header 
 41 // 29-Jun-2009 V.Ivanchenko add SampleInvariantT method
 42 // 29-Aug-2009 V.Ivanchenko moved G4ReactionDynamics to G4InelasticInteraction,
 43 //                          add const pointers, and added recoilEnergyThreshold
 44 //                          member and accesors
 45 
 46 // Class Description
 47 // This is the base class for all hadronic interaction models in geant4.
 48 // If you want to implement a new way of producing a final state, please,
 49 //  inherit from here.
 50 // Class Description - End
 51  
 52 #ifndef G4HadronicInteraction_h
 53 #define G4HadronicInteraction_h 1
 54  
 55 #include "G4HadFinalState.hh"
 56 #include "G4Material.hh"
 57 #include "G4Nucleus.hh"
 58 #include "G4Track.hh"
 59 #include "G4HadProjectile.hh"
 60 
 61 class G4HadronicInteractionRegistry;
 62 
 63 class G4HadronicInteraction
 64 {
 65 public: // With description
 66     
 67   explicit G4HadronicInteraction(const G4String& modelName = "HadronicModel");
 68     
 69   virtual ~G4HadronicInteraction();
 70     
 71   virtual G4HadFinalState *ApplyYourself(const G4HadProjectile &aTrack, 
 72            G4Nucleus & targetNucleus );
 73   // The interface to implement for final state production code.
 74 
 75   virtual G4double SampleInvariantT(const G4ParticleDefinition* p, 
 76             G4double plab,
 77             G4int Z, G4int A);
 78   // The interface to implement sampling of scattering or change exchange
 79      
 80   virtual G4bool IsApplicable(const G4HadProjectile & aTrack, 
 81               G4Nucleus & targetNucleus);
 82  
 83   inline G4double GetMinEnergy() const
 84   { return theMinEnergy; }
 85     
 86   G4double GetMinEnergy( const G4Material *aMaterial,
 87        const G4Element *anElement ) const;
 88    
 89   inline void SetMinEnergy( G4double anEnergy )
 90   { theMinEnergy = anEnergy; }
 91     
 92   void SetMinEnergy( G4double anEnergy, const G4Element *anElement );
 93     
 94   void SetMinEnergy( G4double anEnergy, const G4Material *aMaterial );
 95     
 96   inline G4double GetMaxEnergy() const
 97   { return theMaxEnergy; }
 98     
 99   G4double GetMaxEnergy( const G4Material *aMaterial,
100        const G4Element *anElement ) const;
101     
102   inline void SetMaxEnergy( const G4double anEnergy )
103   { theMaxEnergy = anEnergy; }
104     
105   void SetMaxEnergy( G4double anEnergy, const G4Element *anElement );
106     
107   void SetMaxEnergy( G4double anEnergy, const G4Material *aMaterial );
108 
109   inline G4int GetVerboseLevel() const
110   { return verboseLevel; }
111 
112   inline void SetVerboseLevel( G4int value )
113   { verboseLevel = value; }
114 
115   inline const G4String& GetModelName() const
116   { return theModelName; }
117 
118   void DeActivateFor(const G4Material* aMaterial);
119  
120   inline void ActivateFor( const G4Material *aMaterial ) 
121   { 
122     Block(); 
123     SetMaxEnergy(GetMaxEnergy(), aMaterial);
124     SetMinEnergy(GetMinEnergy(), aMaterial);
125   }
126 
127   void DeActivateFor( const G4Element *anElement ); 
128   inline void ActivateFor( const G4Element *anElement )
129   { 
130     Block(); 
131     SetMaxEnergy(GetMaxEnergy(), anElement);
132     SetMinEnergy(GetMinEnergy(), anElement);
133   }
134 
135   G4bool IsBlocked( const G4Material *aMaterial ) const;
136   G4bool IsBlocked( const G4Element *anElement) const;
137 
138   inline void SetRecoilEnergyThreshold(G4double val) 
139   { recoilEnergyThreshold = val; }
140 
141   G4double GetRecoilEnergyThreshold() const 
142   { return recoilEnergyThreshold;}
143 
144   virtual const std::pair<G4double, G4double> GetFatalEnergyCheckLevels() const;
145 
146   virtual std::pair<G4double, G4double> GetEnergyMomentumCheckLevels() const;
147 
148   inline void 
149   SetEnergyMomentumCheckLevels(G4double relativeLevel, G4double absoluteLevel)
150   { epCheckLevels.first = relativeLevel;
151     epCheckLevels.second = absoluteLevel; }
152 
153   virtual void ModelDescription(std::ostream& outFile) const ; //=0;
154 
155   // Initialisation before run
156   virtual void BuildPhysicsTable(const G4ParticleDefinition&);
157   virtual void InitialiseModel();
158 
159   G4HadronicInteraction(const G4HadronicInteraction &right ) = delete;
160   const G4HadronicInteraction& operator=(const G4HadronicInteraction &right) = delete;
161   G4bool operator==(const G4HadronicInteraction &right ) const = delete;
162   G4bool operator!=(const G4HadronicInteraction &right ) const = delete;
163 
164 protected:
165 
166   inline void SetModelName(const G4String& nam) 
167   { theModelName = nam; }
168 
169   inline G4bool IsBlocked() const { return isBlocked;}
170   inline void Block() { isBlocked = true; }
171     
172   G4HadFinalState theParticleChange;
173   // the G4HadFinalState object which is modified and returned
174   // by address by the ApplyYourself method,
175   // (instead of aParticleChange as found in G4VProcess)
176     
177   G4int verboseLevel;
178   // control flag for output messages
179   // 0: silent
180   // 1: warning messages
181   // 2: more
182   // (instead of verboseLevel as found in G4VProcess)
183 
184   // these two have global validity energy range    
185   G4double theMinEnergy;
186   G4double theMaxEnergy;
187 
188   G4bool isBlocked;
189 
190 private:       
191     
192   G4HadronicInteractionRegistry* registry;
193 
194   G4double recoilEnergyThreshold;
195 
196   G4String theModelName;
197 
198   std::pair<G4double, G4double> epCheckLevels;
199 
200   std::vector<std::pair<G4double, const G4Material *> > theMinEnergyList;
201   std::vector<std::pair<G4double, const G4Material *> > theMaxEnergyList;
202   std::vector<std::pair<G4double, const G4Element *> > theMinEnergyListElements;
203   std::vector<std::pair<G4double, const G4Element *> > theMaxEnergyListElements;
204   std::vector<const G4Material *> theBlockedList;
205   std::vector<const G4Element *> theBlockedListElements;
206 };
207  
208 #endif
209