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

#include <G4NeutronBetaDecayChannel.hh>

+ Inheritance diagram for G4NeutronBetaDecayChannel:

Public Member Functions

 G4NeutronBetaDecayChannel (const G4String &theParentName, G4double theBR)
 
virtual ~G4NeutronBetaDecayChannel ()
 
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

 G4NeutronBetaDecayChannel ()
 
 G4NeutronBetaDecayChannel (const G4NeutronBetaDecayChannel &)
 
G4NeutronBetaDecayChanneloperator= (const G4NeutronBetaDecayChannel &)
 
- 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 &)
 

Protected Attributes

const G4double aENuCorr = -0.102
 
- 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
 

Additional Inherited Members

- Static Protected Attributes inherited from G4VDecayChannel
static const G4String noName = " "
 

Detailed Description

Definition at line 42 of file G4NeutronBetaDecayChannel.hh.

Constructor & Destructor Documentation

◆ G4NeutronBetaDecayChannel() [1/3]

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

Definition at line 47 of file G4NeutronBetaDecayChannel.cc.

50 : G4VDecayChannel("Neutron Decay")
51{
52 // set names for daughter particles
53 if (theParentName == "neutron")
54 {
55 SetBR(theBR);
56 SetParent("neutron");
58 SetDaughter(0, "e-");
59 SetDaughter(1, "anti_nu_e");
60 SetDaughter(2, "proton");
61 }
62 else if (theParentName == "anti_neutron")
63 {
64 SetBR(theBR);
65 SetParent("anti_neutron");
67 SetDaughter(0, "e+");
68 SetDaughter(1, "nu_e");
69 SetDaughter(2, "anti_proton");
70 }
71 else
72 {
73#ifdef G4VERBOSE
74 if (GetVerboseLevel()>0)
75 {
76 G4cout << "G4NeutronBetaDecayChannel:: constructor :";
77 G4cout << " parent particle is not neutron but ";
78 G4cout << theParentName << G4endl;
79 }
80#endif
81 }
82}
#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)

◆ ~G4NeutronBetaDecayChannel()

G4NeutronBetaDecayChannel::~G4NeutronBetaDecayChannel ( )
virtual

Definition at line 84 of file G4NeutronBetaDecayChannel.cc.

85{
86}

◆ G4NeutronBetaDecayChannel() [2/3]

G4NeutronBetaDecayChannel::G4NeutronBetaDecayChannel ( )
protected

Definition at line 42 of file G4NeutronBetaDecayChannel.cc.

44{
45}

◆ G4NeutronBetaDecayChannel() [3/3]

G4NeutronBetaDecayChannel::G4NeutronBetaDecayChannel ( const G4NeutronBetaDecayChannel right)
protected

Definition at line 88 of file G4NeutronBetaDecayChannel.cc.

90 : G4VDecayChannel(right)
91{
92}

Member Function Documentation

◆ DecayIt()

G4DecayProducts * G4NeutronBetaDecayChannel::DecayIt ( G4double  )
virtual

Implements G4VDecayChannel.

Definition at line 125 of file G4NeutronBetaDecayChannel.cc.

