File indexing completed on 2026-09-22 08:09:59
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 "RE01PrimaryGeneratorAction.hh"
0030
0031 #include "RE01PrimaryGeneratorMessenger.hh"
0032
0033 #include "G4Event.hh"
0034 #include "G4HEPEvtInterface.hh"
0035 #include "G4ParticleDefinition.hh"
0036 #include "G4ParticleGun.hh"
0037 #include "G4ParticleTable.hh"
0038 #include "G4SystemOfUnits.hh"
0039
0040
0041 RE01PrimaryGeneratorAction::RE01PrimaryGeneratorAction()
0042 : G4VUserPrimaryGeneratorAction(), fHEPEvt(0), fParticleGun(0), fMessenger(0)
0043 {
0044 const char* filename = "pythia_event.data";
0045 fHEPEvt = new G4HEPEvtInterface(filename);
0046
0047 G4int n_particle = 1;
0048 G4ParticleGun* particleGun = new G4ParticleGun(n_particle);
0049 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
0050 G4String particleName;
0051 G4ParticleDefinition* particle = particleTable->FindParticle(particleName = "mu+");
0052 particleGun->SetParticleDefinition(particle);
0053 particleGun->SetParticleMomentumDirection(G4ThreeVector(0., 1., 0.));
0054 particleGun->SetParticleEnergy(100. * GeV);
0055 particleGun->SetParticlePosition(G4ThreeVector(0. * cm, 0. * cm, 0. * cm));
0056 fParticleGun = particleGun;
0057
0058 fMessenger = new RE01PrimaryGeneratorMessenger(this);
0059 fUseHEPEvt = true;
0060 }
0061
0062
0063 #include "G4AutoLock.hh"
0064 namespace
0065 {
0066 G4Mutex RE01PrimGenDestrMutex = G4MUTEX_INITIALIZER;
0067 G4Mutex RE01PrimGenMutex = G4MUTEX_INITIALIZER;
0068 }
0069
0070 RE01PrimaryGeneratorAction::~RE01PrimaryGeneratorAction()
0071 {
0072 G4AutoLock lock(&RE01PrimGenDestrMutex);
0073 if (fHEPEvt) {
0074 delete fHEPEvt;
0075 fHEPEvt = 0;
0076 }
0077 delete fParticleGun;
0078 delete fMessenger;
0079 }
0080
0081
0082 void RE01PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
0083 {
0084 if (fUseHEPEvt) {
0085 G4AutoLock lock(&RE01PrimGenMutex);
0086 fHEPEvt->GeneratePrimaryVertex(anEvent);
0087 if (anEvent->GetNumberOfPrimaryVertex() == 0) {
0088 G4Exception("RE01PrimaryGeneratorAction::GeneratePrimaries", "RE01_0001", RunMustBeAborted,
0089 "End of file detected.");
0090 }
0091 }
0092 else {
0093 fParticleGun->GeneratePrimaryVertex(anEvent);
0094 }
0095 }