Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
G4INCL::PauliGlobal Class Reference

#include <G4INCLPauliGlobal.hh>

Inheritance diagram for G4INCL::PauliGlobal:
G4INCL::IPauli

Public Member Functions

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

Detailed Description

Definition at line 43 of file G4INCLPauliGlobal.hh.

Constructor & Destructor Documentation

G4INCL::PauliGlobal::PauliGlobal ( )

Definition at line 42 of file G4INCLPauliGlobal.cc.

42 {}
G4INCL::PauliGlobal::~PauliGlobal ( )

Definition at line 43 of file G4INCLPauliGlobal.cc.

43 {}

Member Function Documentation

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

Implements G4INCL::IPauli.

Definition at line 45 of file G4INCLPauliGlobal.cc.

References G4INCL::NuclearPotential::INuclearPotential::getFermiMomentum(), G4INCL::Nucleus::getInitialA(), G4INCL::Nucleus::getInitialZ(), G4INCL::Store::getParticles(), G4INCL::Nucleus::getPotential(), G4INCL::Nucleus::getStore(), G4INCL::Proton, and G4INCL::Random::shoot().

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

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