126{
127
128
129
130
131#ifdef G4VERBOSE
133#endif
134
137
138
140
141
144 for (
G4int index=0; index<3; ++index)
145 {
147 sumofdaughtermass += daughtermass[index];
148 }
149 G4double xmax = parentmass-sumofdaughtermass;
150
151
155
156
158 delete parentparticle;
159
160
162
163
170 const std::size_t MAX_LOOP=10000;
171 for (std::size_t loop_counter=0; loop_counter<MAX_LOOP; ++loop_counter)
172 {
174 p = std::sqrt(x*(x+2.0*dm));
176 r = p*(x+dm)*(xmax-x)*(xmax-x)*(1.0+
aENuCorr*p/(x+dm)*w);
178 if (r > r0) break;
179 }
180
181
182
183
185 G4double theta = std::acos(costheta)*rad;
190
191
192 daughtermomentum[0] = p;
194 direction0 = rm * direction0;
198
199
201 eNu = (parentmass-daughtermass[2])
202 * (parentmass+daughtermass[2])+(dm*dm)-2.*parentmass*(x+dm);
203 eNu /= 2.*(parentmass+p*w-(x+dm));
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;
213
214
216 eP = parentmass-eNu-(x+dm)-daughtermass[2];
219 G4double pP = std::sqrt(eP*(eP+2.*daughtermass[2]));
221 pPx/pP*std::sin(phin), pPz/pP);
222 direction2 = rm * direction2;
226
227
228#ifdef G4VERBOSE
230 {
231 G4cout <<
"G4NeutronBetaDecayChannel::DecayIt ";
232 G4cout <<
" create decay products in rest frame " <<
G4endl;
234 }
235#endif
236 return products;
237}
HepRotation & rotateZ(double delta)
HepRotation & rotateY(double delta)
G4int PushProducts(G4DynamicParticle *aParticle)
G4double GetPDGMass() const
G4ParticleDefinition ** G4MT_daughters
void CheckAndFillParent()
G4ParticleDefinition * G4MT_parent
void CheckAndFillDaughters()