HadronPhysicsNuBeam.cc
Go to the documentation of this file.
1 //
2 // $Id$
3 //
4 //---------------------------------------------------------------------------
5 //
6 // ClassName: HadronPhysicsNuBeam
7 //
8 // Author: Julia Yarba, FNAL/CD (2013)
9 // created from (molded after) HadronPhysicsFTFP_BERT
10 //
11 // Modified:
12 //
13 //----------------------------------------------------------------------------
14 //
15 #include <iomanip>
16 
17 #include "HadronPhysicsNuBeam.hh"
18 
19 #include "globals.hh"
20 #include "G4ios.hh"
21 #include "G4SystemOfUnits.hh"
22 #include "G4ParticleDefinition.hh"
23 #include "G4ParticleTable.hh"
24 
25 #include "G4MesonConstructor.hh"
26 #include "G4BaryonConstructor.hh"
27 #include "G4ShortLivedConstructor.hh"
28 
29 #include "G4ChipsKaonMinusInelasticXS.hh"
30 #include "G4ChipsKaonPlusInelasticXS.hh"
31 #include "G4ChipsKaonZeroInelasticXS.hh"
32 #include "G4CrossSectionDataSetRegistry.hh"
33 
34 #include "G4PhysListUtil.hh"
35 
36 // factory
37 #include "G4PhysicsConstructorFactory.hh"
38 //
40 
42  : G4VPhysicsConstructor("hInelasticNuBeam")
43  , theNeutrons(0)
44  , theBertiniNeutron(0)
45  , theFTFPNeutron(0)
46  , theLEPNeutron(0)
47  , thePiK(0)
48  , theBertiniPiK(0)
49  , theFTFPPiK(0)
50  , thePro(0)
51  , theBertiniPro(0)
52  , theFTFPPro(0)
53  , theQGSPPro(0)
54  , theHyperon(0)
55  , theAntiBaryon(0)
56  , theFTFPAntiBaryon(0)
57  , QuasiElastic(false)
58  , ChipsKaonMinus(0)
59  , ChipsKaonPlus(0)
60  , ChipsKaonZero(0)
61 {}
62 
63 HadronPhysicsNuBeam::HadronPhysicsNuBeam(const G4String& name, G4bool quasiElastic)
64  : G4VPhysicsConstructor(name)
65  , theNeutrons(0)
67  , theFTFPNeutron(0)
68  , theLEPNeutron(0)
69  , thePiK(0)
70  , theBertiniPiK(0)
71  , theFTFPPiK(0)
72  , thePro(0)
73  , theBertiniPro(0)
74  , theFTFPPro(0)
75  , theQGSPPro(0)
76  , theHyperon(0)
77  , theAntiBaryon(0)
79  , QuasiElastic(quasiElastic)
80  , ChipsKaonMinus(0)
81  , ChipsKaonPlus(0)
82  , ChipsKaonZero(0)
83 {}
84 
86 {
87 
88  // this is fairly "standard", and is the same in FTFP_BERT
89  //
90  theNeutrons=new G4NeutronBuilder;
91  theFTFPNeutron=new G4FTFPNeutronBuilder(QuasiElastic);
92  theNeutrons->RegisterMe(theFTFPNeutron);
93  theNeutrons->RegisterMe(theBertiniNeutron=new G4BertiniNeutronBuilder);
94  theBertiniNeutron->SetMinEnergy(0.0*GeV);
95  theBertiniNeutron->SetMaxEnergy(5*GeV);
96  theNeutrons->RegisterMe(theLEPNeutron=new G4LEPNeutronBuilder);
97  theLEPNeutron->SetMinInelasticEnergy(0.0*eV); // no inelastic from LEP
98  theLEPNeutron->SetMaxInelasticEnergy(0.0*eV);
99 
100  // this block has quite a few modifications,
101  // incl. energy ranges that are different from FTFP_BERT
102  //
103  thePro=new G4ProtonBuilder;
104  //
105  // this is the new "custom" proton builder, tentatively for NuBeam
106  //
107  // no need to set the min energy because it's set in the ProBuilder (at 100GeV)
108  // ... and theMax will be set 100TeV via Build()
109  //
111  thePro->RegisterMe(theQGSPPro);
112  //
113  // standard FTFP builder, but energy range is adjusted
114  //
115  theFTFPPro=new G4FTFPProtonBuilder(QuasiElastic);
116  thePro->RegisterMe(theFTFPPro);
117  theFTFPPro->SetMinEnergy(7.*GeV);
118  theFTFPPro->SetMaxEnergy(101.*GeV);
119  //
120  // standard Bertini builder, but the validity limit in energy has been moved higher
121  //
122  thePro->RegisterMe(theBertiniPro=new G4BertiniProtonBuilder);
123  theBertiniPro->SetMaxEnergy(10.*GeV);
124 
125  // this one has energy ranges different from FTFP_BERT,
126  // namely, Bertini is extended up to 10GeV, and FTFP starts at 7GeV
127  //
128  thePiK=new G4PiKBuilder;
129  theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic);
130  thePiK->RegisterMe(theFTFPPiK);
131  theFTFPPiK->SetMinEnergy(7.*GeV);
132  thePiK->RegisterMe(theBertiniPiK=new G4BertiniPiKBuilder);
133  theBertiniPiK->SetMaxEnergy(10.*GeV);
134 
135  // this is "standard" and is the same as in FTFP_BERT
136  //
137  theHyperon=new G4HyperonFTFPBuilder;
138  theAntiBaryon=new G4AntiBarionBuilder;
139  theAntiBaryon->RegisterMe(theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(QuasiElastic));
140 
141 }
142 
144 {
145  delete theNeutrons;
146  delete theBertiniNeutron;
147  delete theFTFPNeutron;
148  delete theLEPNeutron;
149 
150  delete thePiK;
151  delete theBertiniPiK;
152  delete theFTFPPiK;
153 
154  delete thePro;
155  delete theBertiniPro;
156  delete theFTFPPro;
157  delete theQGSPPro;
158 
159  delete theHyperon;
160  delete theAntiBaryon;
161  delete theFTFPAntiBaryon;
162 }
163 
165 {
166  G4MesonConstructor pMesonConstructor;
167  pMesonConstructor.ConstructParticle();
168 
169  G4BaryonConstructor pBaryonConstructor;
170  pBaryonConstructor.ConstructParticle();
171 
172  G4ShortLivedConstructor pShortLivedConstructor;
173  pShortLivedConstructor.ConstructParticle();
174 }
175 
176 #include "G4ProcessManager.hh"
178 {
179  CreateModels();
180  theNeutrons->Build();
181  thePro->Build();
182  thePiK->Build();
183 
184  // use CHIPS cross sections also for Kaons
185  ChipsKaonMinus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonMinusInelasticXS::Default_Name());
186  ChipsKaonPlus = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonPlusInelasticXS::Default_Name());
187  ChipsKaonZero = G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4ChipsKaonZeroInelasticXS::Default_Name());
188  //
189 
190  G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(ChipsKaonMinus);
191  G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(ChipsKaonPlus);
192  G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(ChipsKaonZero );
193  G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(ChipsKaonZero );
194 
195  theHyperon->Build();
196  theAntiBaryon->Build();
197 }
198 
static QCString name
Definition: declinfo.cpp:673
G4ProtonBuilder * thePro
virtual void ConstructProcess()
G4FTFPAntiBarionBuilder * theFTFPAntiBaryon
G4VCrossSectionDataSet * ChipsKaonZero
static const double eV
Definition: Units.h:128
G4BertiniProtonBuilder * theBertiniPro
G4LEPNeutronBuilder * theLEPNeutron
HadronPhysicsNuBeam(G4int verbose=1)
G4AntiBarionBuilder * theAntiBaryon
G4VCrossSectionDataSet * ChipsKaonMinus
virtual void ConstructParticle()
G4HyperonFTFPBuilder * theHyperon
G4FTFPProtonBuilder * theFTFPPro
G4FTFPPiKBuilder * theFTFPPiK
G4BertiniPiKBuilder * theBertiniPiK
QGSPStrFragmLundProtonBuilder * theQGSPPro
G4BertiniNeutronBuilder * theBertiniNeutron
G4NeutronBuilder * theNeutrons
static const double GeV
Definition: Units.h:29
G4VCrossSectionDataSet * ChipsKaonPlus
G4FTFPNeutronBuilder * theFTFPNeutron
G4_DECLARE_PHYSCONSTR_FACTORY(HadronPhysicsNuBeam)