Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4HadLeadBias Class Reference

#include <G4HadLeadBias.hh>

+ Inheritance diagram for G4HadLeadBias:

Public Member Functions

virtual G4HadFinalStateBias (G4HadFinalState *result)
 
virtual ~G4HadLeadBias ()
 
- Public Member Functions inherited from G4VLeadingParticleBiasing
 G4VLeadingParticleBiasing ()
 
virtual ~G4VLeadingParticleBiasing ()
 
virtual G4HadFinalStateBias (G4HadFinalState *result)=0
 

Detailed Description

Definition at line 33 of file G4HadLeadBias.hh.

Constructor & Destructor Documentation

◆ ~G4HadLeadBias()

virtual G4HadLeadBias::~G4HadLeadBias ( )
inlinevirtual

Definition at line 37 of file G4HadLeadBias.hh.

37{};

Member Function Documentation

◆ Bias()

G4HadFinalState * G4HadLeadBias::Bias ( G4HadFinalState result)
virtual

Implements G4VLeadingParticleBiasing.

Definition at line 34 of file G4HadLeadBias.cc.

35 {
36 // G4cerr << "bias enter"<<G4endl;
37 G4int nMeson(0), nBaryon(0), npi0(0), ngamma(0), nLepton(0);
38 G4int i(0);
39 G4int maxE = -1;
40 G4double emax = 0;
41 if(result->GetStatusChange()==isAlive)
42 {
43 emax = result->GetEnergyChange();
44 }
45 //G4cout << "max energy "<<G4endl;
46 for(i=0;i<static_cast<G4int>(result->GetNumberOfSecondaries());i++)
47 {
48 if(result->GetSecondary(i)->GetParticle()->GetKineticEnergy()>emax)
49 {
50 maxE = i;
51 emax = result->GetSecondary(i)->GetParticle()->GetKineticEnergy();
52 }
53 }
54 //G4cout <<"loop1"<<G4endl;
55 for(i=0; i<static_cast<G4int>(result->GetNumberOfSecondaries()); i++)
56 {
57 const G4DynamicParticle* aSecTrack = result->GetSecondary(i)->GetParticle();
58 if(i==maxE)
59 {
60 }
61 else if(aSecTrack->GetDefinition()->GetBaryonNumber()!=0)
62 {
63 nBaryon++;
64 }
65 else if(aSecTrack->GetDefinition()->GetLeptonNumber()!=0)
66 {
67 nLepton++;
68 }
69 else if(aSecTrack->GetDefinition()==G4Gamma::Gamma())
70 {
71 ngamma++;
72 }
73 else if(aSecTrack->GetDefinition()==G4PionZero::PionZero())
74 {
75 npi0++;
76 }
77 else
78 {
79 nMeson++;
80 }
81 }
82 //G4cout << "BiasDebug 1 = "<<result->GetNumberOfSecondaries()<<" "
83 // <<nMeson<<" "<< nBaryon<<" "<< npi0<<" "<< ngamma<<" "<< nLepton<<G4endl;
84 G4double mesonWeight = nMeson;
85 G4double baryonWeight = nBaryon;
86 G4double gammaWeight = ngamma;
87 G4double npi0Weight = npi0;
88 G4double leptonWeight = nLepton;
89 G4int randomMeson = static_cast<G4int>((nMeson+1)*G4UniformRand());
90 G4int randomBaryon = static_cast<G4int>((nBaryon+1)*G4UniformRand());
91 G4int randomGamma = static_cast<G4int>((ngamma+1)*G4UniformRand());
92 G4int randomPi0 = static_cast<G4int>((npi0+1)*G4UniformRand());
93 G4int randomLepton = static_cast<G4int>((nLepton+1)*G4UniformRand());
94
95 std::vector<G4HadSecondary> buffer;
96 G4int cMeson(0), cBaryon(0), cpi0(0), cgamma(0), cLepton(0);
97 for(i=0; i<static_cast<G4int>(result->GetNumberOfSecondaries()); i++)
98 {
99 G4bool aCatch = false;
100 G4double weight = 1;
101 const G4HadSecondary* aSecTrack = result->GetSecondary(i);
102 G4ParticleDefinition* aSecDef = aSecTrack->GetParticle()->GetDefinition();
103 if(i==maxE)
104 {
105 aCatch = true;
106 weight = 1;
107 }
108 else if(aSecDef->GetBaryonNumber()!=0)
109 {
110 if(++cBaryon==randomBaryon)
111 {
112 aCatch = true;
113 weight = baryonWeight;
114 }
115 }
116 else if(aSecDef->GetLeptonNumber()!=0)
117 {
118 if(++cLepton==randomLepton)
119 {
120 aCatch = true;
121 weight = leptonWeight;
122 }
123 }
124 else if(aSecDef==G4Gamma::Gamma())
125 {
126 if(++cgamma==randomGamma)
127 {
128 aCatch = true;
129 weight = gammaWeight;
130 }
131 }
132 else if(aSecDef==G4PionZero::PionZero())
133 {
134 if(++cpi0==randomPi0)
135 {
136 aCatch = true;
137 weight = npi0Weight;
138 }
139 }
140 else
141 {
142 if(++cMeson==randomMeson)
143 {
144 aCatch = true;
145 weight = mesonWeight;
146 }
147 }
148 if(aCatch)
149 {
150 buffer.push_back(*aSecTrack);
151 buffer.back().SetWeight(aSecTrack->GetWeight()*weight);
152 }
153 else
154 {
155 delete aSecTrack;
156 }
157 }
158 result->ClearSecondaries();
159 // G4cerr << "pre"<<G4endl;
160 result->AddSecondaries(buffer);
161 // G4cerr << "bias exit"<<G4endl;
162
163 return result;
164 }
@ isAlive
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
#define G4UniformRand()
Definition: Randomize.hh:52
G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
static G4Gamma * Gamma()
Definition: G4Gamma.cc:85
G4double GetEnergyChange() const
G4HadFinalStateStatus GetStatusChange() const
void AddSecondaries(const std::vector< G4HadSecondary > &addSecs)
std::size_t GetNumberOfSecondaries() const
G4HadSecondary * GetSecondary(size_t i)
G4DynamicParticle * GetParticle()
G4double GetWeight() const
static G4PionZero * PionZero()
Definition: G4PionZero.cc:107

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