Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4INCLPauliBlocking.cc
이 파일의 문서화 페이지로 가기
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // INCL++ intra-nuclear cascade model
27 // Alain Boudard, CEA-Saclay, France
28 // Joseph Cugnon, University of Liege, Belgium
29 // Jean-Christophe David, CEA-Saclay, France
30 // Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31 // Sylvie Leray, CEA-Saclay, France
32 // Davide Mancusi, CEA-Saclay, France
33 //
34 #define INCLXX_IN_GEANT4_MODE 1
35 
36 #include "globals.hh"
37 
38 #include "G4INCLRandom.hh"
39 #include "G4INCLPauliBlocking.hh"
40 #include "G4INCLGlobals.hh"
41 
42 #include "G4INCLPauliStrict.hh"
43 #include "G4INCLPauliStandard.hh"
45 #include "G4INCLPauliGlobal.hh"
46 #include "G4INCLCDPP.hh"
47 
48 namespace G4INCL {
49 
50  namespace Pauli {
51 
52  namespace {
53  G4ThreadLocal IPauli * thePauliBlocker = NULL;
54  G4ThreadLocal IPauli * theCDPP = NULL;
55  }
56 
57  IPauli * getBlocker() { return thePauliBlocker; }
58 
59  IPauli * getCDPP() { return theCDPP; }
60 
61  void setBlocker(IPauli * const pauliBlocker) {
62  thePauliBlocker = pauliBlocker;
63  }
64 
65  void setCDPP(IPauli * const cdpp) {
66  theCDPP = cdpp;
67  }
68 
69  G4bool isBlocked(ParticleList const &modifiedAndCreated, Nucleus const * const nucleus) {
70  G4bool isPauliBlocked = false;
71  if(thePauliBlocker != 0) {
72  isPauliBlocked = thePauliBlocker->isBlocked(modifiedAndCreated, nucleus);
73  }
74 
75  return isPauliBlocked;
76  }
77 
78  G4bool isCDPPBlocked(ParticleList const &created, Nucleus const * const nucleus) {
79  G4bool isCDPPBlocked = false;
80  if(theCDPP != 0) {
81  isCDPPBlocked = theCDPP->isBlocked(created, nucleus);
82  }
83 
84  return isCDPPBlocked;
85  }
86 
87  void deleteBlockers() {
88  delete thePauliBlocker;
89  thePauliBlocker=NULL;
90  delete theCDPP;
91  theCDPP=NULL;
92  }
93 
94  void initialize(Config const * const aConfig) {
95  // Select the Pauli blocking algorithm:
96  PauliType pauli = aConfig->getPauliType();
97  if(pauli == StrictStatisticalPauli)
99  else if(pauli == StatisticalPauli)
101  else if(pauli == StrictPauli)
102  setBlocker(new PauliStrict);
103  else if(pauli == GlobalPauli)
104  setBlocker(new PauliGlobal);
105  else if(pauli == NoPauli)
106  setBlocker(NULL);
107 
108  if(aConfig->getCDPP())
109  setCDPP(new CDPP);
110  else
111  setCDPP(NULL);
112 
113  }
114  }
115 }
PauliType getPauliType() const
Get the Pauli-blocking algorithm.
IPauli * getBlocker()
Get the Pauli blocker algorithm.
void initialize(Config const *const aConfig)
Initialise blockers according to a Config object.
#define G4ThreadLocal
Definition: tls.hh:69
G4bool getCDPP() const
Do we want CDPP?
G4bool isCDPPBlocked(ParticleList const &p, Nucleus const *const n)
Check CDPP blocking.
IPauli * getCDPP()
Get the CDPP blocker algorithm.
bool G4bool
Definition: G4Types.hh:79
void deleteBlockers()
Delete blockers.
void setBlocker(IPauli *const)
Set the Pauli blocker algorithm.
void setCDPP(IPauli *const)
Set the CDPP blocker algorithm.
G4bool isBlocked(ParticleList const &p, Nucleus const *const n)
Check Pauli blocking.