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

#include <G4NRESP71M03.hh>

Public Member Functions

 G4NRESP71M03 ()
 
 ~G4NRESP71M03 ()
 
void DKINMA (G4ReactionProduct *p1, G4ReactionProduct *p2, G4ReactionProduct *p3, G4ReactionProduct *p4, const G4double Q, const G4double costhcm3)
 
G4int ApplyMechanismI_NBeA2A (G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI)
 
G4int ApplyMechanismII_ACN2A (G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI)
 
G4int ApplyMechanismABE (G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds)
 

Detailed Description

Definition at line 36 of file G4NRESP71M03.hh.

Constructor & Destructor Documentation

◆ G4NRESP71M03()

G4NRESP71M03::G4NRESP71M03 ( )
inline

Definition at line 39 of file G4NRESP71M03.hh.

39{ ; };

◆ ~G4NRESP71M03()

G4NRESP71M03::~G4NRESP71M03 ( )
inline

Definition at line 40 of file G4NRESP71M03.hh.

40{ ; };

Member Function Documentation

◆ ApplyMechanismABE()

G4int G4NRESP71M03::ApplyMechanismABE ( G4ReactionProduct & neut,
G4ReactionProduct & carb,
G4ReactionProduct * theProds )

Definition at line 350 of file G4NRESP71M03.cc.

352{
353 G4double CosThetaCMAlpha = 0.; // Cosine of the angle of emission of the alpha particle (theta).
354
355 G4double Kn = neut.GetKineticEnergy(); // Neutron energy in the center of mass system.
356 if (Kn > 5.7 * MeV) {
357 // Sorting.
358 for (G4int i = 1; i < ndist; i++) {
359 if (BEN2[i] >= Kn / keV) {
360 // Ok. The neutron energy is between values i-1 and i of BEN2. Taking them.
361 G4double BE1 = BEN2[i - 1];
362 G4double BE2 = BEN2[i];
363
364 // Performing energy and angle interpolation.
365
366 G4double FRA =
368 * 49.99999999; // Sorting the bin of the cumulative probability FRA (Rho). There are 51
369 // values of Rho from 0 to 1 (0; 0.02; 0.04 ... 1).
370 G4double DJTETA =
371 FRA
372 - G4int(FRA); // Distance in bin units (DJTETA) from the low edge of the bin with Rho.
373 G4int JTETA =
374 G4int(FRA) + 1; // Getting the bin (JTETA) next to the bin with the value of Rho.
375
376 // Calculating the angle from the cumulative distribution at energy i.
377
378 G4double B11 = B2[i - 1][JTETA - 1];
379 G4double B12 = B2[i - 1][JTETA];
380
381 G4double TCM1 = B11 + (B12 - B11) * DJTETA; // Angle at energy i.
382
383 // Calculating the angle from the cumulative distribution at energy i-1.
384
385 G4double B21 = B2[i][JTETA - 1];
386 G4double B22 = B2[i][JTETA];
387
388 G4double TCM2 = B21 + (B22 - B21) * DJTETA; // Angle at energy i-1.
389
390 // Interpolating the angle between energy values i and i-1.
391 G4double TCM = (TCM1 + (TCM2 - TCM1) * (Kn / keV - BE1) / (BE2 - BE1)) * 1.E-4;
392 CosThetaCMAlpha = std::cos(TCM);
393
394 break;
395 }
396 }
397 }
398 else {
399 // Isotropic distribution in CM.
400 CosThetaCMAlpha = 1. - 2. * G4UniformRand();
401 }
402
403 // N+12C --> A+9BE
404 theProds[0].SetDefinition(G4Alpha::Alpha());
405 theProds[1].SetDefinition(G4IonTable::GetIonTable()->GetIon(4, 9, 0.));
406
407 DKINMA(&neut, &carb, &(theProds[0]), &(theProds[1]), -5.71 * MeV, CosThetaCMAlpha);
408
409 return 0;
410}
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
#define G4UniformRand()
Definition Randomize.hh:52
static G4Alpha * Alpha()
Definition G4Alpha.cc:83
static G4IonTable * GetIonTable()
void DKINMA(G4ReactionProduct *p1, G4ReactionProduct *p2, G4ReactionProduct *p3, G4ReactionProduct *p4, const G4double Q, const G4double costhcm3)
G4double GetKineticEnergy() const
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)

