ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4CrossSectionDataStore.hh
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4CrossSectionDataStore.hh
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 // File name: G4CrossSectionDataStore
29 //
30 // Modifications:
31 // 23.01.2009 V.Ivanchenko move constructor and destructor to source,
32 // use STL vector instead of C-array
33 //
34 // August 2011 Re-designed
35 // by G. Folger, V. Ivantchenko, T. Koi and D.H. Wright
36 
37 // Class Description
38 // This is the class to which cross section data sets may be registered.
39 // An instance of it is contained in each hadronic process, allowing
40 // the use of the AddDataSet() method to tailor the cross sections to
41 // your application.
42 // Class Description - End
43 
44 #ifndef G4CrossSectionDataStore_h
45 #define G4CrossSectionDataStore_h 1
46 
47 #include "globals.hh"
50 #include "G4DynamicParticle.hh"
51 #include "G4PhysicsVector.hh"
52 #include <vector>
53 #include <iostream>
54 
55 class G4Nucleus;
57 class G4Isotope;
58 class G4Element;
59 class G4Material;
60 class G4NistManager;
61 
63 {
64 public:
65 
67 
69 
70  // Cross section per unit volume is computed (inverse mean free path)
73 
74  // Cross section per element is computed
76  const G4Element*, const G4Material*);
77 
78  // Cross section per isotope is computed
80  const G4Isotope*,
81  const G4Element*, const G4Material*);
82 
83  // Sample Z and A of a target nucleus and upload into G4Nucleus
84  const G4Element* SampleZandA(const G4DynamicParticle*, const G4Material*,
85  G4Nucleus& target);
86 
87  // Initialisation before run
89 
90  // Dump store to G4cout
92 
93  // Dump store as html
94  void DumpHtml(const G4ParticleDefinition&, std::ofstream&) const;
95  void PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs) const;
96 
98  void AddDataSet(G4VCrossSectionDataSet*,size_t);
99 
100  inline void SetVerboseLevel(G4int value);
101 
102 private:
103 
105  const G4Isotope*,
106  const G4Element*, const G4Material* aMaterial,
107  G4int index);
108 
111 
112  G4String HtmlFileName(const G4String & in) const;
113 
115 
116  std::vector<G4VCrossSectionDataSet*> dataSetList;
117  std::vector<G4double> xsecelm;
118  std::vector<G4double> xseciso;
119 
124 
130 
133  //Fast path: caching
134 public:
139  void DumpFastPath( const G4ParticleDefinition* , const G4Material* , std::ostream& os);
141 private:
143  //The following method is called by the public one GetCrossSection(const G4DynamicParticle*, const G4Material*)
144  //The third parameter is used to force the calculation of cross-sections skipping the fast-path mechanism
145  G4double GetCrossSection(const G4DynamicParticle*, const G4Material*, G4bool requiresSlowPath);
148  //Counters
150  //TODO: share this among threads
154 };
155 
157  //By default tries to use the fast-path mechanism
158  return GetCrossSection( particle , material , false);
159 }
160 
162 {
164 }
165 
166 #endif