Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
G4HadronPhysicsNuBeam.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 //
27 // $Id$
28 //
29 //---------------------------------------------------------------------------
30 //
31 // ClassName: HadronPhysicsNuBeam
32 //
33 // Author: Julia Yarba, FNAL/CD (2013)
34 // created from (molded after) HadronPhysicsFTFP_BERT
35 //
36 // Modified:
37 //
38 //----------------------------------------------------------------------------
39 //
40 #include <iomanip>
41 
42 #include "G4HadronPhysicsNuBeam.hh"
44 #include "G4PiKBuilder.hh"
45 #include "G4FTFPPiKBuilder.hh"
46 #include "G4BertiniPiKBuilder.hh"
47 #include "G4ProtonBuilder.hh"
48 #include "G4FTFPProtonBuilder.hh"
50 #include "globals.hh"
51 #include "G4ios.hh"
52 #include "G4SystemOfUnits.hh"
53 
54 //#include "G4ParticleDefinition.hh"
55 //#include "G4ParticleTable.hh"
56 //
57 //#include "G4MesonConstructor.hh"
58 //#include "G4BaryonConstructor.hh"
59 //#include "G4ShortLivedConstructor.hh"
60 //
61 //#include "G4ComponentGGHadronNucleusXsc.hh"
62 //#include "G4CrossSectionInelastic.hh"
63 //#include "G4HadronCaptureProcess.hh"
64 //#include "G4NeutronRadCapture.hh"
65 //#include "G4NeutronInelasticXS.hh"
66 //#include "G4NeutronCaptureXS.hh"
67 //
68 //#include "G4CrossSectionDataSetRegistry.hh"
69 //
70 //#include "G4PhysListUtil.hh"
71 
72 // factory
74 //
76 
77 //G4ThreadLocal G4HadronPhysicsNuBeam::ThreadPrivate* G4HadronPhysicsNuBeam::tpdata=0;
78 
80  G4HadronPhysicsNuBeam("hInelasticNuBeam",false)
81 {}
82 
84  : G4HadronPhysicsFTFP_BERT(name,quasiElastic)
85 {
86  minFTFP_neutron = 4.0*GeV;
87  maxBERT_neutron = 5.0*GeV;
88  minFTFP_proton = 3.0*GeV;
89  maxBERT_proton = 3.5*GeV;
90  maxFTFP_proton = 101*GeV;
93 
94 }
95 
97 {
98  auto pro = new G4ProtonBuilder;
99  AddBuilder(pro);
100  // this is the new "custom" proton builder, tentatively for NuBeam
101  //
102  // no need to set the min energy because it's set in the ProBuilder (at 100GeV)
103  // ... and theMax will be set 100TeV via Build()
104  //
105  // also explicitly set quasi-elastic key ON for QGS
106  // (it should be OFF for FTF, controlled by QuasiElastic)
107  //
108  auto qgsppro = new G4QGSPLundStrFragmProtonBuilder( true );
109  AddBuilder(qgsppro);
110  pro->RegisterMe(qgsppro);
111  //
112  // standard FTFP builder, but energy range is adjusted
113  //
114  auto ftfppro = new G4FTFPProtonBuilder(QuasiElastic);
115  AddBuilder(ftfppro);
116  pro->RegisterMe(ftfppro);
117  ftfppro->SetMinEnergy(minFTFP_proton);
118  ftfppro->SetMaxEnergy(maxFTFP_proton);
119  //
120  // standard Bertini builder, but the validity limit in energy has been moved higher
121  //
122  auto bertpro = new G4BertiniProtonBuilder;
123  AddBuilder(bertpro);
124  pro->RegisterMe(bertpro);
125  bertpro->SetMaxEnergy(maxBERT_proton);
126  pro->Build();
127 }
128 
130 {
131  // this one has energy ranges different from FTFP_BERT,
132  // namely, Bertini is extended up to 10GeV, and FTFP starts at 7GeV
133  //
134  auto pik = new G4PiKBuilder;
135  AddBuilder(pik);
136  auto ftfppik = new G4FTFPPiKBuilder(QuasiElastic);
137  AddBuilder(ftfppik);
138  ftfppik->SetMinEnergy(minFTFP_pion);
139  pik->RegisterMe(ftfppik);
140  auto bertpik = new G4BertiniPiKBuilder();
141  AddBuilder(bertpik);
142  bertpik->SetMaxEnergy(maxBERT_pion);
143  pik->RegisterMe(bertpik);
144  pik->Build();
145 }
146 
148  //Use combined with pions
149 }
150 
151 //void G4HadronPhysicsNuBeam::CreateModels()
152 //{
153 // // this one has energy ranges different from FTFP_BERT,
154 // // namely, Bertini is extended up to 10GeV, and FTFP starts at 7GeV
155 // //
156 // tpdata->thePiK=new G4PiKBuilder;
157 // tpdata->theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic);
158 // tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK);
159 // tpdata->theFTFPPiK->SetMinEnergy(3.*GeV);
160 // tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK=new G4BertiniPiKBuilder);
161 // tpdata->theBertiniPiK->SetMaxEnergy(3.5*GeV);
162 //
163 // // this is "standard" and is the same as in FTFP_BERT
164 // //
165 // tpdata->theHyperon=new G4HyperonFTFPBuilder;
166 // tpdata->theAntiBaryon=new G4AntiBarionBuilder;
167 // tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(QuasiElastic));
168 //
169 // return;
170 //
171 //}
172 
173 //G4HadronPhysicsNuBeam::~G4HadronPhysicsNuBeam()
174 //{
175 // if (!tpdata) return;
176 //
177 // delete tpdata->theNeutrons;
178 // delete tpdata->theBertiniNeutron;
179 // delete tpdata->theFTFPNeutron;
180 //
181 // delete tpdata->thePiK;
182 // delete tpdata->theBertiniPiK;
183 // delete tpdata->theFTFPPiK;
184 //
185 // delete tpdata->thePro;
186 // delete tpdata->theBertiniPro;
187 // delete tpdata->theFTFPPro;
188 // delete tpdata->theQGSPPro;
189 //
190 // delete tpdata->theHyperon;
191 // delete tpdata->theAntiBaryon;
192 // delete tpdata->theFTFPAntiBaryon;
193 //
194 //}
195 
196 //void G4HadronPhysicsNuBeam::ConstructParticle()
197 //{
198 //
199 // G4MesonConstructor pMesonConstructor;
200 // pMesonConstructor.ConstructParticle();
201 //
202 // G4BaryonConstructor pBaryonConstructor;
203 // pBaryonConstructor.ConstructParticle();
204 //
205 // G4ShortLivedConstructor pShortLivedConstructor;
206 // pShortLivedConstructor.ConstructParticle();
207 //
208 // return;
209 //
210 //}
211 //
212 //#include "G4ProcessManager.hh"
213 //void G4HadronPhysicsNuBeam::ConstructProcess()
214 //{
215 //
216 // if ( tpdata == 0 ) tpdata = new ThreadPrivate;
217 //
218 // CreateModels();
219 //
220 // tpdata->theNeutrons->Build();
221 // tpdata->thePro->Build();
222 // tpdata->thePiK->Build();
223 //
224 // // --- Kaons ---
225 // tpdata->xsKaon = new G4ComponentGGHadronNucleusXsc();
226 // G4VCrossSectionDataSet * kaonxs = new G4CrossSectionInelastic(tpdata->xsKaon);
227 // G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs);
228 // G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs);
229 // G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs);
230 // G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs);
231 //
232 // tpdata->theHyperon->Build();
233 // tpdata->theAntiBaryon->Build();
234 //
235 // // --- Neutrons ---
236 // //
237 // tpdata->xsNeutronInelasticXS = (G4NeutronInelasticXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronInelasticXS::Default_Name());
238 // G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(tpdata->xsNeutronInelasticXS);
239 //
240 // G4HadronicProcess* capture = 0;
241 // G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager();
242 // G4ProcessVector* pv = pmanager->GetProcessList();
243 // for ( size_t i=0; i < static_cast<size_t>(pv->size()); ++i )
244 // {
245 // if ( fCapture == ((*pv)[i])->GetProcessSubType() )
246 // {
247 // capture = static_cast<G4HadronicProcess*>((*pv)[i]);
248 // }
249 // }
250 // if ( ! capture ) {
251 // capture = new G4HadronCaptureProcess("nCapture");
252 // pmanager->AddDiscreteProcess(capture);
253 // }
254 // tpdata->xsNeutronCaptureXS = (G4NeutronCaptureXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronCaptureXS::Default_Name());
255 // capture->AddDataSet(tpdata->xsNeutronCaptureXS);
256 // capture->RegisterMe(new G4NeutronRadCapture());
257 //
258 // return;
259 //
260 //}
261 
#define G4_DECLARE_PHYSCONSTR_FACTORY(physics_constructor)
const XML_Char * name
Definition: expat.h:151
virtual void Proton() override
bool G4bool
Definition: G4Types.hh:79
void AddBuilder(G4PhysicsBuilderInterface *bld)
G4HadronPhysicsNuBeam(G4int verbose=1)
int G4int
Definition: G4Types.hh:78
virtual void Pion() override
static constexpr double GeV
Definition: G4SIunits.hh:217
virtual void Kaon() override