Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
B5::PrimaryGeneratorAction Class Reference

Primary generator. More...

#include <Doxymodules_basic.h>

Inheritance diagram for B5::PrimaryGeneratorAction:
G4VUserPrimaryGeneratorAction

Public Member Functions

 PrimaryGeneratorAction ()
 
 ~PrimaryGeneratorAction () override
 
void GeneratePrimaries (G4Event *) override
 
void SetMomentum (G4double val)
 
G4double GetMomentum () const
 
void SetSigmaMomentum (G4double val)
 
G4double GetSigmaMomentum () const
 
void SetSigmaAngle (G4double val)
 
G4double GetSigmaAngle () const
 
void SetRandomize (G4bool val)
 
G4bool GetRandomize () const
 

Private Member Functions

void DefineCommands ()
 

Private Attributes

G4ParticleGunfParticleGun = nullptr
 
G4GenericMessengerfMessenger = nullptr
 
G4ParticleDefinitionfPositron = nullptr
 
G4ParticleDefinitionfMuon = nullptr
 
G4ParticleDefinitionfPion = nullptr
 
G4ParticleDefinitionfKaon = nullptr
 
G4ParticleDefinitionfProton = nullptr
 
G4double fMomentum = 1000. * CLHEP::MeV
 
G4double fSigmaMomentum = 50. * CLHEP::MeV
 
G4double fSigmaAngle = 2. * CLHEP::deg
 
G4bool fRandomizePrimary = true
 

Detailed Description

Primary generator.

A single particle is generated. User can select

Definition at line 197 of file Doxymodules_basic.h.

Constructor & Destructor Documentation

◆ PrimaryGeneratorAction()

B5::PrimaryGeneratorAction::PrimaryGeneratorAction ( )

Definition at line 45 of file PrimaryGeneratorAction.cc.

54{
55 G4int nofParticles = 1;
56 fParticleGun = new G4ParticleGun(nofParticles);
57
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");
64
65 // default particle kinematics
66 fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,-8.*m));
67 fParticleGun->SetParticleDefinition(fPositron);
68
69 // define commands for this class
71}

◆ ~PrimaryGeneratorAction()

B5::PrimaryGeneratorAction::~PrimaryGeneratorAction ( )
override

Definition at line 75 of file PrimaryGeneratorAction.cc.

76{
77 delete fParticleGun;
78 delete fMessenger;
79}

Member Function Documentation

◆ GeneratePrimaries()

void B5::PrimaryGeneratorAction::GeneratePrimaries ( G4Event event)
override

Definition at line 83 of file PrimaryGeneratorAction.cc.

84{
85 G4ParticleDefinition* particle;
87 auto i = (int)(5. * G4UniformRand());
88 switch(i) {
89 case 0:
90 particle = fPositron;
91 break;
92 case 1:
93 particle = fMuon;
94 break;
95 case 2:
96 particle = fPion;
97 break;
98 case 3:
99 particle = fKaon;
100 break;
101 default:
102 particle = fProton;
103 break;
104 }
105 fParticleGun->SetParticleDefinition(particle);
106 }
107 else {
108 particle = fParticleGun->GetParticleDefinition();
109 }
110
111 auto pp = fMomentum + (G4UniformRand()-0.5)*fSigmaMomentum;
112 auto mass = particle->GetPDGMass();
113 auto ekin = std::sqrt(pp*pp+mass*mass)-mass;
114 fParticleGun->SetParticleEnergy(ekin);
115
116 auto angle = (G4UniformRand()-0.5)*fSigmaAngle;
117 fParticleGun->SetParticleMomentumDirection(
118 G4ThreeVector(std::sin(angle),0.,std::cos(angle)));
119
120 fParticleGun->GeneratePrimaryVertex(event);
121}

◆ SetMomentum()

void B5::PrimaryGeneratorAction::SetMomentum ( G4double  val)
inline

Definition at line 63 of file PrimaryGeneratorAction.hh.

63{ fMomentum = val; }

◆ GetMomentum()

G4double B5::PrimaryGeneratorAction::GetMomentum ( ) const
inline

Definition at line 64 of file PrimaryGeneratorAction.hh.

64{ return fMomentum; }

◆ SetSigmaMomentum()

void B5::PrimaryGeneratorAction::SetSigmaMomentum ( G4double  val)
inline

Definition at line 66 of file PrimaryGeneratorAction.hh.

66{ fSigmaMomentum = val; }

◆ GetSigmaMomentum()

G4double B5::PrimaryGeneratorAction::GetSigmaMomentum ( ) const
inline

Definition at line 67 of file PrimaryGeneratorAction.hh.

67{ return fSigmaMomentum; }

◆ SetSigmaAngle()

void B5::PrimaryGeneratorAction::SetSigmaAngle ( G4double  val)
inline

Definition at line 69 of file PrimaryGeneratorAction.hh.

