4 // Author: I. Hrivnacova
6 // Class AliParticleGun
7 // --------------------
8 // See the class description in the header file.
10 #include "AliParticleGun.h"
11 #include "AliParticleGunMessenger.h"
12 #include "AliGunParticle.h"
13 #include "AliGlobals.h"
15 #include <G4ParticleDefinition.hh>
16 #include <G4PrimaryParticle.hh>
17 #include <G4PrimaryVertex.hh>
20 //_____________________________________________________________________________
21 AliParticleGun::AliParticleGun()
22 : G4VPrimaryGenerator(),
23 AliVerbose("particleGun"),
28 //_____________________________________________________________________________
29 AliParticleGun::AliParticleGun(const AliParticleGun& right)
30 : G4VPrimaryGenerator(right),
31 AliVerbose("particleGun"),
38 //_____________________________________________________________________________
39 AliParticleGun::~AliParticleGun() {
41 // delete gun particles
47 //_____________________________________________________________________________
48 AliParticleGun& AliParticleGun::operator=(const AliParticleGun& right)
50 // check assignement to self
51 if (this == &right) return *this;
53 // base class assignment
54 this->G4VPrimaryGenerator::operator=(right);
56 // delete gun particles
60 GunParticleConstIterator it;
61 for (it = (right.fGunParticleVector).begin();
62 it != (right.fGunParticleVector).end(); it++)
63 fGunParticleVector.push_back(new AliGunParticle(**it));
70 //_____________________________________________________________________________
71 void AliParticleGun::AddParticle(AliGunParticle* particle)
76 fGunParticleVector.push_back(particle);
79 //_____________________________________________________________________________
80 void AliParticleGun::RemoveParticle(G4int iParticle)
85 GunParticleIterator it = fGunParticleVector.begin();
87 //advance(it,iParticle);
90 fGunParticleVector.erase(it);
93 //_____________________________________________________________________________
94 void AliParticleGun::GeneratePrimaryVertex(G4Event* event)
96 // Generates primary vertices.
99 G4PrimaryVertex* previousVertex = 0;
100 G4ThreeVector previousPosition = G4ThreeVector();
101 G4double previousTime = 0.;
103 GunParticleIterator it;
104 for (it = fGunParticleVector.begin(); it != fGunParticleVector.end(); it++) {
106 AliGunParticle* particle = *it;
108 G4ParticleDefinition* particleDefinition
109 = particle->GetParticleDefinition();
110 if (particleDefinition==0) {
111 AliGlobals::Exception(
112 "AliParticleGun::GeneratePrimaryVertex: Unknown particle definition.");
115 G4ThreeVector position = particle->GetPosition();
116 G4double time = particle->GetTime();
117 G4PrimaryVertex* vertex;
118 if (it == fGunParticleVector.begin() ||
119 position != previousPosition || time != previousTime ) {
120 // create a new vertex
121 // in case position and time of gun particle are different from
123 // (vertex objects are destroyed in G4EventManager::ProcessOneEvent()
124 // when event is deleted)
125 vertex = new G4PrimaryVertex(position, time);
126 event->AddPrimaryVertex(vertex);
128 previousVertex = vertex;
129 previousPosition = position;
133 vertex = previousVertex;
135 // create a primary particle and add it to the vertex
136 // (primaryParticle objects are destroyed in G4EventManager::ProcessOneEvent()
137 // when event and then vertex is deleted)
138 G4double px = particle->GetMomentum().x();
139 G4double py = particle->GetMomentum().y();
140 G4double pz = particle->GetMomentum().z();
141 G4PrimaryParticle* primaryParticle
142 = new G4PrimaryParticle(particleDefinition, px, py, pz);
144 G4double mass = particleDefinition->GetPDGMass();
145 primaryParticle->SetMass(mass);
146 primaryParticle->SetPolarization(particle->GetPolarization().x(),
147 particle->GetPolarization().y(),
148 particle->GetPolarization().z());
150 vertex->SetPrimary(primaryParticle);
153 if (VerboseLevel() > 0) {
154 G4cout << "AliParticleGun::GeneratePrimaryVertex:" << G4endl;
156 << event->GetNumberOfPrimaryVertex() << " of primary vertices,"
157 << " " << fGunParticleVector.size() << " of primary particles "
161 // delete gun particles
165 //_____________________________________________________________________________
166 void AliParticleGun::Reset()
168 // Resets the particle gun.
171 GunParticleIterator it;
172 for (it = fGunParticleVector.begin(); it != fGunParticleVector.end(); it++)
175 fGunParticleVector.clear();
178 //_____________________________________________________________________________
179 void AliParticleGun::List()
181 // Lists the particle gun.
184 G4cout << "Particle Gun: " << G4endl;
186 if (fGunParticleVector.size() == 0)
187 G4cout << " No particles are defined." << G4endl;
190 GunParticleIterator it;
191 for (it = fGunParticleVector.begin();
192 it != fGunParticleVector.end(); it++) {
194 G4cout << i++ << " th particle properties: " << G4endl;
195 G4cout << "============================" << G4endl;