File indexing completed on 2026-09-10 08:29:34
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 "PrimaryGeneratorAction.hh"
0030
0031 #include "DetectorConstruction.hh"
0032 #include "HistoManager.hh"
0033
0034 #include "G4Event.hh"
0035 #include "G4ParticleDefinition.hh"
0036 #include "G4ParticleGun.hh"
0037 #include "G4ParticleTable.hh"
0038 #include "G4SystemOfUnits.hh"
0039 #include "Randomize.hh"
0040
0041
0042
0043 PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det)
0044 : fParticleGun(0), fDetector(det)
0045 {
0046 fParticleGun = new G4ParticleGun(1);
0047 G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle("e-");
0048 fParticleGun->SetParticleDefinition(particle);
0049 fParticleGun->SetParticleEnergy(1 * MeV);
0050 fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.));
0051 }
0052
0053
0054
0055 PrimaryGeneratorAction::~PrimaryGeneratorAction()
0056 {
0057 delete fParticleGun;
0058 }
0059
0060
0061
0062 void PrimaryGeneratorAction::RunInitialisation(G4double effWall, G4double massR)
0063 {
0064
0065
0066 fCavityThickness = fDetector->GetCavityThickness();
0067 fEffWallThick = effWall;
0068 fMassWallRatio = massR;
0069
0070 fNwall = fNcavity = 0;
0071 }
0072
0073
0074
0075 void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
0076 {
0077
0078
0079 G4double Zvertex;
0080 if (G4UniformRand() < fMassWallRatio) {
0081 Zvertex = 0.5 * fCavityThickness + G4UniformRand() * fEffWallThick;
0082 if (G4UniformRand() < 0.5) Zvertex = -Zvertex;
0083 fNwall++;
0084 }
0085 else {
0086 Zvertex = (G4UniformRand() - 0.5) * fCavityThickness;
0087 fNcavity++;
0088 }
0089
0090 fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., Zvertex));
0091 fParticleGun->GeneratePrimaryVertex(anEvent);
0092
0093
0094
0095 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
0096 analysisManager->FillH1(1, Zvertex);
0097 analysisManager->FillH1(2, fParticleGun->GetParticleEnergy());
0098 }
0099
0100