Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4HadronInelasticQBBC.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 // $Id: G4HadronInelasticQBBC.cc 110587 2018-05-31 12:05:13Z gcosmo $
27 //
28 //---------------------------------------------------------------------------
29 //
30 // ClassName: G4HadronInelasticQBBC
31 //
32 // Author: 2 October 2009 V. Ivanchenko
33 //
34 // Modified:
35 //
36 //----------------------------------------------------------------------------
37 //
38 
39 #include "G4HadronInelasticQBBC.hh"
40 
41 #include "G4SystemOfUnits.hh"
42 
44 #include "G4HadronicInteraction.hh"
45 
46 #include "G4ParticleDefinition.hh"
47 #include "G4ProcessManager.hh"
48 
50 #include "G4BGGPionInelasticXS.hh"
51 
52 #include "G4ParticleInelasticXS.hh"
53 #include "G4NeutronCaptureXS.hh"
54 
58 #include "G4CrossSectionPairGG.hh"
60 
61 #include "G4QGSBuilder.hh"
62 #include "G4FTFBuilder.hh"
63 
67 
68 #include "G4CascadeInterface.hh"
69 #include "G4BinaryCascade.hh"
70 #include "G4NeutronRadCapture.hh"
71 
72 #include "G4PreCompoundModel.hh"
73 #include "G4ExcitationHandler.hh"
74 #include "G4Evaporation.hh"
76 
77 // factory
79 //
81 
82 G4ThreadLocal std::unique_ptr<G4ComponentAntiNuclNuclearXS> G4HadronInelasticQBBC::theAntiNuclXS;
83 G4ThreadLocal std::unique_ptr<G4ComponentGGHadronNucleusXsc> G4HadronInelasticQBBC::theKaonXS;
84 
86  : G4VHadronPhysics("hInelasticQBBC"),verbose(ver)
87 {
88  theAntiNuclXS = nullptr;
89  theKaonXS = nullptr;
90 }
91 
94 {}
95 
97 {}
98 
100 {
101  if(verbose > 1) {
102  G4cout << "### HadronInelasticQBBC Construct Process " << G4endl;
103  }
104 
105  G4double emax = 100.*TeV;
106 
107  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new PRECO"<< G4endl;
108 
109  // PreCompound and Evaporation models are instantiated here
110  G4PreCompoundModel* thePreCompound = nullptr;
113  thePreCompound = static_cast<G4PreCompoundModel*>(p);
114  if(!thePreCompound) { thePreCompound = new G4PreCompoundModel(); }
115 
116  // configure models
117  //G4HadronicInteraction* theQGSP =
118  // BuildModel(new G4QGSBuilder("QGSP",thePreCompound,true,false),12.5*GeV,emax);
119  G4HadronicInteraction* theFTFP =
120  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
121  G4HadronicInteraction* theFTFP1 =
122  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),3.0*GeV,emax);
123  G4HadronicInteraction* theFTFP2 =
124  BuildModel(new G4FTFBuilder("FTFP",thePreCompound),0.0,emax);
125 
128  G4HadronicInteraction* theBERT = NewModel(casc,1.0*GeV,5.0*GeV);
129 
130  casc = new G4CascadeInterface();
132  G4HadronicInteraction* theBERT1 = NewModel(casc,0.0*GeV,5.0*GeV);
133 
134  //G4cout << "G4HadronInelasticQBBC::ConstructProcess new Binary"<< G4endl;
135  G4BinaryCascade* bic = new G4BinaryCascade(thePreCompound);
136  G4HadronicInteraction* theBIC = NewModel(bic,0.0,1.5*GeV);
137 
138  // cross sections
140  G4CrossSectionInelastic* anucxs =
144 
145  // loop over particles
146  auto myParticleIterator=GetParticleIterator();
147  myParticleIterator->reset();
148  while( (*myParticleIterator)() ) {
149  G4ParticleDefinition* particle = myParticleIterator->value();
150  G4String pname = particle->GetParticleName();
151  if(verbose > 1) {
152  G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
153  }
154 
155  //
156  // model and X-section configuration per particle type
157  //
158  if(pname == "proton") {
159  G4HadronicProcess* hp = FindInelasticProcess(particle);
160  hp->AddDataSet(new G4ParticleInelasticXS(particle));
161 
162  hp->RegisterMe(theFTFP);
163  hp->RegisterMe(theBERT);
164  hp->RegisterMe(theBIC);
165 
166  } else if(pname == "neutron") {
167  G4HadronicProcess* hp = FindInelasticProcess(particle);
168  hp->AddDataSet(new G4ParticleInelasticXS(particle));
169  hp->RegisterMe(theFTFP);
170 
172  capture->RegisterMe(new G4NeutronRadCapture());
173  capture->AddDataSet(new G4NeutronCaptureXS());
174  hp->RegisterMe(theBERT);
175  hp->RegisterMe(theBIC);
176 
177  } else if(pname == "pi-" || pname == "pi+") {
178  G4HadronicProcess* hp = FindInelasticProcess(particle);
179  hp->AddDataSet(new G4BGGPionInelasticXS(particle));
180  hp->RegisterMe(theFTFP);
181  hp->RegisterMe(theBERT1);
182 
183  } else if(pname == "kaon-" ) {
184  G4HadronicProcess* hp = FindInelasticProcess(particle);
185  hp->RegisterMe(theFTFP1);
186  hp->RegisterMe(theBERT1);
187  hp->AddDataSet(kaonxs);
188 
189  } else if(pname == "kaon+" ) {
190  G4HadronicProcess* hp = FindInelasticProcess(particle);
191  hp->RegisterMe(theFTFP1);
192  hp->RegisterMe(theBERT1);
193  hp->AddDataSet(kaonxs);
194 
195  } else if(pname == "kaon0S" ||
196  pname == "kaon0L") {
197  G4HadronicProcess* hp = FindInelasticProcess(particle);
198  hp->RegisterMe(theFTFP1);
199  hp->RegisterMe(theBERT1);
200  hp->AddDataSet(kaonxs);
201 
202  } else if(pname == "lambda" ||
203  pname == "omega-" ||
204  pname == "sigma-" ||
205  pname == "sigma+" ||
206  pname == "sigma0" ||
207  pname == "xi-" ||
208  pname == "xi0") {
209  G4HadronicProcess* hp = FindInelasticProcess(particle);
210  hp->RegisterMe(theFTFP1);
211  hp->RegisterMe(theBERT1);
213 
214  } else if(pname == "anti_alpha" ||
215  pname == "anti_deuteron"||
216  pname == "anti_He3" ||
217  pname == "anti_proton" ||
218  pname == "anti_triton" ||
219  pname == "anti_lambda" ||
220  pname == "anti_neutron" ||
221  pname == "anti_omega-" ||
222  pname == "anti_sigma-" ||
223  pname == "anti_sigma+" ||
224  pname == "anti_xi-" ||
225  pname == "anti_xi0"
226  ) {
227 
228  G4HadronicProcess* hp = FindInelasticProcess(particle);
229  hp->RegisterMe(theFTFP2);
230  hp->AddDataSet(anucxs);
231  }
232  }
233 }
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
G4HadronicProcess * FindInelasticProcess(const G4String &)
void RegisterMe(G4HadronicInteraction *a)
#define G4endl
Definition: G4ios.hh:61
const char * p
Definition: xmltok.h:285
const G4String & GetParticleName() const
static G4CrossSectionDataSetRegistry * Instance()
static const G4double emax
#define G4ThreadLocal
Definition: tls.hh:69
G4HadronicInteraction * BuildModel(G4VHadronModelBuilder *, G4double emin, G4double emax)
static constexpr double TeV
Definition: G4SIunits.hh:218
double G4double
Definition: G4Types.hh:76
bool G4bool
Definition: G4Types.hh:79
static G4ThreadLocal std::unique_ptr< G4ComponentAntiNuclNuclearXS > theAntiNuclXS
G4HadronicInteraction * NewModel(G4HadronicInteraction *, G4double emin, G4double emax)
static G4HadronicInteractionRegistry * Instance()
void AddDataSet(G4VCrossSectionDataSet *aDataSet)
int G4int
Definition: G4Types.hh:78
G4GLOB_DLL std::ostream G4cout
G4ParticleTable::G4PTblDicIterator * GetParticleIterator() const
static G4ThreadLocal std::unique_ptr< G4ComponentGGHadronNucleusXsc > theKaonXS
G4HadronicInteraction * FindModel(const G4String &name)
static constexpr double GeV
Definition: G4SIunits.hh:217
G4HadronicProcess * FindCaptureProcess()