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

#include <G4PionRadiativeDecayChannel.hh>

+ Inheritance diagram for G4PionRadiativeDecayChannel:

Public Member Functions

 G4PionRadiativeDecayChannel (const G4String &theParentName, G4double theBR)
 
virtual ~G4PionRadiativeDecayChannel ()
 
virtual G4DecayProductsDecayIt (G4double)
 
- Public Member Functions inherited from G4VDecayChannel
 G4VDecayChannel (const G4String &aName, G4int Verbose=1)
 
 G4VDecayChannel (const G4String &aName, const G4String &theParentName, G4double theBR, G4int theNumberOfDaughters, const G4String &theDaughterName1, const G4String &theDaughterName2="", const G4String &theDaughterName3="", const G4String &theDaughterName4="", const G4String &theDaughterName5="")
 
virtual ~G4VDecayChannel ()
 
G4bool operator== (const G4VDecayChannel &r) const
 
G4bool operator!= (const G4VDecayChannel &r) const
 
G4bool operator< (const G4VDecayChannel &right) const
 
virtual G4DecayProductsDecayIt (G4double parentMass=-1.0)=0
 
const G4StringGetKinematicsName () const
 
G4double GetBR () const
 
G4int GetNumberOfDaughters () const
 
G4ParticleDefinitionGetParent ()
 
G4ParticleDefinitionGetDaughter (G4int anIndex)
 
G4int GetAngularMomentum ()
 
const G4StringGetParentName () const
 
const G4StringGetDaughterName (G4int anIndex) const
 
G4double GetParentMass () const
 
G4double GetDaughterMass (G4int anIndex) const
 
void SetParent (const G4ParticleDefinition *particle_type)
 
void SetParent (const G4String &particle_name)
 
void SetBR (G4double value)
 
void SetNumberOfDaughters (G4int value)
 
void SetDaughter (G4int anIndex, const G4ParticleDefinition *particle_type)
 
void SetDaughter (G4int anIndex, const G4String &particle_name)
 
void SetVerboseLevel (G4int value)
 
G4int GetVerboseLevel () const
 
void DumpInfo ()
 
G4double GetRangeMass () const
 
void SetRangeMass (G4double val)
 
virtual G4bool IsOKWithParentMass (G4double parentMass)
 
void SetPolarization (const G4ThreeVector &)
 
const G4ThreeVectorGetPolarization () const
 

Protected Member Functions

 G4PionRadiativeDecayChannel ()
 
 G4PionRadiativeDecayChannel (const G4PionRadiativeDecayChannel &)
 
G4PionRadiativeDecayChanneloperator= (const G4PionRadiativeDecayChannel &)
 
- Protected Member Functions inherited from G4VDecayChannel
void ClearDaughtersName ()
 
void CheckAndFillDaughters ()
 
void CheckAndFillParent ()
 
G4double DynamicalMass (G4double massPDG, G4double width, G4double maxDev=1.0) const
 
 G4VDecayChannel ()
 
 G4VDecayChannel (const G4VDecayChannel &)
 
G4VDecayChanneloperator= (const G4VDecayChannel &)
 

Additional Inherited Members

- Protected Attributes inherited from G4VDecayChannel
G4String kinematics_name = ""
 
G4double rbranch = 0.0
 
G4Stringparent_name = nullptr
 
G4String ** daughters_name = nullptr
 
G4double rangeMass = 2.5
 
G4ThreeVector parent_polarization
 
G4ParticleTableparticletable = nullptr
 
G4ParticleDefinitionG4MT_parent = nullptr
 
G4ParticleDefinition ** G4MT_daughters = nullptr
 
G4double G4MT_parent_mass = 0.0
 
G4doubleG4MT_daughters_mass = nullptr
 
G4doubleG4MT_daughters_width = nullptr
 
G4Mutex daughtersMutex
 
G4Mutex parentMutex
 
G4int numberOfDaughters = 0
 
G4int verboseLevel = 1
 
- Static Protected Attributes inherited from G4VDecayChannel
static const G4String noName = " "
 

