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()
24 //fMessenger = new AliParticleGunMessenger(this);
27 //_____________________________________________________________________________
28 AliParticleGun::AliParticleGun(const AliParticleGun& right)
29 : G4VPrimaryGenerator(right),
36 //_____________________________________________________________________________
37 AliParticleGun::~AliParticleGun() {
39 // delete gun particles
45 //_____________________________________________________________________________
46 AliParticleGun& AliParticleGun::operator=(const AliParticleGun& right)
48 // check assignement to self
49 if (this == &right) return *this;
51 // base class assignment
52 this->G4VPrimaryGenerator::operator=(right);
54 // delete gun particles
58 GunParticleConstIterator it;
59 for (it = (right.fGunParticleVector).begin();
60 it != (right.fGunParticleVector).end(); it++)
61 fGunParticleVector.push_back(new AliGunParticle(**it));
68 //_____________________________________________________________________________
69 void AliParticleGun::AddParticle(AliGunParticle* particle)
74 fGunParticleVector.push_back(particle);
77 //_____________________________________________________________________________
78 void AliParticleGun::RemoveParticle(G4int iParticle)
83 GunParticleIterator it = fGunParticleVector.begin();
85 //advance(it,iParticle);
88 fGunParticleVector.erase(it);
91 //_____________________________________________________________________________
92 void AliParticleGun::GeneratePrimaryVertex(G4Event* event)
94 // Generates primary vertices.
97 G4PrimaryVertex* previousVertex = 0;
98 G4ThreeVector previousPosition = G4ThreeVector();
99 G4double previousTime = 0.;
101 GunParticleIterator it;
102 for (it = fGunParticleVector.begin(); it != fGunParticleVector.end(); it++) {
104 AliGunParticle* particle = *it;
106 G4ParticleDefinition* particleDefinition
107 = particle->GetParticleDefinition();
108 if (particleDefinition==0) {
109 AliGlobals::Exception(
110 "AliParticleGun::GeneratePrimaryVertex: Unknown particle definition.");
113 G4ThreeVector position = particle->GetPosition();
114 G4double time = particle->GetTime();
115 G4PrimaryVertex* vertex;
116 if (it == fGunParticleVector.begin() ||
117 position != previousPosition || time != previousTime ) {
118 // create a new vertex
119 // in case position and time of gun particle are different from
121 // (vertex objects are destroyed in G4EventManager::ProcessOneEvent()
122 // when event is deleted)
123 vertex = new G4PrimaryVertex(position, time);
124 event->AddPrimaryVertex(vertex);
126 previousVertex = vertex;
127 previousPosition = position;
131 vertex = previousVertex;
133 // create a primary particle and add it to the vertex
134 // (primaryParticle objects are destroyed in G4EventManager::ProcessOneEvent()
135 // when event and then vertex is deleted)
136 G4double px = particle->GetMomentum().x();
137 G4double py = particle->GetMomentum().y();
138 G4double pz = particle->GetMomentum().z();
139 G4PrimaryParticle* primaryParticle
140 = new G4PrimaryParticle(particleDefinition, px, py, pz);
142 G4double mass = particleDefinition->GetPDGMass();
143 primaryParticle->SetMass(mass);
144 primaryParticle->SetPolarization(particle->GetPolarization().x(),
145 particle->GetPolarization().y(),
146 particle->GetPolarization().z());
148 vertex->SetPrimary(primaryParticle);
152 G4cout << "AliParticleGun::GeneratePrimaryVertex:" << G4endl;
154 << event->GetNumberOfPrimaryVertex() << " of primary vertices,"
155 << " " << fGunParticleVector.size() << " of primary particles "
158 // delete gun particles
162 //_____________________________________________________________________________
163 void AliParticleGun::Reset()
165 // Resets the particle gun.
168 GunParticleIterator it;
169 for (it = fGunParticleVector.begin(); it != fGunParticleVector.end(); it++)
172 fGunParticleVector.clear();
175 //_____________________________________________________________________________
176 void AliParticleGun::List()
178 // Lists the particle gun.
181 G4cout << "Particle Gun: " << G4endl;
183 if (fGunParticleVector.size() == 0)
184 G4cout << " No particles are defined." << G4endl;
187 GunParticleIterator it;
188 for (it = fGunParticleVector.begin();
189 it != fGunParticleVector.end(); it++) {
191 G4cout << i++ << " th particle properties: " << G4endl;
192 G4cout << "============================" << G4endl;