Geant4  10.02.p02
G4HadronicProcess.hh
Go to the documentation of this file.
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 // $Id: G4HadronicProcess.hh 90237 2015-05-21 09:04:11Z gcosmo $
27 //
28 // -------------------------------------------------------------------
29 //
30 // GEANT4 Class header file
31 //
32 // G4HadronicProcess
33 //
34 // This is the top level Hadronic Process class
35 // The inelastic, elastic, capture, and fission processes
36 // should derive from this class
37 //
38 // original by H.P.Wellisch
39 // J.L. Chuma, TRIUMF, 10-Mar-1997
40 // Last modified: 04-Apr-1997
41 // 19-May-2008 V.Ivanchenko cleanup and added comments
42 // 05-Jul-2010 V.Ivanchenko cleanup commented lines
43 // 28-Jul-2012 M.Maire add function GetTargetDefinition()
44 // 14-Sep-2012 Inherit from RestDiscrete, use subtype code (now in ctor) to
45 // configure base-class
46 // 28-Sep-2012 M. Kelsey -- Undo inheritance change, keep new ctor
47 
48 #ifndef G4HadronicProcess_h
49 #define G4HadronicProcess_h 1
50 
51 #include "globals.hh"
52 #include "G4VDiscreteProcess.hh"
53 #include "G4EnergyRangeManager.hh"
54 #include "G4Nucleus.hh"
55 #include "G4ReactionProduct.hh"
56 #include <vector>
59 
61 #include "G4HadronicProcessType.hh"
62 
63 class G4Track;
64 class G4Step;
65 class G4Element;
66 class G4ParticleChange;
68 
70 {
71 public:
72  G4HadronicProcess(const G4String& processName="Hadronic",
73  G4ProcessType procType=fHadronic);
74 
75  // Preferred signature for subclasses, specifying their subtype here
76  G4HadronicProcess(const G4String& processName,
77  G4HadronicProcessType subType);
78 
79  virtual ~G4HadronicProcess();
80 
81  // register generator of secondaries
83 
84  // get cross section per element
86  const G4Element * elm,
87  const G4Material* mat = 0);
88 
89  // obsolete method to get cross section per element
90  inline
92  const G4Element * elm,
93  const G4Material* mat = 0)
94  { return GetElementCrossSection(part, elm, mat); }
95 
96  // generic PostStepDoIt recommended for all derived classes
97  virtual G4VParticleChange* PostStepDoIt(const G4Track& aTrack,
98  const G4Step& aStep);
99 
100  // initialisation of physics tables and G4HadronicProcessStore
101  virtual void PreparePhysicsTable(const G4ParticleDefinition&);
102 
103  // build physics tables and print out the configuration of the process
104  virtual void BuildPhysicsTable(const G4ParticleDefinition&);
105 
106  // dump physics tables
109 
110  // add cross section data set
111  inline void AddDataSet(G4VCrossSectionDataSet * aDataSet)
112  { theCrossSectionDataStore->AddDataSet(aDataSet);}
113 
114  // access to the list of hadronic interactions
115  std::vector<G4HadronicInteraction*>& GetHadronicInteractionList()
117 
118  // get inverse cross section per volume
119  G4double GetMeanFreePath(const G4Track &aTrack, G4double,
120  G4ForceCondition *);
121 
122  // access to the target nucleus
123  inline const G4Nucleus* GetTargetNucleus() const
124  { return &targetNucleus; }
125 
126  // G4ParticleDefinition* GetTargetDefinition();
127  inline const G4Isotope* GetTargetIsotope()
128  { return targetNucleus.GetIsotope(); }
129 
130  virtual void ProcessDescription(std::ostream& outFile) const;
131 
132 protected:
133 
134  // generic method to choose secondary generator
135  // recommended for all derived classes
137  const G4HadProjectile & aHadProjectile, G4Nucleus & aTargetNucleus,
138  G4Material* aMaterial, G4Element* anElement)
139  { return theEnergyRangeManager.GetHadronicInteraction(aHadProjectile,
140  aTargetNucleus,
141  aMaterial,anElement);
142  }
143 
144  // access to the target nucleus
146  { return &targetNucleus; }
147 
148 public:
149 
150  void BiasCrossSectionByFactor(G4double aScale);
151 
152  // Energy-momentum non-conservation limits and reporting
153  inline void SetEpReportLevel(G4int level)
154  { epReportLevel = level; }
155 
156  inline void SetEnergyMomentumCheckLevels(G4double relativeLevel, G4double absoluteLevel)
157  { epCheckLevels.first = relativeLevel;
158  epCheckLevels.second = absoluteLevel;
159  levelsSetByProcess = true;
160  }
161 
162  inline std::pair<G4double, G4double> GetEnergyMomentumCheckLevels() const
163  { return epCheckLevels; }
164 
165  // access to the cross section data store
167  {return theCrossSectionDataStore;}
168 
170  { aScaleFactor = factor; }
171 
172 protected:
173 
174  void DumpState(const G4Track&, const G4String&, G4ExceptionDescription&);
175 
176  // access to the chosen generator
178  { return theInteraction; }
179 
180  // access to the cross section data set
182  { return theLastCrossSection; }
183 
184  // fill result
185  void FillResult(G4HadFinalState* aR, const G4Track& aT);
186 
187  // Check the result for catastrophic energy non-conservation
189  const G4Nucleus& targetNucleus,
190  G4HadFinalState* result);
191 
192  // Check 4-momentum balance
194 
195 private:
198 
199  // hide assignment operator as private
202 
203  // Set E/p conservation check levels from environment variables
205 
206  // The Nist manager builds or finds a simple material from the Z of an element
208 
209 protected:
210 
212 
214 
216 
217 private:
218 
220 
222 
224 
226 
228 
230 
231  // Energy-momentum checking
232  std::pair<G4double, G4double> epCheckLevels;
234 
235  std::vector<G4VLeadingParticleBiasing *> theBias;
236 
238 
242 };
243 
244 #endif
245 
void AddDataSet(G4VCrossSectionDataSet *)
std::ostringstream G4ExceptionDescription
Definition: globals.hh:76
void BiasCrossSectionByFactor(G4double aScale)
G4HadronicInteraction * GetHadronicInteraction(const G4HadProjectile &aHadProjectile, G4Nucleus &aTargetNucleus, const G4Material *aMaterial, const G4Element *anElement) const
G4HadronicInteraction * theInteraction
G4EnergyRangeManager theEnergyRangeManager
virtual void PreparePhysicsTable(const G4ParticleDefinition &)
G4double GetMicroscopicCrossSection(const G4DynamicParticle *part, const G4Element *elm, const G4Material *mat=0)
G4HadProjectile thePro
G4double a
Definition: TRTMaterials.hh:39
void CheckEnergyMomentumConservation(const G4Track &, const G4Nucleus &)
int G4int
Definition: G4Types.hh:78
const G4Isotope * GetTargetIsotope()
std::vector< G4HadronicInteraction * > & GetHadronicInteractionList()
G4HadronicProcessType
std::pair< G4double, G4double > epCheckLevels
void GetEnergyMomentumCheckEnvvars()
void RegisterMe(G4HadronicInteraction *a)
virtual void BuildPhysicsTable(const G4ParticleDefinition &)
G4CrossSectionDataStore * theCrossSectionDataStore
void DumpState(const G4Track &, const G4String &, G4ExceptionDescription &)
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
void FillResult(G4HadFinalState *aR, const G4Track &aT)
G4ParticleChange * theTotalResult
G4HadronicProcess & operator=(const G4HadronicProcess &right)
const G4Nucleus * GetTargetNucleus() const
G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *)
G4double XBiasSurvivalProbability()
bool G4bool
Definition: G4Types.hh:79
G4CrossSectionDataStore * GetCrossSectionDataStore()
G4double theInitialNumberOfInteractionLength
Definition: G4Step.hh:76
virtual void ProcessDescription(std::ostream &outFile) const
G4HadronicProcessStore * theProcessStore
G4Material * InitialiseMaterial(G4int Z)
void SetEnergyMomentumCheckLevels(G4double relativeLevel, G4double absoluteLevel)
void SetEpReportLevel(G4int level)
void DumpPhysicsTable(const G4ParticleDefinition &)
G4double GetElementCrossSection(const G4DynamicParticle *part, const G4Element *elm, const G4Material *mat=0)
static const G4double factor
G4HadronicInteraction * GetHadronicInteraction() const
G4double XBiasSecondaryWeight()
G4Nucleus * GetTargetNucleusPointer()
const G4Isotope * GetIsotope()
Definition: G4Nucleus.hh:119
void DumpPhysicsTable(const G4ParticleDefinition &p)
void MultiplyCrossSectionBy(G4double factor)
std::vector< G4VLeadingParticleBiasing * > theBias
G4HadronicInteraction * ChooseHadronicInteraction(const G4HadProjectile &aHadProjectile, G4Nucleus &aTargetNucleus, G4Material *aMaterial, G4Element *anElement)
G4HadronicProcess(const G4String &processName="Hadronic", G4ProcessType procType=fHadronic)
double G4double
Definition: G4Types.hh:76
virtual G4VParticleChange * PostStepDoIt(const G4Track &aTrack, const G4Step &aStep)
G4ForceCondition
std::pair< G4double, G4double > GetEnergyMomentumCheckLevels() const
G4double GetLastCrossSection()
G4HadFinalState * CheckResult(const G4HadProjectile &thePro, const G4Nucleus &targetNucleus, G4HadFinalState *result)
std::vector< G4HadronicInteraction * > & GetHadronicInteractionList()
G4ProcessType