Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4HadronicProcessStore.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//
27//
28// -------------------------------------------------------------------
29//
30// GEANT4 Class header file
31//
32//
33// File name: G4HadronicProcessStore
34//
35// Author: Vladimir Ivanchenko
36//
37// Creation date: 09.05.2008
38//
39// Modifications:
40//
41//
42// Class Description:
43//
44
45// -------------------------------------------------------------------
46//
47
48#ifndef G4HadronicProcessStore_h
49#define G4HadronicProcessStore_h 1
50
51
52#include "globals.hh"
53#include "G4DynamicParticle.hh"
54#include "G4ThreeVector.hh"
55#include "G4HadronicProcess.hh"
60#include <map>
61#include <vector>
62#include <iostream>
63
64class G4Element;
67
69{
70
72
73public:
74
76
78
79 void Clean();
81 const G4ParticleDefinition* particle,
82 G4double kineticEnergy,
83 const G4VProcess* process,
84 const G4Element* element,
85 const G4Material* material=nullptr);
86
88 const G4ParticleDefinition* particle,
89 G4double kineticEnergy,
90 const G4VProcess* process,
91 const G4Material* material);
92
94 const G4ParticleDefinition *aParticle,
95 G4double kineticEnergy,
96 const G4Material *material);
97
99 const G4ParticleDefinition *aParticle,
100 G4double kineticEnergy,
101 const G4Element *anElement,
102 const G4Material* mat=nullptr);
103
105 const G4ParticleDefinition *aParticle,
106 G4double kineticEnergy,
107 G4int Z, G4int A);
108
110 const G4ParticleDefinition *aParticle,
111 G4double kineticEnergy,
112 const G4Material *material);
113
115 const G4ParticleDefinition *aParticle,
116 G4double kineticEnergy,
117 const G4Element *anElement, const G4Material* mat=0);
118
120 const G4ParticleDefinition *aParticle,
121 G4double kineticEnergy,
122 G4int Z, G4int A);
123
125 const G4ParticleDefinition *aParticle,
126 G4double kineticEnergy,
127 const G4Material *material);
128
130 const G4ParticleDefinition *aParticle,
131 G4double kineticEnergy,
132 const G4Element *anElement,
133 const G4Material* mat=nullptr);
134
136 const G4ParticleDefinition *aParticle,
137 G4double kineticEnergy,
138 G4int Z, G4int A);
139
141 const G4ParticleDefinition *aParticle,
142 G4double kineticEnergy,
143 const G4Material *material);
144
146 const G4ParticleDefinition *aParticle,
147 G4double kineticEnergy,
148 const G4Element *anElement,
149 const G4Material* mat=nullptr);
150
152 const G4ParticleDefinition *aParticle,
153 G4double kineticEnergy,
154 G4int Z, G4int A);
155
157 const G4ParticleDefinition *aParticle,
158 G4double kineticEnergy,
159 const G4Material *material);
160
162 const G4ParticleDefinition *aParticle,
163 G4double kineticEnergy,
164 const G4Element *anElement,
165 const G4Material* mat=nullptr);
166
168 const G4ParticleDefinition *aParticle,
169 G4double kineticEnergy,
170 G4int Z, G4int A);
171
172 // register/deregister processes following G4HadronicProcess interface
174
176 const G4ParticleDefinition*);
177
180
182
183 // register/deregister processes following only G4VProcess interface
185
187 const G4ParticleDefinition*);
188
190
191 void SetBuildXSTable(G4bool val);
192
193 G4bool GetBuildXSTable() const;
194
195 void PrintInfo(const G4ParticleDefinition*);
196
197 void Dump(G4int level);
198 void DumpHtml();
199 void PrintHtml(const G4ParticleDefinition*, std::ofstream&);
200 void PrintModelHtml(const G4HadronicInteraction * model) const;
201
202 void SetVerbose(G4int val);
204 // these methods are obsolete and will be removed
205
207 G4HadronicProcessType subType);
208
209 // Energy-momentum non-conservation limits and reporting
210 void SetEpReportLevel(G4int level);
211
212 void SetProcessAbsLevel(G4double absoluteLevel);
213
214 void SetProcessRelLevel(G4double relativeLevel);
215
216private:
217
218 // constructor
220
221 // print process info
222 void Print(G4int idxProcess, G4int idxParticle);
223
224 G4String HtmlFileName(const G4String &) const;
225
226 static G4ThreadLocal G4HadronicProcessStore* instance;
227
228 typedef const G4ParticleDefinition* PD;
229 typedef G4HadronicProcess* HP;
230 typedef G4HadronicInteraction* HI;
231
232 // hadronic processes following G4HadronicProcess interface
233 std::vector<G4HadronicProcess*> process;
234 std::vector<G4HadronicInteraction*> model;
235 std::vector<G4String> modelName;
236 std::vector<PD> particle;
237 std::vector<G4int> wasPrinted;
238
239 std::multimap<PD,HP> p_map;
240 std::multimap<HP,HI> m_map;
241
242 // hadronic processes following only G4VProcess interface
243 std::vector<G4VProcess*> extraProcess;
244 std::multimap<PD,G4VProcess*> ep_map;
245
247
248 // counters and options
249 G4int n_proc;
250 G4int n_model;
251 G4int n_part;
252 G4int n_extra;
253
254 G4bool buildTableStart;
255 G4bool buildXSTable;
256
257 // cache
258 HP currentProcess;
259 PD currentParticle;
260 PD theGenericIon;
261
262 G4DynamicParticle localDP;
263
264 G4HadronicEPTestMessenger* theEPTestMessenger;
265};
266
267#endif
268
G4HadronicProcessType
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
void DeRegister(G4HadronicProcess *)
G4double GetCaptureCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=nullptr)
G4double GetCaptureCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
G4double GetCrossSectionPerVolume(const G4ParticleDefinition *particle, G4double kineticEnergy, const G4VProcess *process, const G4Material *material)
G4double GetCaptureCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
G4HadronicProcess * FindProcess(const G4ParticleDefinition *, G4HadronicProcessType subType)
void RegisterParticle(G4HadronicProcess *, const G4ParticleDefinition *)
G4double GetChargeExchangeCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
void PrintHtml(const G4ParticleDefinition *, std::ofstream &)
void SetProcessAbsLevel(G4double absoluteLevel)
G4double GetChargeExchangeCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
G4double GetFissionCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
G4double GetInelasticCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=nullptr)
G4double GetInelasticCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
G4double GetInelasticCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
void SetProcessRelLevel(G4double relativeLevel)
void DeRegisterExtraProcess(G4VProcess *)
G4double GetFissionCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=nullptr)
G4double GetChargeExchangeCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=nullptr)
void RegisterExtraProcess(G4VProcess *)
G4double GetElasticCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
void RegisterParticleForExtraProcess(G4VProcess *, const G4ParticleDefinition *)
void SetEpReportLevel(G4int level)
static G4HadronicProcessStore * Instance()
G4double GetElasticCrossSectionPerAtom(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Element *anElement, const G4Material *mat=0)
void RegisterInteraction(G4HadronicProcess *, G4HadronicInteraction *)
G4double GetCrossSectionPerAtom(const G4ParticleDefinition *particle, G4double kineticEnergy, const G4VProcess *process, const G4Element *element, const G4Material *material=nullptr)
void Register(G4HadronicProcess *)
void PrintModelHtml(const G4HadronicInteraction *model) const
G4double GetElasticCrossSectionPerIsotope(const G4ParticleDefinition *aParticle, G4double kineticEnergy, G4int Z, G4int A)
void PrintInfo(const G4ParticleDefinition *)
G4double GetFissionCrossSectionPerVolume(const G4ParticleDefinition *aParticle, G4double kineticEnergy, const G4Material *material)
#define G4ThreadLocal
Definition: tls.hh:77