Detailed Description

Definition at line 46 of file G4PionRadiativeDecayChannel.hh.

Constructor & Destructor Documentation

◆ G4PionRadiativeDecayChannel() [1/3]

G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel ( const G4String theParentName,
G4double  theBR 
)

Definition at line 75 of file G4PionRadiativeDecayChannel.cc.

78 : G4VDecayChannel("Radiative Pion Decay", 1)
79{
80 // set names for daughter particles
81 if (theParentName == "pi+")
82 {
83 SetBR(theBR);
84 SetParent("pi+");
86 SetDaughter(0, "e+");
87 SetDaughter(1, "gamma");
88 SetDaughter(2, "nu_e");
89 }
90 else if (theParentName == "pi-")
91 {
92 SetBR(theBR);
93 SetParent("pi-");
95 SetDaughter(0, "e-");
96 SetDaughter(1, "gamma");
97 SetDaughter(2, "anti_nu_e");
98 }
99 else
100 {
101#ifdef G4VERBOSE
102 if (GetVerboseLevel()>0)
103 {
104 G4cout << "G4RadiativePionDecayChannel::G4PionRadiativeDecayChannel()"
105 << G4endl;
106 G4cout << "Parent particle is not charged pion: ";
107 G4cout << theParentName << G4endl;
108 }
109#endif
110 }
111}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void SetBR(G4double value)
G4int GetVerboseLevel() const
void SetNumberOfDaughters(G4int value)
void SetDaughter(G4int anIndex, const G4ParticleDefinition *particle_type)
void SetParent(const G4ParticleDefinition *particle_type)

◆ ~G4PionRadiativeDecayChannel()

G4PionRadiativeDecayChannel::~G4PionRadiativeDecayChannel ( )
virtual

Definition at line 114 of file G4PionRadiativeDecayChannel.cc.

115{
116}

◆ G4PionRadiativeDecayChannel() [2/3]

G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel ( )
protected

Definition at line 69 of file G4PionRadiativeDecayChannel.cc.

71{
72}

◆ G4PionRadiativeDecayChannel() [3/3]

G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel ( const G4PionRadiativeDecayChannel right)
protected

Definition at line 119 of file G4PionRadiativeDecayChannel.cc.

121 : G4VDecayChannel(right)
122{
123}

Member Function Documentation

◆ DecayIt()

G4DecayProducts * G4PionRadiativeDecayChannel::DecayIt ( G4double  )
virtual

Implements G4VDecayChannel.

Definition at line 157 of file G4PionRadiativeDecayChannel.cc.

