CMS 3D CMS Logo

CMSHadronPhysicsFTFP_BERT106.cc
Go to the documentation of this file.
1 
2 #include <iomanip>
3 
6 
7 #include "globals.hh"
8 #include "G4ios.hh"
9 #include "G4SystemOfUnits.hh"
10 #include "G4ParticleDefinition.hh"
11 #include "G4ParticleTable.hh"
12 #include "G4PionBuilder.hh"
13 #include "G4BertiniPionBuilder.hh"
14 #include "G4FTFPPionBuilder.hh"
15 
16 #include "G4KaonBuilder.hh"
17 #include "G4BertiniKaonBuilder.hh"
18 #include "G4FTFPKaonBuilder.hh"
19 
20 #include "G4ProtonBuilder.hh"
21 #include "G4BertiniProtonBuilder.hh"
22 #include "G4FTFPNeutronBuilder.hh"
23 #include "G4FTFPProtonBuilder.hh"
24 
25 #include "G4NeutronBuilder.hh"
26 #include "G4BertiniNeutronBuilder.hh"
27 #include "G4FTFPNeutronBuilder.hh"
28 
29 #include "G4HyperonFTFPBuilder.hh"
30 #include "G4AntiBarionBuilder.hh"
31 #include "G4FTFPAntiBarionBuilder.hh"
32 
33 #include "G4MesonConstructor.hh"
34 #include "G4BaryonConstructor.hh"
35 #include "G4ShortLivedConstructor.hh"
36 
37 #include "G4HadronCaptureProcess.hh"
38 #include "G4NeutronRadCapture.hh"
39 #include "G4NeutronInelasticXS.hh"
40 #include "G4NeutronCaptureXS.hh"
41 
42 #include "G4PhysListUtil.hh"
43 #include "G4Threading.hh"
44 
45 #include "G4DeexPrecoParameters.hh"
46 #include "G4NuclearLevelData.hh"
47 
48 #include "G4ProcessManager.hh"
49 
51  : CMSHadronPhysicsFTFP_BERT106(3. * CLHEP::GeV, 6. * CLHEP::GeV, 12 * CLHEP::GeV) {}
52 
54  : G4VPhysicsConstructor("hInelastic FTFP_BERT") {
55  minFTFP_ = e1;
56  maxBERT_ = e2;
57  maxBERTpi_ = e3;
58 }
59 
61 
63  G4MesonConstructor pMesonConstructor;
64  pMesonConstructor.ConstructParticle();
65 
66  G4BaryonConstructor pBaryonConstructor;
67  pBaryonConstructor.ConstructParticle();
68 
69  G4ShortLivedConstructor pShortLivedConstructor;
70  pShortLivedConstructor.ConstructParticle();
71 }
72 
74  G4cout << "### FTFP_BERT : transition between BERT and FTFP is over the interval " << minFTFP_ / CLHEP::GeV << " to "
75  << maxBERT_ / CLHEP::GeV << " GeV"
76  << " GeV; for pions up to " << maxBERTpi_ / CLHEP::GeV << " GeV" << G4endl;
77 }
78 
80  Neutron();
81  Proton();
82  Pion();
83  Kaon();
84  Others();
85 }
86 
88  //General schema:
89  // 1) Create a builder
90  // 2) Call AddBuilder
91  // 3) Configure the builder, possibly with sub-builders
92  // 4) Call builder->Build()
93  auto neu = new G4NeutronBuilder;
94  AddBuilder(neu);
95  auto ftfpn = new G4FTFPNeutronBuilder(false);
96  AddBuilder(ftfpn);
97  neu->RegisterMe(ftfpn);
98  ftfpn->SetMinEnergy(minFTFP_);
99  auto bertn = new G4BertiniNeutronBuilder;
100  AddBuilder(bertn);
101  neu->RegisterMe(bertn);
102  bertn->SetMinEnergy(0.0);
103  bertn->SetMaxEnergy(maxBERT_);
104  neu->Build();
105 }
106 
108  auto pro = new G4ProtonBuilder;
109  AddBuilder(pro);
110  auto ftfpp = new G4FTFPProtonBuilder(false);
111  AddBuilder(ftfpp);
112  pro->RegisterMe(ftfpp);
113  ftfpp->SetMinEnergy(minFTFP_);
114  auto bertp = new G4BertiniProtonBuilder;
115  AddBuilder(bertp);
116  pro->RegisterMe(bertp);
117  bertp->SetMaxEnergy(maxBERT_);
118  pro->Build();
119 }
120 
122  auto pi = new G4PionBuilder;
123  AddBuilder(pi);
124  auto ftfppi = new G4FTFPPionBuilder(false);
125  AddBuilder(ftfppi);
126  pi->RegisterMe(ftfppi);
127  ftfppi->SetMinEnergy(minFTFP_);
128  auto bertpi = new G4BertiniPionBuilder;
129  AddBuilder(bertpi);
130  pi->RegisterMe(bertpi);
131  bertpi->SetMaxEnergy(maxBERTpi_);
132  pi->Build();
133 }
134 
136  auto k = new G4KaonBuilder;
137  AddBuilder(k);
138  auto ftfpk = new G4FTFPKaonBuilder(false);
139  AddBuilder(ftfpk);
140  k->RegisterMe(ftfpk);
141  ftfpk->SetMinEnergy(minFTFP_);
142  auto bertk = new G4BertiniKaonBuilder;
143  AddBuilder(bertk);
144  k->RegisterMe(bertk);
145  bertk->SetMaxEnergy(maxBERT_);
146  k->Build();
147 }
148 
150  //===== Hyperons ====== //
151  auto hyp = new CMSHyperonFTFPBuilder;
152  AddBuilder(hyp);
153  hyp->Build();
154 
156  auto abar = new G4AntiBarionBuilder;
157  AddBuilder(abar);
158  auto ftfpabar = new G4FTFPAntiBarionBuilder(false);
159  AddBuilder(ftfpabar);
160  abar->RegisterMe(ftfpabar);
161  abar->Build();
162 }
163 
165  if (G4Threading::IsMasterThread()) {
166  DumpBanner();
167  }
168  CreateModels();
170 }
171 
173  const G4ParticleDefinition* neutron = G4Neutron::Neutron();
174  G4HadronicProcess* inel = G4PhysListUtil::FindInelasticProcess(neutron);
175  if (inel) {
176  inel->AddDataSet(new G4NeutronInelasticXS());
177  }
178 
179  G4HadronicProcess* capture = nullptr;
180  G4ProcessVector* pvec = neutron->GetProcessManager()->GetProcessList();
181  size_t n = pvec->size();
182  for (size_t i = 0; i < n; ++i) {
183  if (fCapture == ((*pvec)[i])->GetProcessSubType()) {
184  capture = static_cast<G4HadronicProcess*>((*pvec)[i]);
185  break;
186  }
187  }
188  if (capture) {
189  capture->RegisterMe(new G4NeutronRadCapture());
190  capture->AddDataSet(new G4NeutronCaptureXS());
191  }
192 }
CMSHadronPhysicsFTFP_BERT106::Kaon
void Kaon()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:135
mps_fire.i
i
Definition: mps_fire.py:428
dqmiodumpmetadata.n
n
Definition: dqmiodumpmetadata.py:28
CMSHadronPhysicsFTFP_BERT106::Neutron
void Neutron()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:87
CMSHyperonFTFPBuilder.h
CMSHadronPhysicsFTFP_BERT106::Others
void Others()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:149
CMSHadronPhysicsFTFP_BERT106::CMSHadronPhysicsFTFP_BERT106
CMSHadronPhysicsFTFP_BERT106(G4int verb)
Definition: CMSHadronPhysicsFTFP_BERT106.cc:50
CMSHadronPhysicsFTFP_BERT106::ConstructProcess
void ConstructProcess() override
Definition: CMSHadronPhysicsFTFP_BERT106.cc:164
CMSHadronPhysicsFTFP_BERT106::DumpBanner
void DumpBanner()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:73
CMSHadronPhysicsFTFP_BERT106::ConstructParticle
void ConstructParticle() override
Definition: CMSHadronPhysicsFTFP_BERT106.cc:62
dqmdumpme.k
k
Definition: dqmdumpme.py:60
CLHEP
Definition: CocoaGlobals.h:27
ztee.capture
def capture(fd, args)
Definition: ztee.py:94
CMSHadronPhysicsFTFP_BERT106::ExtraConfiguration
void ExtraConfiguration()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:172
GeV
const double GeV
Definition: MathUtil.h:16
StorageManager_cfg.e1
e1
Definition: StorageManager_cfg.py:16
CMSHadronPhysicsFTFP_BERT106::maxBERTpi_
G4double maxBERTpi_
Definition: CMSHadronPhysicsFTFP_BERT106.h:42
SiPixelPhase1Clusters_cfi.e3
e3
Definition: SiPixelPhase1Clusters_cfi.py:9
CMSHadronPhysicsFTFP_BERT106::~CMSHadronPhysicsFTFP_BERT106
~CMSHadronPhysicsFTFP_BERT106() override
Definition: CMSHadronPhysicsFTFP_BERT106.cc:60
CMSHadronPhysicsFTFP_BERT106::Proton
void Proton()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:107
CMSHadronPhysicsFTFP_BERT106::Pion
void Pion()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:121
CMSHadronPhysicsFTFP_BERT106::minFTFP_
G4double minFTFP_
Definition: CMSHadronPhysicsFTFP_BERT106.h:40
CMSHadronPhysicsFTFP_BERT106.h
pi
const Double_t pi
Definition: trackSplitPlot.h:36
CMSHadronPhysicsFTFP_BERT106::CreateModels
void CreateModels()
Definition: CMSHadronPhysicsFTFP_BERT106.cc:79
CMSHyperonFTFPBuilder
Definition: CMSHyperonFTFPBuilder.h:17
ecalTB2006H4_GenSimDigiReco_cfg.G4cout
G4cout
Definition: ecalTB2006H4_GenSimDigiReco_cfg.py:285
CMSHadronPhysicsFTFP_BERT106
Definition: CMSHadronPhysicsFTFP_BERT106.h:19
CMSHadronPhysicsFTFP_BERT106::maxBERT_
G4double maxBERT_
Definition: CMSHadronPhysicsFTFP_BERT106.h:41