File indexing completed on 2026-09-09 08:29:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "RE05PrimaryGeneratorAction.hh"
0030
0031 #include "RE05PrimaryGeneratorMessenger.hh"
0032
0033 #include "G4AutoLock.hh"
0034 #include "G4Event.hh"
0035 #include "G4HEPEvtInterface.hh"
0036 #include "G4ParticleDefinition.hh"
0037 #include "G4ParticleGun.hh"
0038 #include "G4ParticleTable.hh"
0039 #include "G4SystemOfUnits.hh"
0040
0041 namespace
0042 {
0043 G4Mutex RE05PrimGenDestrMutex = G4MUTEX_INITIALIZER;
0044 G4Mutex RE05PrimGenMutex = G4MUTEX_INITIALIZER;
0045 }
0046
0047 G4VPrimaryGenerator* RE05PrimaryGeneratorAction::fHEPEvt = 0;
0048
0049
0050
0051 RE05PrimaryGeneratorAction::RE05PrimaryGeneratorAction()
0052 : G4VUserPrimaryGeneratorAction(), fParticleGun(0), fMessenger(0), fUseHEPEvt(false)
0053 {
0054 G4AutoLock lock(&RE05PrimGenDestrMutex);
0055 if (!fHEPEvt) {
0056 const char* filename = "pythia_event.data";
0057 fHEPEvt = new G4HEPEvtInterface(filename, 1);
0058 }
0059 lock.unlock();
0060
0061 G4int n_particle = 1;
0062 G4ParticleGun* particleGun = new G4ParticleGun(n_particle);
0063 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
0064 G4String particleName;
0065 G4ParticleDefinition* particle = particleTable->FindParticle(particleName = "mu+");
0066 particleGun->SetParticleDefinition(particle);
0067 particleGun->SetParticleMomentumDirection(G4ThreeVector(0., 1., 0.));
0068 particleGun->SetParticleEnergy(100. * GeV);
0069 particleGun->SetParticlePosition(G4ThreeVector(0. * cm, 0. * cm, 0. * cm));
0070 fParticleGun = particleGun;
0071
0072 fMessenger = new RE05PrimaryGeneratorMessenger(this);
0073 fUseHEPEvt = true;
0074 }
0075
0076
0077
0078 RE05PrimaryGeneratorAction::~RE05PrimaryGeneratorAction()
0079 {
0080 G4AutoLock lock(&RE05PrimGenDestrMutex);
0081 if (fHEPEvt) {
0082 delete fHEPEvt;
0083 fHEPEvt = 0;
0084 }
0085 delete fParticleGun;
0086 delete fMessenger;
0087 }
0088
0089
0090
0091 void RE05PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
0092 {
0093 if (fUseHEPEvt) {
0094 G4AutoLock lock(&RE05PrimGenMutex);
0095 fHEPEvt->GeneratePrimaryVertex(anEvent);
0096 }
0097 else {
0098 fParticleGun->GeneratePrimaryVertex(anEvent);
0099 }
0100 }
0101
0102