Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4ProductionCuts.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// $Id$
28// GEANT4 tag $Name: geant4-09-04-ref-00 $
29//
30//
31// ------------------------------------------------------------
32// GEANT 4 class header file
33//
34//
35// Class Description
36// This class is
37//
38// ------------------------------------------------------------
39// First Implementation 17 Sep. 2002 H.Kurahige
40// Add cuts for proton 28 Jul. 2009 H.Kurashige
41// ------------------------------------------------------------
42
43#ifndef G4ProductionCuts_h
44#define G4ProductionCuts_h 1
45
46#include "globals.hh"
47#include "G4ios.hh"
48#include <vector>
50
52{
56
57 idxG4ProtonCut, // for proton
58
60};
61
63{
64 public: // with description
65 // constructor
67
68 // copy constructor
70
72
73 public:
74 // destructor
75 virtual ~G4ProductionCuts();
76
77 // equal opperators
78 G4int operator==(const G4ProductionCuts &right) const;
79 G4int operator!=(const G4ProductionCuts &right) const;
80
81 public: // with description
82 // Set Cuts methods
83 void SetProductionCut(G4double cut, G4int index = -1);
85 void SetProductionCut(G4double cut, const G4String& pName);
86 // Set the productionCut in range with an index to particle type
87 // if index is omitted, the value is applied to all particles
88
89 G4double GetProductionCut(G4int index) const;
90 // Get the productionCut in range with an index to particle type
91
92 G4double GetProductionCut(const G4String& name) const;
93 // Get the productionCut in range with a name of particle type
94
95 void SetProductionCuts(std::vector<G4double>&);
96 // Set the vector of production cuts in range for all particles
97
98 const std::vector<G4double>& GetProductionCuts() const;
99 // Get the vector of production cuts in range for all particles
100
101 G4bool IsModified() const;
102 // return true if any cut value has been modified
103 // after last calculation of PhysicsTable
104
105 void PhysicsTableUpdated();
106 // inform end of calculation of PhysicsTable to ProductionCut
107
108 public:
109 static G4int GetIndex(const G4String& name);
110 static G4int GetIndex(const G4ParticleDefinition* ptcl);
111
112 protected:
113 std::vector<G4double> fRangeCuts;
115
116 private:
117 static const G4ParticleDefinition* gammaDef;
118 static const G4ParticleDefinition* electDef;
119 static const G4ParticleDefinition* positDef;
120
121 static const G4ParticleDefinition* protonDef; // for proton
122
123};
124
125
126inline
128{
129 if (index<0) {
130 for(G4int i = 0; i < NumberOfG4CutIndex; i++) {
131 fRangeCuts[i] = cut;
132 }
133 isModified = true;
134
135 } else if (index < NumberOfG4CutIndex) {
136 fRangeCuts[index] = cut;
137 isModified = true;
138 }
139}
140
141inline
143{
144 G4int idx = -1;
145 if(ptcl) idx = GetIndex(ptcl);
146 if(idx>=0) SetProductionCut(cut,idx);
147}
148
149inline
151{
152 G4int idx = GetIndex(pName);
153 if(idx>=0) SetProductionCut(cut,idx);
154}
155
156inline
158{
159 G4double cut=-1.0;
160 if ( (index>=0) && (index<NumberOfG4CutIndex) ) {
161 cut = fRangeCuts[index];
162 }
163 return cut;
164}
165
166inline
168{
169 return GetProductionCut(GetIndex(name));
170}
171
172
173inline
174const std::vector<G4double>& G4ProductionCuts::GetProductionCuts() const
175{
176 return fRangeCuts;
177}
178
179inline
181{
182 return isModified;
183}
184
185inline
187{
188 isModified = false;
189}
190
191#endif
192
193
194
195
196
197
198
199
200
201
202
G4ProductionCutsIndex
@ idxG4ElectronCut
@ idxG4GammaCut
@ idxG4ProtonCut
@ NumberOfG4CutIndex
@ idxG4PositronCut
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
bool G4bool
Definition: G4Types.hh:67
G4int operator!=(const G4ProductionCuts &right) const
G4int operator==(const G4ProductionCuts &right) const
G4bool IsModified() const
G4ProductionCuts & operator=(const G4ProductionCuts &right)
std::vector< G4double > fRangeCuts
static G4int GetIndex(const G4String &name)
virtual ~G4ProductionCuts()
void SetProductionCut(G4double cut, G4int index=-1)
G4double GetProductionCut(G4int index) const
const std::vector< G4double > & GetProductionCuts() const
void SetProductionCuts(std::vector< G4double > &)