55 G4int nofParticles = 1;
58 auto particleTable = G4ParticleTable::GetParticleTable();
59 fPositron = particleTable->FindParticle(
"e+");
60 fMuon = particleTable->FindParticle(
"mu+");
61 fPion = particleTable->FindParticle(
"pi+");
62 fKaon = particleTable->FindParticle(
"kaon+");
63 fProton = particleTable->FindParticle(
"proton");
66 fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,-8.*m));
87 auto i = (int)(5. * G4UniformRand());
112 auto mass = particle->GetPDGMass();
113 auto ekin = std::sqrt(pp*pp+mass*mass)-mass;
118 G4ThreeVector(std::sin(angle),0.,std::cos(angle)));
131 "Primary generator control");
136 "Mean momentum of primaries.");
137 momentumCmd.SetParameterName(
"p",
true);
138 momentumCmd.SetRange(
"p>=0.");
139 momentumCmd.SetDefaultValue(
"1.");
145 auto& sigmaMomentumCmd
146 =
fMessenger->DeclarePropertyWithUnit(
"sigmaMomentum",
148 sigmaMomentumCmd.SetParameterName(
"sp",
true);
149 sigmaMomentumCmd.SetRange(
"sp>=0.");
150 sigmaMomentumCmd.SetDefaultValue(
"50.");
155 "Sigma angle divergence of primaries.");
156 sigmaAngleCmd.SetParameterName(
"t",
true);
157 sigmaAngleCmd.SetRange(
"t>=0.");
158 sigmaAngleCmd.SetDefaultValue(
"2.");
164 =
"Boolean flag for randomizing primary particle types.\n";
166 +=
"In case this flag is false, you can select the primary particle\n";
167 guidance +=
" with /gun/particle command.";
168 randomCmd.SetGuidance(guidance);
169 randomCmd.SetParameterName(
"flg",
true);
170 randomCmd.SetDefaultValue(
"true");