Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4PrimaryVertex.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// G4PrimaryVertex
27//
28// Authors: G.Cosmo, 2 December 1995 - Design, based on object model
29// M.Asai, 29 January 1996 - First implementation
30// --------------------------------------------------------------------
31
32#include "G4PrimaryVertex.hh"
33
34#include "G4SystemOfUnits.hh"
36#include "G4ios.hh"
37
43
45 : X0(x0), Y0(y0), Z0(z0), T0(t0)
46{}
47
49 : X0(xyz0.x()), Y0(xyz0.y()), Z0(xyz0.z()), T0(t0)
50{}
51
53{
54 *this = right;
55}
56
58{
59 if (theParticle != nullptr) {
60 G4PrimaryParticle* theNext = theParticle;
61 while (theNext != nullptr) {
62 G4PrimaryParticle* thisPrimary = theNext;
63 theNext = thisPrimary->GetNext();
64 thisPrimary->ClearNext();
65 delete thisPrimary;
66 }
67 theParticle = nullptr;
68 }
69 delete nextVertex;
70 nextVertex = nullptr;
71
72 theTail = nullptr;
73 tailVertex = nullptr;
74
75 delete userInfo;
76 userInfo = nullptr;
77}
78
80{
81 if (this != &right) {
82 X0 = right.X0;
83 Y0 = right.Y0;
84 Z0 = right.Z0;
85 T0 = right.T0;
86 Weight0 = right.Weight0;
87 numberOfParticle = right.numberOfParticle;
88
89 delete theParticle;
90 theParticle = nullptr;
91 theTail = nullptr;
92 if (right.theParticle != nullptr) {
93 theParticle = new G4PrimaryParticle(*(right.theParticle));
94 theTail = theParticle;
95 G4PrimaryParticle* np = theParticle->GetNext();
96 while (np != nullptr) // Loop checking, 09.08.2015, K.Kurashige
97 {
98 theTail = np;
99 np = np->GetNext();
100 }
101 }
102
103 delete nextVertex;
104 nextVertex = nullptr;
105 tailVertex = nullptr;
106 if (right.nextVertex != nullptr) {
107 nextVertex = new G4PrimaryVertex(*(right.nextVertex));
108 tailVertex = nextVertex;
109 G4PrimaryVertex* nv = nextVertex->GetNext();
110 while (nv != nullptr) // Loop checking, 09.08.2015, K.Kurashige
111 {
112 tailVertex = nv;
113 nv = nv->GetNext();
114 }
115 }
116
117 // userInfo cannot be copied
118 userInfo = nullptr;
119 }
120 return *this;
121}
122
124{
125 return (this == &right);
126}
127
129{
130 return (this != &right);
131}
132
134{
135 if (i >= 0 && i < numberOfParticle) {
136 G4PrimaryParticle* particle = theParticle;
137 for (G4int j = 0; j < i; ++j) {
138 if (particle == nullptr) return nullptr;
139 particle = particle->GetNext();
140 }
141 return particle;
142 }
143
144 return nullptr;
145}
146
148{
149 G4cout << "Vertex ( " << X0 / mm << "[mm], " << Y0 / mm << "[mm], " << Z0 / mm << "[mm], "
150 << T0 / ns << "[ns] )"
151 << " Weight " << Weight0 << G4endl;
152 if (userInfo != nullptr) userInfo->Print();
153 G4cout << " -- Primary particles :: "
154 << " # of primaries =" << numberOfParticle << G4endl;
155 if (theParticle != nullptr) theParticle->Print();
156 if (nextVertex != nullptr) {
157 G4cout << "Next Vertex " << G4endl;
158 nextVertex->Print();
159 }
160}
G4Allocator< G4PrimaryVertex > *& aPrimaryVertexAllocator()
double G4double
Definition G4Types.hh:83
bool G4bool
Definition G4Types.hh:86
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
G4PrimaryParticle * GetNext() const
G4bool operator==(const G4PrimaryVertex &right) const
virtual ~G4PrimaryVertex()
G4PrimaryVertex * GetNext() const
G4PrimaryVertex & operator=(const G4PrimaryVertex &right)
G4bool operator!=(const G4PrimaryVertex &right) const
G4PrimaryVertex()=default
G4PrimaryParticle * GetPrimary(G4int i=0) const
virtual void Print() const =0
#define G4ThreadLocalStatic
Definition tls.hh:76