Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCL::PauliGlobal Class Reference

#include <G4INCLPauliGlobal.hh>

+ Inheritance diagram for G4INCL::PauliGlobal:

Public Member Functions

 PauliGlobal ()
 
 ~PauliGlobal ()
 
G4bool isBlocked (ParticleList const, Nucleus const *const) const
 
- Public Member Functions inherited from G4INCL::IPauli
 IPauli ()
 
virtual ~IPauli ()
 
virtual G4bool isBlocked (ParticleList const, Nucleus const *const) const =0
 

Detailed Description

Definition at line 45 of file G4INCLPauliGlobal.hh.

Constructor & Destructor Documentation

◆ PauliGlobal()

G4INCL::PauliGlobal::PauliGlobal ( )

Definition at line 44 of file G4INCLPauliGlobal.cc.

44{}

◆ ~PauliGlobal()

G4INCL::PauliGlobal::~PauliGlobal ( )

Definition at line 45 of file G4INCLPauliGlobal.cc.

45{}

Member Function Documentation

◆ isBlocked()

G4bool G4INCL::PauliGlobal::isBlocked ( ParticleList const  pL,
Nucleus const * const  n 
) const
virtual

Implements G4INCL::IPauli.

Definition at line 47 of file G4INCLPauliGlobal.cc.

47 {
48 for(ParticleIter p=pL.begin(); p!=pL.end(); ++p) {
49 // Pauli blocking only applies to nucleons
50 if(!(*p)->isNucleon()) continue;
51
52 // If the particle is above T_F, it is never blocked
53 const ParticleType t = (*p)->getType();
54 const G4double pFermi = n->getPotential()->getFermiMomentum(t);
55 const G4double pFermiSquared = pFermi*pFermi;
56 if((*p)->getMomentum().mag2() > pFermiSquared) continue;
57
58 // Count particles of the same type as p below the Fermi sea
59 const ParticleList particles = n->getStore()->getParticles();
60 G4int nSea = 0;
61 for(ParticleIter i=particles.begin(); i!=particles.end(); ++i) {
62 if((*i)->getType() != t) continue;
63 const G4double pmod2 = (*i)->getMomentum().mag2();
64 if(pmod2<pFermiSquared) nSea++;
65 }
66
67 // Compute the blocking probability
68 G4double probBlocking;
69 if(t==Proton)
70 probBlocking = ((G4double) nSea)/((G4double) n->getInitialZ());
71 else
72 probBlocking = ((G4double) nSea)/((G4double) (n->getInitialA() - n->getInitialZ()));
73
74 // The avatar is blocked if any particle is blocked
75 if(Random::shoot() < probBlocking) return true;
76
77 }
78
79 // Not blocked
80 return false;
81
82 }
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
static G4double shoot()
Definition: G4INCLRandom.hh:99
std::list< G4INCL::Particle * > ParticleList
std::list< G4INCL::Particle * >::const_iterator ParticleIter

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