158{
159
160#ifdef G4VERBOSE
161 if (GetVerboseLevel()>1)
162 G4cout << "G4PionRadiativeDecayChannel::DecayIt ";
163#endif
164
167
168 // parent mass
169 G4double parentmass = G4MT_parent->GetPDGMass();
170
171 G4double EMPI = parentmass;
172
173 // daughters'mass
174 const G4int N_DAUGHTER=3;
175 G4double daughtermass[N_DAUGHTER];
176 //G4double sumofdaughtermass = 0.0;
177 for (G4int index=0; index<N_DAUGHTER; ++index)
178 {
179 daughtermass[index] = G4MT_daughters[index]->GetPDGMass();
180 //sumofdaughtermass += daughtermass[index];
181 }
182
183 G4double EMASS = daughtermass[0];
184
185 // create parent G4DynamicParticle at rest
186 G4ThreeVector dummy;
187 G4DynamicParticle* parentparticle
188 = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
189 // create G4Decayproducts
190 G4DecayProducts *products = new G4DecayProducts(*parentparticle);
191 delete parentparticle;
192
193 G4double x, y;
194
195 const std::size_t MAX_LOOP=1000;
196
197 for (std::size_t loop_counter1=0; loop_counter1<MAX_LOOP; ++loop_counter1)
198 {
199 for (std::size_t loop_counter2=0; loop_counter2<MAX_LOOP; ++loop_counter2)
200 {
201 x = xl + G4UniformRand()*(xu-xl);
202 y = yl + G4UniformRand()*(yu-yl);
203 if (x+y > 1.) break;
204 }
205 G4double d2w = D2W(x,y);
206 if (d2w > G4UniformRand()*d2wmax) break;
207 }
208
209 // Calculate the angle between positron and photon (cosine)
210 //
211 G4double cthetaGE = (y*(x-2.)+2.*(1.-x+beta*beta)) /
212 (x*std::sqrt(y*y-4.*beta*beta));
213
214 G4double G = x * EMPI/2.;
215 G4double E = y * EMPI/2.;
216
217 if (E < EMASS) E = EMASS;
218
219 // calculate daughter momentum
220 G4double daughtermomentum[2];
221
222 daughtermomentum[0] = std::sqrt(E*E - EMASS*EMASS);
223
224 G4double cthetaE = 2.*G4UniformRand()-1.;
225 G4double sthetaE = std::sqrt(1.-cthetaE*cthetaE);
226
227 G4double phiE = twopi*G4UniformRand()*rad;
228 G4double cphiE = std::cos(phiE);
229 G4double sphiE = std::sin(phiE);
230
231 // Coordinates of the decay positron
232 //
233 G4double px = sthetaE*cphiE;
234 G4double py = sthetaE*sphiE;
235 G4double pz = cthetaE;
236
237 G4ThreeVector direction0(px,py,pz);
238
239 G4DynamicParticle * daughterparticle0
240 = new G4DynamicParticle(G4MT_daughters[0], daughtermomentum[0]*direction0);
241
242 products->PushProducts(daughterparticle0);
243
244 daughtermomentum[1] = G;
245
246 G4double sthetaGE = std::sqrt(1.-cthetaGE*cthetaGE);
247
248 G4double phiGE = twopi*G4UniformRand()*rad;
249 G4double cphiGE = std::cos(phiGE);
250 G4double sphiGE = std::sin(phiGE);
251
252 // Coordinates of the decay gamma with respect to the decay positron
253 //
254 px = sthetaGE*cphiGE;
255 py = sthetaGE*sphiGE;
256 pz = cthetaGE;
257
258 G4ThreeVector direction1(px,py,pz);
259
260 direction1.rotateUz(direction0);
261
262 G4DynamicParticle * daughterparticle1
263 = new G4DynamicParticle(G4MT_daughters[1], daughtermomentum[1]*direction1);
264
265 products->PushProducts(daughterparticle1);
266
267 // output message
268#ifdef G4VERBOSE
269 if (GetVerboseLevel()>1)
270 {
271 G4cout << "G4PionRadiativeDecayChannel::DecayIt() -";
272 G4cout << " create decay products in rest frame " << G4endl;
273 products->DumpInfo();
274 }
275#endif
276
277 return products;
278}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4UniformRand()
Definition: Randomize.hh:52
void DumpInfo() const
G4int PushProducts(G4DynamicParticle *aParticle)
G4ParticleDefinition ** G4MT_daughters
G4ParticleDefinition * G4MT_parent
void CheckAndFillDaughters()

◆ operator=()

G4PionRadiativeDecayChannel & G4PionRadiativeDecayChannel::operator= ( const G4PionRadiativeDecayChannel right)
protected

Definition at line 126 of file G4PionRadiativeDecayChannel.cc.

127{
128 if (this != &right)
129 {
132 rbranch = right.rbranch;
133
134 // copy parent name
135 parent_name = new G4String(*right.parent_name);
136
137 // clear daughters_name array
139
140 // recreate array
142 if ( numberOfDaughters >0 )
143 {
144 if (daughters_name != nullptr) ClearDaughtersName();
146 //copy daughters name
147 for (G4int index=0; index<numberOfDaughters; ++index)
148 {
149 daughters_name[index] = new G4String(*right.daughters_name[index]);
150 }
151 }
152 }
153 return *this;
154}
G4String * parent_name
G4String ** daughters_name
G4String kinematics_name

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