126{
127 // This class describes free neutron beta decay kinematics.
128 // This version neglects neutron/electron polarization
129 // without Coulomb effect
130
131#ifdef G4VERBOSE
132 if (GetVerboseLevel()>1) G4cout << "G4NeutronBetaDecayChannel::DecayIt ";
133#endif
134
137
138 // parent mass
139 G4double parentmass = G4MT_parent->GetPDGMass();
140
141 // daughters'mass
142 G4double daughtermass[3];
143 G4double sumofdaughtermass = 0.0;
144 for (G4int index=0; index<3; ++index)
145 {
146 daughtermass[index] = G4MT_daughters[index]->GetPDGMass();
147 sumofdaughtermass += daughtermass[index];
148 }
149 G4double xmax = parentmass-sumofdaughtermass;
150
151 // create parent G4DynamicParticle at rest
152 G4ThreeVector dummy;
153 G4DynamicParticle* parentparticle
154 = new G4DynamicParticle( G4MT_parent, dummy, 0.0);
155
156 // create G4Decayproducts
157 G4DecayProducts *products = new G4DecayProducts(*parentparticle);
158 delete parentparticle;
159
160 // calculate daughter momentum
161 G4double daughtermomentum[3];
162
163 // calcurate electron energy
164 G4double x; // Ee
165 G4double p; // Pe
166 G4double dm = daughtermass[0]; //Me
167 G4double w; // cosine of e-nu angle
168 G4double r;
169 G4double r0;
170 const std::size_t MAX_LOOP=10000;
171 for (std::size_t loop_counter=0; loop_counter<MAX_LOOP; ++loop_counter)
172 {
173 x = xmax*G4UniformRand();
174 p = std::sqrt(x*(x+2.0*dm));
175 w = 1.0-2.0*G4UniformRand();
176 r = p*(x+dm)*(xmax-x)*(xmax-x)*(1.0+aENuCorr*p/(x+dm)*w);
177 r0 = G4UniformRand()*(xmax+dm)*(xmax+dm)*xmax*xmax*(1.0+aENuCorr);
178 if (r > r0) break;
179 }
180
181 // create daughter G4DynamicParticle
182 // rotation materix to lab frame
183 //
184 G4double costheta = 2.*G4UniformRand()-1.0;
185 G4double theta = std::acos(costheta)*rad;
186 G4double phi = twopi*G4UniformRand()*rad;
188 rm.rotateY(theta);
189 rm.rotateZ(phi);
190
191 // daughter 0 (electron) in Z direction
192 daughtermomentum[0] = p;
193 G4ThreeVector direction0(0.0, 0.0, 1.0);
194 direction0 = rm * direction0;
195 G4DynamicParticle* daughterparticle0
196 = new G4DynamicParticle(G4MT_daughters[0], direction0*daughtermomentum[0]);
197 products->PushProducts(daughterparticle0);
198
199 // daughter 1 (nutrino) in XZ plane
200 G4double eNu; // Enu
201 eNu = (parentmass-daughtermass[2])
202 * (parentmass+daughtermass[2])+(dm*dm)-2.*parentmass*(x+dm);
203 eNu /= 2.*(parentmass+p*w-(x+dm));
204 G4double cosn = w;
205 G4double phin = twopi*G4UniformRand()*rad;
206 G4double sinn = std::sqrt((1.0-cosn)*(1.0+cosn));
207
208 G4ThreeVector direction1(sinn*std::cos(phin), sinn*std::sin(phin), cosn);
209 direction1 = rm * direction1;
210 G4DynamicParticle* daughterparticle1
211 = new G4DynamicParticle( G4MT_daughters[1], direction1*eNu);
212 products->PushProducts(daughterparticle1);
213
214 // daughter 2 (proton) at REST
215 G4double eP; // Eproton
216 eP = parentmass-eNu-(x+dm)-daughtermass[2];
217 G4double pPx = -eNu*sinn;
218 G4double pPz = -p-eNu*cosn;
219 G4double pP = std::sqrt(eP*(eP+2.*daughtermass[2]));
220 G4ThreeVector direction2(pPx/pP*std::cos(phin),
221 pPx/pP*std::sin(phin), pPz/pP);
222 direction2 = rm * direction2;
223 G4DynamicParticle* daughterparticle2
224 = new G4DynamicParticle( G4MT_daughters[2], direction2*pP);
225 products->PushProducts(daughterparticle2);
226
227 // output message
228#ifdef G4VERBOSE
229 if (GetVerboseLevel()>1)
230 {
231 G4cout << "G4NeutronBetaDecayChannel::DecayIt ";
232 G4cout << " create decay products in rest frame " <<G4endl;
233 products->DumpInfo();
234 }
235#endif
236 return products;
237}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
#define G4UniformRand()
Definition: Randomize.hh:52
HepRotation & rotateZ(double delta)
Definition: Rotation.cc:87
HepRotation & rotateY(double delta)
Definition: Rotation.cc:74
void DumpInfo() const
G4int PushProducts(G4DynamicParticle *aParticle)
G4ParticleDefinition ** G4MT_daughters
G4ParticleDefinition * G4MT_parent
void CheckAndFillDaughters()

◆ operator=()

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

Definition at line 94 of file G4NeutronBetaDecayChannel.cc.

96{
97 if (this != &right)
98 {
101 rbranch = right.rbranch;
102
103 // copy parent name
104 delete parent_name;
105 parent_name = new G4String(*right.parent_name);
106
107 // clear daughters_name array
109
110 // recreate array
112 if ( numberOfDaughters >0 )
113 {
115 // copy daughters name
116 for (G4int index=0; index<numberOfDaughters; ++index)
117 {
118 daughters_name[index] = new G4String(*right.daughters_name[index]);
119 }
120 }
121 }
122 return *this;
123}
G4String * parent_name
G4String ** daughters_name
G4String kinematics_name

Member Data Documentation

◆ aENuCorr

const G4double G4NeutronBetaDecayChannel::aENuCorr = -0.102
protected

Definition at line 60 of file G4NeutronBetaDecayChannel.hh.

Referenced by DecayIt().


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