◆ ApplyMechanismI_NBeA2A()

G4int G4NRESP71M03::ApplyMechanismI_NBeA2A ( G4ReactionProduct & neut,
G4ReactionProduct & carb,
G4ReactionProduct * theProds,
const G4double QI )

Definition at line 291 of file G4NRESP71M03.cc.

293{
294 // N+12C --> A+9BE*
296
297 theProds[0].SetDefinition(G4Alpha::Alpha());
298
299 DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2. * G4UniformRand() - 1.);
300
301 // 9BE* --> N+8BE
302 G4ReactionProduct p1(p4);
303
304 theProds[1].SetDefinition(G4Neutron::Neutron());
305
306 DKINMA(&p1, nullptr, &(theProds[1]), &p4, -QI - 7.369, 2. * G4UniformRand() - 1.);
307
308 // 8BE --> 2*A
309 p1 = p4;
310
311 theProds[2].SetDefinition(G4Alpha::Alpha());
312 theProds[3].SetDefinition(G4Alpha::Alpha());
313
314 DKINMA(&p1, nullptr, &(theProds[2]), &(theProds[3]), 0.09538798439007223351,
315 2. * G4UniformRand() - 1.);
316
317 return 0;
318}
static G4Neutron * Neutron()
Definition G4Neutron.cc:101

◆ ApplyMechanismII_ACN2A()

G4int G4NRESP71M03::ApplyMechanismII_ACN2A ( G4ReactionProduct & neut,
G4ReactionProduct & carb,
G4ReactionProduct * theProds,
const G4double QI )

Definition at line 321 of file G4NRESP71M03.cc.

323{
324 // 12C(N,N')12C'
326
327 theProds[0].SetDefinition(G4Neutron::Neutron());
328
329 DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2. * G4UniformRand() - 1.);
330
331 // 12C' --> ALPHA+8BE'
332 G4ReactionProduct p1(p4);
333
334 theProds[1].SetDefinition(G4Alpha::Alpha());
335
336 DKINMA(&p1, nullptr, &(theProds[1]), &p4, -QI - 7.369, 2. * G4UniformRand() - 1.);
337
338 // 8BE --> 2*ALPHA
339 p1 = p4;
340
341 theProds[2].SetDefinition(G4Alpha::Alpha());
342 theProds[3].SetDefinition(G4Alpha::Alpha());
343
344 DKINMA(&p1, nullptr, &(theProds[2]), &(theProds[3]), 0.09538798439007223351,
345 2. * G4UniformRand() - 1.);
346
347 return 0;
348}

◆ DKINMA()

void G4NRESP71M03::DKINMA ( G4ReactionProduct * p1,
G4ReactionProduct * p2,
G4ReactionProduct * p3,
G4ReactionProduct * p4,
const G4double Q,
const G4double costhcm3 )

Definition at line 206 of file G4NRESP71M03.cc.

