Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4ProductionCuts.cc
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// G4ProductionCuts class implementation
27//
28// Author: H.Kurashige, 17 September 2002 - First implementation
29// --------------------------------------------------------------------
30
31#include "G4ProductionCuts.hh"
33
34#include <sstream>
35
37{
38 for (G4int i=0; i<NumberOfG4CutIndex; ++i)
39 {
40 fRangeCuts.push_back(0.0);
41 }
42}
43
45{
46 for (G4int i=0; i<NumberOfG4CutIndex; ++i)
47 {
48 fRangeCuts.push_back(0.0);
49 }
50 *this = right;
51}
52
54{
55 fRangeCuts.clear();
56}
57
59{
60 if (&right==this) return *this;
61
62 for (G4int i=0; i<NumberOfG4CutIndex; ++i)
63 {
64 fRangeCuts[i] = right.fRangeCuts[i];
65 }
66 isModified = right.isModified;
67 return *this;
68}
69
71{
72 return (this == &right);
73}
74
76{
77 return (this != &right);
78}
79
81{
82 if(index >= 0 && index < NumberOfG4CutIndex)
83 {
84 fRangeCuts[index] = cut;
85 isModified = true;
86 }
87 else
88 {
89 std::ostringstream os;
90 os << "Setting cuts for particles other than photon, e-, e+ or proton has "
91 "no effect.";
92 G4Exception("G4ProductionCuts::SetProductionCut", "ProcCuts110",
93 JustWarning, os.str().c_str());
94 }
95}
96
98{
99 for(G4int i = 0; i < NumberOfG4CutIndex; ++i)
100 {
101 fRangeCuts[i] = cut;
102 }
103 isModified = true;
104}
105
107{
108 SetProductionCut(cut, GetIndex(ptr));
109}
110
112{
113 SetProductionCut(cut, GetIndex(pName));
114}
115
117{
118 G4double cut = -1.0;
119 if (index>=0 && index<NumberOfG4CutIndex)
120 {
121 cut = fRangeCuts[index];
122 }
123 return cut;
124}
125
127{
128 return GetProductionCut(GetIndex(name));
129}
130
131
132const std::vector<G4double>& G4ProductionCuts::GetProductionCuts() const
133{
134 return fRangeCuts;
135}
136
138{
139 return isModified;
140}
141
143{
144 isModified = false;
145}
146
148{
149 G4int index = -1;
150 if ( name == "gamma" ) { index = 0; }
151 else if ( name == "e-" ) { index = 1; }
152 else if ( name == "e+" ) { index = 2; }
153 else if ( name == "proton" ) { index = 3; }
154
155 return index;
156}
157
158
160{
161 G4int pdg = (nullptr == ptr) ? 0 : ptr->GetPDGEncoding();
162 G4int index = -1;
163 if (pdg == 22) { index = 0; }
164 else if (pdg == 11) { index = 1; }
165 else if (pdg == -11) { index = 2; }
166 else if (pdg == 2212) { index = 3; }
167
168 return index;
169}
170
171void G4ProductionCuts::SetProductionCuts(std::vector<G4double>& cut)
172{
173 G4int vSize = (G4int)cut.size();
174 if (vSize != NumberOfG4CutIndex)
175 {
176#ifdef G4VERBOSE
178 {
179 G4cout << "G4ProductionCuts::SetProductionCuts ";
180 G4cout << " The size of given cut value vector [=" << vSize << "] "
181 << " is not consistent with number of CutIndex [="
183 }
184#endif
185 G4Exception( "G4ProductionCuts::SetProductionCuts ",
186 "ProcCuts108",
187 JustWarning, "Given vector size is inconsistent ");
188 if (NumberOfG4CutIndex<vSize) { vSize = NumberOfG4CutIndex; }
189 }
190 for(G4int i = 0; i<vSize; ++i)
191 {
192 fRangeCuts[i] = cut[i];
193 }
194 isModified = true;
195}
@ JustWarning
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:59
@ NumberOfG4CutIndex
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
static G4ProductionCutsTable * GetProductionCutsTable()
G4bool operator!=(const G4ProductionCuts &right) const
G4bool IsModified() const
G4ProductionCuts & operator=(const G4ProductionCuts &right)
std::vector< G4double > fRangeCuts
void SetProductionCut(G4double cut, G4int index)
static G4int GetIndex(const G4String &name)
virtual ~G4ProductionCuts()
G4double GetProductionCut(G4int index) const
const std::vector< G4double > & GetProductionCuts() const
void SetProductionCuts(std::vector< G4double > &)
G4bool operator==(const G4ProductionCuts &right) const