Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PrimaryParticle.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// $Id$
28//
29
30#include "G4PrimaryParticle.hh"
31#include "G4SystemOfUnits.hh"
33#include "G4ParticleTable.hh"
34#include "G4ios.hh"
36
38
40:PDGcode(0),G4code(0),
41 direction(0.,0.,1.),kinE(0.),
42 nextParticle(0),daughterParticle(0),trackID(-1),
43 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
44 Weight0(1.0),properTime(0.0),userInfo(0)
45{;}
46
48:PDGcode(Pcode),
49 direction(0.,0.,1.),kinE(0.),
50 nextParticle(0),daughterParticle(0),trackID(-1),
51 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
52 Weight0(1.0),properTime(0.0),userInfo(0)
53{
55 if (G4code !=0) {
56 mass = G4code->GetPDGMass();
57 charge = G4code->GetPDGCharge();
58 }
59}
60
62 G4double px,G4double py,G4double pz)
63:PDGcode(Pcode),
64 direction(0.,0.,1.),kinE(0.),
65 nextParticle(0),daughterParticle(0),trackID(-1),
66 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
67 Weight0(1.0),properTime(0.0),userInfo(0)
68{
70 if (G4code !=0) {
71 mass = G4code->GetPDGMass();
72 charge = G4code->GetPDGCharge();
73 }
74 SetMomentum( px, py, pz);
75}
76
79:PDGcode(Pcode),
80 direction(0.,0.,1.),kinE(0.),
81 nextParticle(0),daughterParticle(0),trackID(-1),
82 charge(0.),polX(0.),polY(0.),polZ(0.),
83 Weight0(1.0),properTime(0.0),userInfo(0)
84{
86 if (G4code !=0) {
87 mass = G4code->GetPDGMass();
88 charge = G4code->GetPDGCharge();
89 }
90 Set4Momentum( px, py, pz, E);
91}
92
94:PDGcode(0),G4code(Gcode),
95 direction(0.,0.,1.),kinE(0.),
96 nextParticle(0),daughterParticle(0),trackID(-1),
97 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
98 Weight0(1.0),properTime(0.0),userInfo(0)
99{
100 if (G4code !=0) {
101 PDGcode = Gcode->GetPDGEncoding();
102 mass = G4code->GetPDGMass();
103 charge = G4code->GetPDGCharge();
104 }
105}
106
108 G4double px,G4double py,G4double pz)
109:PDGcode(0),G4code(Gcode),
110 direction(0.,0.,1.),kinE(0.),
111 nextParticle(0),daughterParticle(0),trackID(-1),
112 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
113 Weight0(1.0),properTime(0.0),userInfo(0)
114{
115 if (G4code !=0) {
116 PDGcode = Gcode->GetPDGEncoding();
117 mass = G4code->GetPDGMass();
118 charge = G4code->GetPDGCharge();
119 }
120 SetMomentum( px, py, pz);
121}
122
125:PDGcode(0),G4code(Gcode),
126 direction(0.,0.,1.),kinE(0.),
127 nextParticle(0),daughterParticle(0),trackID(-1),
128 charge(0.),polX(0.),polY(0.),polZ(0.),
129 Weight0(1.0),properTime(0.0),userInfo(0)
130{
131 if (G4code !=0) {
132 PDGcode = Gcode->GetPDGEncoding();
133 mass = G4code->GetPDGMass();
134 charge = G4code->GetPDGCharge();
135 }
136 Set4Momentum( px, py, pz, E);
137}
138
140:PDGcode(0),G4code(0),
141 direction(0.,0.,1.),kinE(0.),
142 nextParticle(0),daughterParticle(0),trackID(-1),
143 mass(-1.),charge(0.),polX(0.),polY(0.),polZ(0.),
144 Weight0(1.0),properTime(0.0),userInfo(0)
145{
146 *this = right;
147}
148
150{
151 if (this != &right) {
152 PDGcode = right.PDGcode;
153 G4code = right.G4code;
154 direction = right.direction;
155 kinE = right.kinE;
156 if (nextParticle !=0) delete nextParticle;
157 if ( right.nextParticle ==0 ){
158 nextParticle = 0;
159 } else {
160 nextParticle = new G4PrimaryParticle(*right.nextParticle);
161 }
162 if (daughterParticle !=0) delete daughterParticle;
163 if ( right.daughterParticle ==0 ){
164 daughterParticle = 0;
165 } else {
166 daughterParticle = new G4PrimaryParticle(*right.daughterParticle);
167 }
168 trackID = right.trackID;
169 mass = right.mass;
170 charge = right.charge;
171 polX = right.polX;
172 polY = right.polY;
173 polZ = right.polZ;
174 Weight0 = right.Weight0;
175 properTime = right.properTime;
176
177 // userInfo can not be copied
178 userInfo = 0;
179 }
180
181 return *this;
182}
183
185{ return (this==&right); }
186
188{ return (this!=&right); }
189
191{
192 if(nextParticle != 0){
193 delete nextParticle;
194 nextParticle = 0;
195 }
196 if(daughterParticle != 0){
197 delete daughterParticle;
198 daughterParticle =0;
199 }
200 if(userInfo!=0) {
201 delete userInfo;
202 userInfo=0;
203 }
204}
205
207{
208 if ((mass<0.)&&(G4code!=0)){
209 mass = G4code->GetPDGMass();
210 }
211 G4double pmom = std::sqrt(px*px+py*py+pz*pz);
212 if (pmom>0.0) {
213 direction.setX(px/pmom);
214 direction.setY(py/pmom);
215 direction.setZ(pz/pmom);
216 }
217 kinE = std::sqrt(px*px+py*py+pz*pz+mass*mass)-mass;
218}
219
221{
222 G4double pmom = std::sqrt(px*px+py*py+pz*pz);
223 if (pmom>0.0) {
224 direction.setX(px/pmom);
225 direction.setY(py/pmom);
226 direction.setZ(pz/pmom);
227 }
228 G4double mas2 = E*E - pmom*pmom;
229 if(mas2>=0.){
230 mass = std::sqrt(mas2);
231 } else {
232 if (G4code!=0){
233 mass = G4code->GetPDGMass();
234 }
235 E = std::sqrt(pmom*pmom+mass*mass);
236 }
237 kinE = E - mass;
238}
239
241{
242 PDGcode = Pcode;
244 if (G4code!=0){
245 mass = G4code->GetPDGMass();
246 charge = G4code->GetPDGCharge();
247 }
248}
249
251{
252 G4code = Gcode;
253 if (G4code!=0){
254 PDGcode = Gcode->GetPDGEncoding();
255 mass = G4code->GetPDGMass();
256 charge = G4code->GetPDGCharge();
257 }
258}
259
261{
262 G4cout << "==== PDGcode " << PDGcode << " Particle name ";
263 if(G4code != 0)
264 { G4cout << G4code->GetParticleName() << G4endl; }
265 else
266 { G4cout << " is not defined in G4." << G4endl; }
267 G4cout << " Assigned charge : " << charge/eplus << G4endl;
268 G4cout << " Momentum ( "
269 << GetTotalMomentum()*direction.x()/GeV << "[GeV/c], "
270 << GetTotalMomentum()*direction.y()/GeV << "[GeV/c], "
271 << GetTotalMomentum()*direction.z()/GeV << "[GeV/c] )" << G4endl;
272 G4cout << " kinetic Energy : " << kinE/GeV << " [GeV]" << G4endl;
273 if(mass>=0.){
274 G4cout << " Mass : " << mass/GeV << " [GeV]" << G4endl;
275 } else {
276 G4cout << " Mass is not assigned " << G4endl;
277 }
278 G4cout << " Polarization ( "
279 << polX << ", "
280 << polY << ", "
281 << polZ << " )"
282 << G4endl;
283 G4cout << " Weight : " << Weight0 << G4endl;
284 if(properTime>0.0) {
285 G4cout << " PreAssigned proper decay time : " << properTime/ns << " [ns] " << G4endl;
286 }
287 if(userInfo != 0) { userInfo->Print(); }
288 if(daughterParticle != 0) {
289 G4cout << ">>>> Daughters" << G4endl;
290 daughterParticle->Print();
291 }
292 if(nextParticle != 0) {
293 nextParticle->Print();
294 } else {
295 G4cout << "<<<< End of link" << G4endl;
296 }
297}
298
299
300
301
G4Allocator< G4PrimaryParticle > aPrimaryParticleAllocator
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
double z() const
double x() const
void setY(double)
double y() const
void setZ(double)
void setX(double)
G4double GetPDGCharge() const
const G4String & GetParticleName() const
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
static G4ParticleTable * GetParticleTable()
void SetPDGcode(G4int Pcode)
G4int operator==(const G4PrimaryParticle &right) const
G4PrimaryParticle & operator=(const G4PrimaryParticle &right)
void Set4Momentum(G4double px, G4double py, G4double pz, G4double E)
void SetMomentum(G4double px, G4double py, G4double pz)
G4double GetTotalMomentum() const
void SetParticleDefinition(const G4ParticleDefinition *pdef)
G4int operator!=(const G4PrimaryParticle &right) const
virtual void Print() const =0
#define ns
Definition: xmlparse.cc:597