]> git.uio.no Git - u/mrichter/AliRoot.git/blob - AliGeant4/AliParticleGun.cxx
added comment lines separating methods
[u/mrichter/AliRoot.git] / AliGeant4 / AliParticleGun.cxx
1 // $Id$
2 // Category: event
3 //
4 // See the class description in the header file.
5
6 #include "AliParticleGun.h"
7 #include "AliParticleGunMessenger.h"
8 #include "AliGunParticle.h"
9 #include "AliGlobals.h"
10
11 #include <G4ParticleDefinition.hh>
12 #include <G4PrimaryParticle.hh>
13 #include <G4PrimaryVertex.hh>
14 #include <G4Event.hh>
15
16 //_____________________________________________________________________________
17 AliParticleGun::AliParticleGun() {
18 //
19   fMessenger = new AliParticleGunMessenger(this);
20 }
21
22 //_____________________________________________________________________________
23 AliParticleGun::AliParticleGun(const AliParticleGun& right)
24   : G4VPrimaryGenerator(right)
25 {
26   // allocation
27   fMessenger = new AliParticleGunMessenger(this);
28
29   // copy stuff
30   *this = right;
31 }
32
33 //_____________________________________________________________________________
34 AliParticleGun::~AliParticleGun() {
35 //
36   fGunParticlesVector.clearAndDestroy();
37   delete fMessenger;
38 }
39
40 // operators
41
42 //_____________________________________________________________________________
43 AliParticleGun& AliParticleGun::operator=(const AliParticleGun& right)
44 {
45   // check assignement to self
46   if (this == &right) return *this;
47
48   // base class assignment
49   this->G4VPrimaryGenerator::operator=(right);
50
51   // particles vector
52   fGunParticlesVector.clearAndDestroy();
53   for (G4int i=0; i<right.fGunParticlesVector.entries(); i++) {
54     AliGunParticle* rhsParticle = right.fGunParticlesVector[i];
55     AliGunParticle* newParticle = new AliGunParticle(*rhsParticle);
56     fGunParticlesVector.insert(newParticle);
57   }
58
59   return *this;  
60 }
61   
62 // public methods
63
64 //_____________________________________________________________________________
65 void AliParticleGun::AddParticle(AliGunParticle* particle)
66
67 // Adds particle.
68 // ---
69
70   fGunParticlesVector.insert(particle); 
71 }
72
73 //_____________________________________________________________________________
74 void AliParticleGun::RemoveParticle(G4int iParticle)
75
76 // Removes particle.
77 // ---
78
79   AliGunParticle* particle = fGunParticlesVector[iParticle];
80   fGunParticlesVector.remove(particle); 
81   delete particle;  
82 }
83
84 //_____________________________________________________________________________
85 void AliParticleGun::GeneratePrimaryVertex(G4Event* event)
86 {
87 // Generates primary vertices.
88 // ---
89
90   G4PrimaryVertex* previousVertex = 0;
91   G4ThreeVector previousPosition = G4ThreeVector(); 
92   G4double previousTime = 0.; 
93
94   G4int nofGunParticles = fGunParticlesVector.entries();
95   for( G4int i=0; i<nofGunParticles; i++ )
96   {    
97     AliGunParticle* particle = fGunParticlesVector[i];
98
99     G4ParticleDefinition* particleDefinition
100       = particle->GetParticleDefinition();
101     if (particleDefinition==0) {
102       AliGlobals::Exception(
103         "AliParticleGun::GeneratePrimaryVertex: Unknown particle definition.");
104     }   
105
106     G4ThreeVector position = particle->GetPosition(); 
107     G4double time = particle->GetTime(); 
108     G4PrimaryVertex* vertex;
109     if ( i==0 || position != previousPosition || time != previousTime ) {   
110       // create a new vertex 
111       // in case position and time of gun particle are different from 
112       // previous values
113       // (vertex objects are destroyed in G4EventManager::ProcessOneEvent()
114       // when event is deleted)  
115       vertex = new G4PrimaryVertex(position, time);
116       event->AddPrimaryVertex(vertex);
117
118       previousVertex = vertex;
119       previousPosition = position;
120       previousTime = time;
121     }
122     else 
123       vertex = previousVertex;
124
125     // create a primary particle and add it to the vertex
126     // (primaryParticle objects are destroyed in G4EventManager::ProcessOneEvent()
127     // when event and then vertex is deleted)
128     G4double px = particle->GetMomentum().x();
129     G4double py = particle->GetMomentum().y();
130     G4double pz = particle->GetMomentum().z();
131     G4PrimaryParticle* primaryParticle 
132       = new G4PrimaryParticle(particleDefinition, px, py, pz);
133       
134     G4double mass =  particleDefinition->GetPDGMass();
135     primaryParticle->SetMass(mass);
136     primaryParticle->SetPolarization(particle->GetPolarization().x(),
137                                      particle->GetPolarization().y(),
138                                      particle->GetPolarization().z());    
139     
140     vertex->SetPrimary(primaryParticle);
141   }
142   
143   // delete gun particles
144   fGunParticlesVector.clearAndDestroy();
145
146   // add verbose
147   G4cout << "AliParticleGun::GeneratePrimaryVertex:" << G4endl;
148   G4cout << "   " 
149          << event->GetNumberOfPrimaryVertex() << " of primary vertices,"
150          << "   " << nofGunParticles << " of primary particles " << G4endl;  
151 }
152
153 //_____________________________________________________________________________
154 void AliParticleGun::Reset()
155
156 // Resets the particle gun.
157 // ---
158
159   fGunParticlesVector.clearAndDestroy(); 
160 }
161
162 //_____________________________________________________________________________
163 void AliParticleGun::List()
164 {
165 // Lists the particle gun.
166 // ---
167
168   G4int nofGunParticles = fGunParticlesVector.entries();
169
170   G4cout << "Particle Gun: " << G4endl;
171
172   if (nofGunParticles==0)
173   { G4cout << "   No particles are defined." << G4endl; }
174   else
175   {
176     for (G4int i=0; i<nofGunParticles; i++)
177     {
178       G4cout << i << " th particle properties: " << G4endl;
179       G4cout << "============================" << G4endl;
180       fGunParticlesVector[i]->Print();
181     }
182   }
183 }
184