Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4InuclElementaryParticle.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//
27// 20100428 M. Kelsey -- Use G4InuclParticleNames enums instead of numbers,
28// add Omega and antinucleons.
29// 20100429 M. Kelsey -- Change "case gamma:" to "case photon:"
30// 20100923 M. Kelsey -- Drop "uups" message when converting G4PartDef to code
31// 20101029 M. Kelsey -- Add instantiation of new particles, antiparticles
32// 20110214 M. Kelsey -- Drop unused "generation"
33// 20110307 M. Kelsey -- Add random K0 mixing if K0S/K0L passed to type()
34// 20110321 M. Kelsey -- Fix getStrangeness to return int
35// 20110801 M. Kelsey -- Add fill() functions to replicate ctors, allowing
36// reuse of objects as buffers; c.f. G4InuclNuclei.
37// 20110922 M. Kelsey -- Add stream argument to printParticle() => print()
38// 20120608 M. Kelsey -- Fix variable-name "shadowing" compiler warnings.
39// 20130508 D. Wright -- Add lepton construction, use wrapper header
40// 20140310 M. Kelsey -- Fix constness in G4PD* passing
41
43
44#include "G4SystemOfUnits.hh"
46#include "G4ParticleTypes.hh"
47#include "G4Diproton.hh"
48#include "G4UnboundPN.hh"
49#include "G4Dineutron.hh"
50#include "Randomize.hh"
51
53using namespace G4InuclParticleNames;
54
55
58 switch(ityp) {
59 case proton: return G4Proton::Definition(); break;
60 case neutron: return G4Neutron::Definition(); break;
61 case pionPlus: return G4PionPlus::Definition(); break;
62 case pionMinus: return G4PionMinus::Definition(); break;
63 case pionZero: return G4PionZero::Definition(); break;
64 case photon: return G4Gamma::Definition(); break;
65 case kaonPlus: return G4KaonPlus::Definition(); break;
66 case kaonMinus: return G4KaonMinus::Definition(); break;
67 case kaonZero: return G4KaonZero::Definition(); break;
68 case kaonZeroBar: return G4AntiKaonZero::Definition(); break;
69 case lambda: return G4Lambda::Definition(); break;
70 case sigmaPlus: return G4SigmaPlus::Definition(); break;
71 case sigmaZero: return G4SigmaZero::Definition(); break;
72 case sigmaMinus: return G4SigmaMinus::Definition(); break;
73 case xiZero: return G4XiZero::Definition(); break;
74 case xiMinus: return G4XiMinus::Definition(); break;
75 case omegaMinus: return G4OmegaMinus::Definition(); break;
76 // NOTE: The four light nuclei "particles" are actually G4Ions
77 case deuteron: return G4Deuteron::Definition(); break;
78 case triton: return G4Triton::Definition(); break;
79 case He3: return G4He3::Definition(); break;
80 case alpha: return G4Alpha::Definition(); break;
81 case antiProton: return G4AntiProton::Definition(); break;
82 case antiNeutron: return G4AntiNeutron::Definition(); break;
83 // NOTE: The the four light antinuclei "particles" are actually G4Ions
84 case antiDeuteron: return G4AntiDeuteron::Definition(); break;
85 case antiTriton: return G4AntiTriton::Definition(); break;
86 case antiHe3: return G4AntiHe3::Definition(); break;
87 case antiAlpha: return G4AntiAlpha::Definition(); break;
88 // NOTE: The three unbound dibaryons are local Bertini classes
89 case diproton: return G4Diproton::Definition(); break;
90 case unboundPN: return G4UnboundPN::Definition(); break;
91 case dineutron: return G4Dineutron::Definition(); break;
92 // Leptons are included for muon capture and future tau/neutrino physics
93 case electron: return G4Electron::Definition(); break;
94 case positron: return G4Positron::Definition(); break;
95 case electronNu: return G4NeutrinoE::Definition(); break;
96 case antiElectronNu: return G4AntiNeutrinoE::Definition(); break;
97 case muonMinus: return G4MuonMinus::Definition(); break;
98 case muonPlus: return G4MuonPlus::Definition(); break;
99 case muonNu: return G4NeutrinoMu::Definition(); break;
100 case antiMuonNu: return G4AntiNeutrinoMu::Definition(); break;
101 case tauMinus: return G4TauMinus::Definition(); break;
102 case tauPlus: return G4TauPlus::Definition(); break;
103 case tauNu: return G4NeutrinoTau::Definition(); break;
104 case antiTauNu: return G4AntiNeutrinoTau::Definition(); break;
105 default:
106 G4cerr << "G4InuclElementaryParticle::makeDefinition: unknown particle type "
107 << ityp << G4endl;
108 }
109
110 return 0;
111}
112
113// This is the inverse mapping to makeDefinition above
114
116 if (pd == 0) return 0;
117 if (pd == G4Proton::Definition()) return proton;
118 if (pd == G4Neutron::Definition()) return neutron;
119 if (pd == G4PionPlus::Definition()) return pionPlus;
120 if (pd == G4PionMinus::Definition()) return pionMinus;
121 if (pd == G4PionZero::Definition()) return pionZero;
122 if (pd == G4Gamma::Definition()) return photon;
123 if (pd == G4KaonPlus::Definition()) return kaonPlus;
124 if (pd == G4KaonMinus::Definition()) return kaonMinus;
125 if (pd == G4KaonZero::Definition()) return kaonZero;
126 if (pd == G4AntiKaonZero::Definition()) return kaonZeroBar;
127 if (pd == G4Lambda::Definition()) return lambda;
128 if (pd == G4SigmaPlus::Definition()) return sigmaPlus;
129 if (pd == G4SigmaZero::Definition()) return sigmaZero;
130 if (pd == G4SigmaMinus::Definition()) return sigmaMinus;
131 if (pd == G4XiZero::Definition()) return xiZero;
132 if (pd == G4XiMinus::Definition()) return xiMinus;
133 if (pd == G4OmegaMinus::Definition()) return omegaMinus;
134 // NOTE: The four light nuclei "particles" are actually G4Ions
135 if (pd == G4Deuteron::Definition()) return deuteron;
136 if (pd == G4Triton::Definition()) return triton;
137 if (pd == G4He3::Definition()) return He3;
138 if (pd == G4Alpha::Definition()) return alpha;
139 if (pd == G4AntiProton::Definition()) return antiProton;
140 if (pd == G4AntiNeutron::Definition()) return antiNeutron;
141 // NOTE: The the four light antinuclei "particles" are actually G4Ions
142 if (pd == G4AntiDeuteron::Definition()) return antiDeuteron;
143 if (pd == G4AntiTriton::Definition()) return antiTriton;
144 if (pd == G4AntiHe3::Definition()) return antiHe3;
145 if (pd == G4AntiAlpha::Definition()) return antiAlpha;
146 // NOTE: The three unbound dibaryons are local Bertini classes
147 if (pd == G4Diproton::Definition()) return diproton;
148 if (pd == G4UnboundPN::Definition()) return unboundPN;
149 if (pd == G4Dineutron::Definition()) return dineutron;
150
151 if (pd == G4Electron::Definition()) return electron;
152 if (pd == G4Positron::Definition()) return positron;
153 if (pd == G4NeutrinoE::Definition()) return electronNu;
155 if (pd == G4MuonMinus::Definition()) return muonMinus;
156 if (pd == G4MuonPlus::Definition()) return muonPlus;
157 if (pd == G4NeutrinoMu::Definition()) return muonNu;
158 if (pd == G4AntiNeutrinoMu::Definition()) return antiMuonNu;
159 if (pd == G4TauMinus::Definition()) return tauMinus;
160 if (pd == G4TauPlus::Definition()) return tauPlus;
161 if (pd == G4NeutrinoTau::Definition()) return tauNu;
162 if (pd == G4AntiNeutrinoTau::Definition()) return antiTauNu;
163
164 // Weak neutral kaons must be mixed back to strong (strangeness states)
166 return ((G4UniformRand() > 0.5) ? kaonZero : kaonZeroBar);
167 }
168
169 return 0; // Unknown objects return zero (e.g., nuclei)
170}
171
174}
175
176
177// Overwrite data structure (avoids creating/copying temporaries)
178
181 setType(ityp);
182 setMomentum(mom);
183 setModel(model);
184}
185
188 setType(ityp);
189 setKineticEnergy(ekin);
190 setModel(model);
191}
192
194 const G4ParticleDefinition* pd,
196 setDefinition(pd);
197 setMomentum(mom);
198 setModel(model);
199}
200
201
202// Assignment operator for use with std::sort()
206 return *this;
207}
208
209
211 const G4ParticleDefinition* pd = makeDefinition(ityp);
212 return pd ? (pd->GetQuarkContent(3) - pd->GetAntiQuarkContent(3)) : 0;
213}
214
216 const G4ParticleDefinition* pd = makeDefinition(ityp);
217 return pd ? pd->GetPDGMass()*MeV/GeV : 0.0; // From G4 to Bertini units
218}
219
220
221// Print particle parameters
222
223void G4InuclElementaryParticle::print(std::ostream& os) const {
225 os << G4endl << " Particle: " << getDefinition()->GetParticleName()
226 << " type " << type() << " mass " << getMass()
227 << " ekin " << getKineticEnergy();
228}
229
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4GLOB_DLL std::ostream G4cerr
#define G4endl
Definition: G4ios.hh:57
#define G4UniformRand()
Definition: Randomize.hh:52
static G4Alpha * Definition()
Definition: G4Alpha.cc:48
static G4AntiAlpha * Definition()
Definition: G4AntiAlpha.cc:48
static G4AntiDeuteron * Definition()
static G4AntiHe3 * Definition()
Definition: G4AntiHe3.cc:49
static G4AntiKaonZero * Definition()
static G4AntiNeutrinoE * Definition()
static G4AntiNeutrinoMu * Definition()
static G4AntiNeutrinoTau * Definition()
static G4AntiNeutron * Definition()
static G4AntiProton * Definition()
Definition: G4AntiProton.cc:50
static G4AntiTriton * Definition()
Definition: G4AntiTriton.cc:49
static G4Deuteron * Definition()
Definition: G4Deuteron.cc:49
static G4Dineutron * Definition()
Definition: G4Dineutron.cc:67
static G4Diproton * Definition()
Definition: G4Diproton.cc:67
static G4Electron * Definition()
Definition: G4Electron.cc:48
static G4Gamma * Definition()
Definition: G4Gamma.cc:48
static G4He3 * Definition()
Definition: G4He3.cc:49
static const G4ParticleDefinition * makeDefinition(G4int ityp)
virtual void print(std::ostream &os) const
void fill(G4int ityp, Model model=DefaultModel)
G4InuclElementaryParticle & operator=(const G4InuclElementaryParticle &right)
static G4double getParticleMass(G4int type)
const G4ParticleDefinition * getDefinition() const
virtual void print(std::ostream &os) const
G4double getKineticEnergy() const
G4InuclParticle & operator=(const G4InuclParticle &right)
G4double getMass() const
void setKineticEnergy(G4double ekin)
void setMomentum(const G4LorentzVector &mom)
void setDefinition(const G4ParticleDefinition *pd)
void setModel(Model model)
static G4KaonMinus * Definition()
Definition: G4KaonMinus.cc:53
static G4KaonPlus * Definition()
Definition: G4KaonPlus.cc:53
static G4KaonZeroLong * Definition()
static G4KaonZeroShort * Definition()
static G4KaonZero * Definition()
Definition: G4KaonZero.cc:52
static G4Lambda * Definition()
Definition: G4Lambda.cc:52
static G4MuonMinus * Definition()
Definition: G4MuonMinus.cc:51
static G4MuonPlus * Definition()
Definition: G4MuonPlus.cc:51
static G4NeutrinoE * Definition()
Definition: G4NeutrinoE.cc:48
static G4NeutrinoMu * Definition()
Definition: G4NeutrinoMu.cc:48
static G4NeutrinoTau * Definition()
static G4Neutron * Definition()
Definition: G4Neutron.cc:53
static G4OmegaMinus * Definition()
Definition: G4OmegaMinus.cc:52
G4int GetQuarkContent(G4int flavor) const
const G4String & GetParticleName() const
G4int GetAntiQuarkContent(G4int flavor) const
static G4PionMinus * Definition()
Definition: G4PionMinus.cc:51
static G4PionPlus * Definition()
Definition: G4PionPlus.cc:51
static G4PionZero * Definition()
Definition: G4PionZero.cc:54
static G4Positron * Definition()
Definition: G4Positron.cc:48
static G4Proton * Definition()
Definition: G4Proton.cc:48
static G4SigmaMinus * Definition()
Definition: G4SigmaMinus.cc:52
static G4SigmaPlus * Definition()
Definition: G4SigmaPlus.cc:52
static G4SigmaZero * Definition()
Definition: G4SigmaZero.cc:52
static G4TauMinus * Definition()
Definition: G4TauMinus.cc:53
static G4TauPlus * Definition()
Definition: G4TauPlus.cc:53
static G4Triton * Definition()
Definition: G4Triton.cc:49
static G4UnboundPN * Definition()
Definition: G4UnboundPN.cc:66
static G4XiMinus * Definition()
Definition: G4XiMinus.cc:52
static G4XiZero * Definition()
Definition: G4XiZero.cc:52