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