208{
210 G4double TotalEnergyCM;
211
212 if (p2 != nullptr) // If it is not a decay reaction...
213 {
214 // Calculating (total momentum, energy and mass) of the center of mass.
215 const G4ThreeVector TotalMomentumLAB = p1->GetMomentum() + p2->GetMomentum();
216 CM.SetMomentum(TotalMomentumLAB);
217
218 const G4double TotalEnergyLAB = p1->GetTotalEnergy() + p2->GetTotalEnergy();
219 CM.SetTotalEnergy(TotalEnergyLAB);
220
221 CM.SetMass(std::sqrt(TotalEnergyLAB * TotalEnergyLAB - TotalMomentumLAB * TotalMomentumLAB));
222
223 // Transforming primary particles from laboratory to center of mass system.
224 p1->Lorentz(*p1, CM);
225 p2->Lorentz(*p2, CM);
226
227 TotalEnergyCM = p1->GetTotalEnergy() + p2->GetTotalEnergy();
228
229 const G4double m4 =
230 (p1->GetMass() + p2->GetMass())
231 - (p3->GetMass()
232 + Q); // Mass of the residual nucleus in the excited state (not in the ground state).
233 p4->SetMass(m4);
234 }
235 else // If it is a decay reaction...
236 {
237 const G4ThreeVector TotalMomentumLAB = p1->GetMomentum();
238 CM.SetMomentum(TotalMomentumLAB);
239
240 const G4double TotalEnergyLAB = p1->GetTotalEnergy();
241 CM.SetTotalEnergy(TotalEnergyLAB);
242
243 CM.SetMass(std::sqrt(TotalEnergyLAB * TotalEnergyLAB - TotalMomentumLAB * TotalMomentumLAB));
244
245 // Transforming primary particles from laboratory to center of mass system (not really necessary
246 // in this case).
247 p1->Lorentz(*p1, CM);
248
249 const G4double m4 =
250 p1->GetMass()
251 - (p3->GetMass()
252 + Q); // Mass of the residual nucleus in the excited state (not in the ground state).
253 p4->SetMass(m4);
254
255 TotalEnergyCM = p1->GetTotalEnergy();
256 }
257
258 // Calculating momentum and total energy of the reaction products.
259
260 const G4ThreeVector p1unit = p1->GetMomentum().unit();
261
262 G4RotationMatrix rot(std::acos(p1unit * G4ThreeVector(0., 1., 0.)),
263 std::acos(p1unit * G4ThreeVector(0., 0., 1.)), 0.);
264 rot.inverse();
265
266 const G4double theta = std::acos(costhcm3);
267 const G4double phi = twopi * G4UniformRand();
268
269 const G4double Energy3CM =
270 (std::pow(TotalEnergyCM, 2.) + std::pow(p3->GetMass(), 2.) - std::pow(p4->GetMass(), 2.))
271 / (2. * TotalEnergyCM);
272 p3->SetTotalEnergy(Energy3CM);
273
274 const G4double Momentum3CM = std::sqrt(std::pow(Energy3CM, 2.) - std::pow(p3->GetMass(), 2.));
275 p3->SetMomentum(rot
276 * G4ThreeVector(Momentum3CM * std::sin(theta) * std::cos(phi),
277 Momentum3CM * std::sin(theta) * std::sin(phi),
278 Momentum3CM * costhcm3));
279
280 const G4double Energy4CM = TotalEnergyCM - Energy3CM;
281 p4->SetTotalEnergy(Energy4CM);
282
283 const G4double Momentum4CM = std::sqrt(std::pow(Energy4CM, 2.) - std::pow(p4->GetMass(), 2.));
284 p4->SetMomentum(-Momentum4CM * p3->GetMomentum().unit());
285
286 // Transforming reaction products from center of mass to laboratory system.
287 p3->Lorentz(*p3, -1. * CM);
288 p4->Lorentz(*p4, -1. * CM);
289}
CLHEP::Hep3Vector G4ThreeVector
Hep3Vector unit() const
void SetMomentum(const G4double x, const G4double y, const G4double z)
void SetTotalEnergy(const G4double en)
G4double GetTotalEnergy() const
G4ThreeVector GetMomentum() const
void Lorentz(const G4ReactionProduct &p1, const G4ReactionProduct &p2)
G4double GetMass() const
void SetMass(const G4double mas)

Referenced by ApplyMechanismABE(), ApplyMechanismI_NBeA2A(), and ApplyMechanismII_ACN2A().


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