#include "PrimaryGeneratorAction.hh" #include "G4GeneralParticleSource.hh" #include "G4ParticleTable.hh" MyPrimaryGenerator::MyPrimaryGenerator() { // fParticleGun = new G4ParticleGun(1); gun = new G4GeneralParticleSource(); } MyPrimaryGenerator::~MyPrimaryGenerator() { delete gun; } /* void MyPrimaryGenerator::GeneratePrimaries(G4Event* anEvent) { G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); // Define gamma particle G4String gammaName = "gamma"; G4ParticleDefinition* gammaParticle = particleTable->FindParticle(gammaName); // Create gamma particles with specific energies G4double gammaEnergy1 = 0.662 * MeV; // First gamma peak of Cs-137 //G4double gammaEnergy2 = 1.173 * MeV; // Second gamma peak of Cs-137 // Emit gamma particles with these energies G4ThreeVector gammaPos(0., 0., 0.); G4ThreeVector gammaMomentumDirection(0., 0., 1.); // Customize direction // Emit the first gamma particle fParticleGun->SetParticlePosition(gammaPos); fParticleGun->SetParticleMomentumDirection(gammaMomentumDirection); fParticleGun->SetParticleEnergy(gammaEnergy1); fParticleGun->SetParticleDefinition(gammaParticle); fParticleGun->GeneratePrimaryVertex(anEvent); // Emit the second gamma particle fParticleGun->SetParticleMomentumDirection(gammaMomentumDirection); fParticleGun->SetParticleEnergy(gammaEnergy2); fParticleGun->SetParticleDefinition(gammaParticle); fParticleGun->GeneratePrimaryVertex(anEvent); G4String neutronName = "neutron"; G4ParticleDefinition* neutronParticle = particleTable->FindParticle(neutronName); G4double neutronEnergy = 1.0 * MeV; // Emit neutron particle G4ThreeVector neutronPos(0., 0., 0.); G4ThreeVector neutronMomentumDirection(0., 0., 1.); // Customize direction //G4double neutronEnergy = ComputeNeutronEnergy(); // Implement your energy calculation fParticleGun->SetParticlePosition(neutronPos); fParticleGun->SetParticleMomentumDirection(neutronMomentumDirection); fParticleGun->SetParticleEnergy(neutronEnergy); fParticleGun->SetParticleDefinition(neutronParticle); fParticleGun->GeneratePrimaryVertex(anEvent); } */ void MyPrimaryGenerator::GeneratePrimaries(G4Event *anEvent) { /* G4ParticleTable *particleTable = G4ParticleTable::GetParticleTable(); G4String particleName="gamma"; G4ParticleDefinition *particle = particleTable->FindParticle("gamma"); G4ThreeVector pos(0.,0.,0.); G4ThreeVector mom(0.,0.,1.); fParticleGun->SetParticlePosition(pos); fParticleGun->SetParticleMomentumDirection(mom); fParticleGun->SetParticleMomentum(50.*MeV); fParticleGun->SetParticleDefinition(particle); fParticleGun->GeneratePrimaryVertex(anEvent);*/ gun -> GeneratePrimaryVertex(anEvent); } /* G4String particleName = "neutron"; // Change to "neutron" for neutron particles G4ParticleDefinition *particle = particleTable->FindParticle("neutron"); G4ThreeVector pos(0., 0., 0.); // Initial position G4ThreeVector mom(0., 0., 1.); // Initial momentum direction fParticleGun->SetParticlePosition(pos); fParticleGun->SetParticleMomentumDirection(mom); // Set the neutron energy (you can change the energy value as needed) G4double neutronEnergy = 1.0 * MeV; // Example energy of 1 MeV for neutrons fParticleGun->SetParticleEnergy(neutronEnergy); fParticleGun->SetParticleDefinition(particle); // Generate the primary vertex for the neutron fParticleGun->GeneratePrimaryVertex(anEvent); } */