69{ fSigmaAngle = val; }

◆ GetSigmaAngle()

G4double B5::PrimaryGeneratorAction::GetSigmaAngle ( ) const
inline

Definition at line 70 of file PrimaryGeneratorAction.hh.

70{ return fSigmaAngle; }

◆ SetRandomize()

void B5::PrimaryGeneratorAction::SetRandomize ( G4bool  val)
inline

Definition at line 72 of file PrimaryGeneratorAction.hh.

72{ fRandomizePrimary = val; }

◆ GetRandomize()

G4bool B5::PrimaryGeneratorAction::GetRandomize ( ) const
inline

Definition at line 73 of file PrimaryGeneratorAction.hh.

73{ return fRandomizePrimary; }

◆ DefineCommands()

void B5::PrimaryGeneratorAction::DefineCommands ( )
private

Definition at line 125 of file PrimaryGeneratorAction.cc.

126{
127 // Define /B5/generator command directory using generic messenger class
129 = new G4GenericMessenger(this,
130 "/B5/generator/",
131 "Primary generator control");
132
133 // momentum command
134 auto& momentumCmd
135 = fMessenger->DeclarePropertyWithUnit("momentum", "GeV", fMomentum,
136 "Mean momentum of primaries.");
137 momentumCmd.SetParameterName("p", true);
138 momentumCmd.SetRange("p>=0.");
139 momentumCmd.SetDefaultValue("1.");
140 // ok
141 //momentumCmd.SetParameterName("p", true);
142 //momentumCmd.SetRange("p>=0.");
143
144 // sigmaMomentum command
145 auto& sigmaMomentumCmd
146 = fMessenger->DeclarePropertyWithUnit("sigmaMomentum",
147 "MeV", fSigmaMomentum, "Sigma momentum of primaries.");
148 sigmaMomentumCmd.SetParameterName("sp", true);
149 sigmaMomentumCmd.SetRange("sp>=0.");
150 sigmaMomentumCmd.SetDefaultValue("50.");
151
152 // sigmaAngle command
153 auto& sigmaAngleCmd
154 = fMessenger->DeclarePropertyWithUnit("sigmaAngle", "deg", fSigmaAngle,
155 "Sigma angle divergence of primaries.");
156 sigmaAngleCmd.SetParameterName("t", true);
157 sigmaAngleCmd.SetRange("t>=0.");
158 sigmaAngleCmd.SetDefaultValue("2.");
159
160 // randomizePrimary command
161 auto& randomCmd
162 = fMessenger->DeclareProperty("randomizePrimary", fRandomizePrimary);
163 G4String guidance
164 = "Boolean flag for randomizing primary particle types.\n";
165 guidance
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");
171}

Member Data Documentation

◆ fParticleGun

G4ParticleGun* B5::PrimaryGeneratorAction::fParticleGun = nullptr
private

Definition at line 78 of file PrimaryGeneratorAction.hh.

◆ fMessenger

G4GenericMessenger* B5::PrimaryGeneratorAction::fMessenger = nullptr
private

Definition at line 79 of file PrimaryGeneratorAction.hh.

◆ fPositron

G4ParticleDefinition* B5::PrimaryGeneratorAction::fPositron = nullptr
private

Definition at line 80 of file PrimaryGeneratorAction.hh.

◆ fMuon

G4ParticleDefinition* B5::PrimaryGeneratorAction::fMuon = nullptr
private

Definition at line 81 of file PrimaryGeneratorAction.hh.

◆ fPion

G4ParticleDefinition* B5::PrimaryGeneratorAction::fPion = nullptr
private

Definition at line 82 of file PrimaryGeneratorAction.hh.

◆ fKaon

G4ParticleDefinition* B5::PrimaryGeneratorAction::fKaon = nullptr
private

Definition at line 83 of file PrimaryGeneratorAction.hh.

◆ fProton

G4ParticleDefinition* B5::PrimaryGeneratorAction::fProton = nullptr
private

Definition at line 84 of file PrimaryGeneratorAction.hh.

◆ fMomentum

G4double B5::PrimaryGeneratorAction::fMomentum = 1000. * CLHEP::MeV
private

Definition at line 85 of file PrimaryGeneratorAction.hh.

◆ fSigmaMomentum

G4double B5::PrimaryGeneratorAction::fSigmaMomentum = 50. * CLHEP::MeV
private

Definition at line 86 of file PrimaryGeneratorAction.hh.

◆ fSigmaAngle

G4double B5::PrimaryGeneratorAction::fSigmaAngle = 2. * CLHEP::deg
private

Definition at line 87 of file PrimaryGeneratorAction.hh.

◆ fRandomizePrimary

G4bool B5::PrimaryGeneratorAction::fRandomizePrimary = true
private

Definition at line 88 of file PrimaryGeneratorAction.hh.


The documentation for this class was generated from the following files:

Applications | User Support | Publications | Collaboration