#include "YourPrimaryGeneratorAction.hh" #include "YourDetectorConstruction.hh" #include "G4ParticleGun.hh" #include "G4ParticleTable.hh" YourPrimaryGeneratorAction::YourPrimaryGeneratorAction(YourDetectorConstruction* det) : G4VUserPrimaryGeneratorAction(), fDetector(det), fGun(nullptr) { G4int numParticles = 1; fGun = new G4ParticleGun(numParticles); SetDefault(); } YourPrimaryGeneratorAction::~YourPrimaryGeneratorAction() { delete fGun; } void YourPrimaryGeneratorAction::GeneratePrimaries(G4Event* evt) { fGun->GeneratePrimaryVertex(evt); } void YourPrimaryGeneratorAction::SetDefault() { // e- // G4Electron::Definition() G4ParticleDefinition* part = G4ParticleTable::GetParticleTable()->FindParticle("e-"); // you might chek if ( part == nullptr) !!! fGun->SetParticleDefinition(part); fGun->SetParticleEnergy(30.0*CLHEP::MeV); fGun->SetParticleMomentumDirection( G4ThreeVector(1.0, 0.0, 0.0) ); UpdatePosition(); } void YourPrimaryGeneratorAction::UpdatePosition() { fGun->SetParticlePosition( G4ThreeVector( fDetector->GetGunXPosition(), 0.0, 0.0 ) ); }