File indexing completed on 2025-02-23 09:22:48
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
0030 #include "PrimaryGeneratorAction.hh"
0031
0032 #include "G4Box.hh"
0033 #include "G4LogicalVolume.hh"
0034 #include "G4LogicalVolumeStore.hh"
0035 #include "G4ParticleDefinition.hh"
0036 #include "G4ParticleGun.hh"
0037 #include "G4ParticleTable.hh"
0038 #include "G4RunManager.hh"
0039 #include "G4SystemOfUnits.hh"
0040 #include "Randomize.hh"
0041
0042 namespace VtkVis
0043 {
0044
0045
0046
0047 PrimaryGeneratorAction::PrimaryGeneratorAction()
0048 {
0049 G4int n_particle = 1;
0050 fParticleGun = new G4ParticleGun(n_particle);
0051
0052
0053 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
0054 G4String particleName;
0055 G4ParticleDefinition* particle = particleTable->FindParticle(particleName = "e-");
0056 fParticleGun->SetParticleDefinition(particle);
0057 fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.));
0058 fParticleGun->SetParticleEnergy(16.5 * GeV);
0059 }
0060
0061
0062
0063 PrimaryGeneratorAction::~PrimaryGeneratorAction()
0064 {
0065 delete fParticleGun;
0066 }
0067
0068
0069
0070 void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
0071 {
0072
0073
0074
0075
0076
0077
0078
0079 G4double envSizeXY = 0;
0080 G4double envSizeZ = 0;
0081
0082 if (!fEnvelopeBox) {
0083 G4LogicalVolume* envLV = G4LogicalVolumeStore::GetInstance()->GetVolume("Envelope");
0084 if (envLV) fEnvelopeBox = dynamic_cast<G4Box*>(envLV->GetSolid());
0085 }
0086
0087 if (fEnvelopeBox) {
0088 envSizeXY = fEnvelopeBox->GetXHalfLength() * 2.;
0089 envSizeZ = fEnvelopeBox->GetZHalfLength() * 2.;
0090 }
0091 else {
0092 G4ExceptionDescription msg;
0093 msg << "Envelope volume of box shape not found.\n";
0094 msg << "Perhaps you have changed geometry.\n";
0095 msg << "The gun will be place at the center.";
0096 G4Exception("PrimaryGeneratorAction::GeneratePrimaries()", "MyCode0002", JustWarning, msg);
0097 }
0098
0099 G4double size = 0.8;
0100 G4double x0 = size * envSizeXY * (G4UniformRand() - 0.5);
0101 G4double y0 = size * envSizeXY * (G4UniformRand() - 0.5);
0102 G4double z0 = 0.5 * envSizeZ;
0103
0104 fParticleGun->SetParticlePosition(G4ThreeVector(0, 0, -z0));
0105
0106 fParticleGun->GeneratePrimaryVertex(anEvent);
0107 }
0108
0109
0110
0111 }