// $Id$ // Category: event // // See the class description in the header file. #include "AliParticleGun.h" #include "AliParticleGunMessenger.h" #include "AliGunParticle.h" #include "AliGlobals.h" #include #include #include #include AliParticleGun::AliParticleGun() { // fMessenger = new AliParticleGunMessenger(this); } AliParticleGun::AliParticleGun(const AliParticleGun& right) : G4VPrimaryGenerator(right) { // allocation fMessenger = new AliParticleGunMessenger(this); // copy stuff *this = right; } AliParticleGun::~AliParticleGun() { // fGunParticlesVector.clearAndDestroy(); delete fMessenger; } // operators AliParticleGun& AliParticleGun::operator=(const AliParticleGun& right) { // check assignement to self if (this == &right) return *this; // base class assignment this->G4VPrimaryGenerator::operator=(right); // particles vector fGunParticlesVector.clearAndDestroy(); for (G4int i=0; iGetParticleDefinition(); if (particleDefinition==0) { AliGlobals::Exception( "AliParticleGun::GeneratePrimaryVertex: Unknown particle definition."); } G4ThreeVector position = particle->GetPosition(); G4double time = particle->GetTime(); G4PrimaryVertex* vertex; if ( i==0 || position != previousPosition || time != previousTime ) { // create a new vertex // in case position and time of gun particle are different from // previous values // (vertex objects are destroyed in G4EventManager::ProcessOneEvent() // when event is deleted) vertex = new G4PrimaryVertex(position, time); event->AddPrimaryVertex(vertex); previousVertex = vertex; previousPosition = position; previousTime = time; } else vertex = previousVertex; // create a primary particle and add it to the vertex // (primaryParticle objects are destroyed in G4EventManager::ProcessOneEvent() // when event and then vertex is deleted) G4double px = particle->GetMomentum().x(); G4double py = particle->GetMomentum().y(); G4double pz = particle->GetMomentum().z(); G4PrimaryParticle* primaryParticle = new G4PrimaryParticle(particleDefinition, px, py, pz); G4double mass = particleDefinition->GetPDGMass(); primaryParticle->SetMass(mass); primaryParticle->SetPolarization(particle->GetPolarization().x(), particle->GetPolarization().y(), particle->GetPolarization().z()); vertex->SetPrimary(primaryParticle); } // delete gun particles fGunParticlesVector.clearAndDestroy(); // add verbose G4cout << "AliParticleGun::GeneratePrimaryVertex:" << G4endl; G4cout << " " << event->GetNumberOfPrimaryVertex() << " of primary vertices," << " " << nofGunParticles << " of primary particles " << G4endl; } void AliParticleGun::Reset() { // Resets the particle gun. // --- fGunParticlesVector.clearAndDestroy(); } void AliParticleGun::List() { // Lists the particle gun. // --- G4int nofGunParticles = fGunParticlesVector.entries(); G4cout << "Particle Gun: " << G4endl; if (nofGunParticles==0) { G4cout << " No particles are defined." << G4endl; } else { for (G4int i=0; iPrint(); } } }