source: trunk/source/physics_lists/lists/src/G4HadronInelasticQBBC.cc@ 896

Last change on this file since 896 was 850, checked in by garnier, 17 years ago

geant4.8.2 beta

File size: 10.2 KB
Line 
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,v 1.9 2008/08/05 10:25:00 vnivanch Exp $
27// GEANT4 tag $Name: HEAD $
28//
29//---------------------------------------------------------------------------
30//
31// ClassName: G4HadronInelasticQBBC
32//
33// Author: 11 April 2006 V. Ivanchenko
34//
35// Modified:
36// 05.07.2006 V.Ivanchenko fix problem of initialisation of HP
37// 15.04.2007 V.Ivanchenko include quasi-elastic and change FTF low energy
38//
39//----------------------------------------------------------------------------
40//
41
42#include "G4HadronInelasticQBBC.hh"
43
44#include "G4HadronInelasticProcess.hh"
45
46#include "G4ParticleDefinition.hh"
47#include "G4ProcessManager.hh"
48
49#include "G4MesonConstructor.hh"
50#include "G4BaryonConstructor.hh"
51
52#include "G4PiNuclearCrossSection.hh"
53#include "G4BGGNucleonInelasticXS.hh"
54#include "G4BGGPionInelasticXS.hh"
55
56#include "G4TheoFSGenerator.hh"
57#include "G4QStringChipsParticleLevelInterface.hh"
58#include "G4StringChipsInterface.hh"
59#include "G4QGSMFragmentation.hh"
60#include "G4LundStringFragmentation.hh"
61#include "G4ExcitedStringDecay.hh"
62
63#include "G4BinaryCascade.hh"
64#include "G4HadronFissionProcess.hh"
65#include "G4HadronCaptureProcess.hh"
66#include "G4LFission.hh"
67#include "G4LCapture.hh"
68
69#include "G4NeutronHPInelastic.hh"
70#include "G4NeutronHPFission.hh"
71#include "G4NeutronHPCapture.hh"
72
73#include "G4UInelasticCrossSection.hh"
74
75G4HadronInelasticQBBC::G4HadronInelasticQBBC(const G4String& name,
76 G4int ver, G4bool ftf, G4bool bert, G4bool chips, G4bool hp, G4bool glauber)
77 : G4VPhysicsConstructor(name), verbose(ver), ftfFlag(ftf), bertFlag(bert),
78 chipsFlag(chips), hpFlag(hp), glFlag(glauber), wasActivated(false)
79{
80 if(verbose > -1) G4cout << "### HadronInelasticQBBC" << G4endl;
81 // store = G4HadronProcessStore::Instance();
82 theHPXSecI = 0;
83 theHPXSecC = 0;
84 theHPXSecF = 0;
85 theCascade = 0;
86 theCHIPSCascade = 0;
87 theQuasiElastic = 0;
88 theQGStringDecay = 0;
89 theQGStringModel = 0;
90 theFTFStringDecay = 0;
91 theFTFStringModel = 0;
92}
93
94G4HadronInelasticQBBC::~G4HadronInelasticQBBC()
95{
96 delete theCascade;
97 delete theCHIPSCascade;
98 delete theQuasiElastic;
99 delete theQGStringDecay;
100 delete theQGStringModel;
101 delete theFTFStringDecay;
102 delete theFTFStringModel;
103 delete theHPXSecI;
104 delete theHPXSecC;
105 delete theHPXSecF;
106}
107
108void G4HadronInelasticQBBC::ConstructParticle()
109{
110 G4MesonConstructor pMesonConstructor;
111 pMesonConstructor.ConstructParticle();
112
113 G4BaryonConstructor pBaryonConstructor;
114 pBaryonConstructor.ConstructParticle();
115}
116
117void G4HadronInelasticQBBC::ConstructProcess()
118{
119 if(wasActivated) return;
120 wasActivated = true;
121
122 if(verbose > 1)
123 G4cout << "### HadronInelasticQBBC Construct Process" << G4endl;
124
125 G4double minEstring = 4.0*GeV;
126 G4double maxEcascade = 6.0*GeV;
127 // G4double minFtf = 7.5*GeV;
128
129 //Binary
130 G4HadronicInteraction* theBIC = new G4BinaryCascade();
131 theBIC->SetMinEnergy(0.0);
132 theBIC->SetMaxEnergy(maxEcascade);
133
134 //Bertini
135 G4HadronicInteraction* theBERT = new G4CascadeInterface();
136 theBERT->SetMinEnergy(0.0);
137 theBERT->SetMaxEnergy(maxEcascade);
138
139 //CHIPS
140 G4HadronicInteraction* theCHIPS = new G4StringChipsInterface();
141 theCHIPS->SetMinEnergy(0.0);
142 theCHIPS->SetMaxEnergy(maxEcascade);
143
144 //QGS
145 theCascade = new G4BinaryCascade;
146 theCHIPSCascade = new G4QStringChipsParticleLevelInterface;
147 G4TheoFSGenerator* theQGSModel = new G4TheoFSGenerator();
148 theQGStringModel = new G4QGSModel< G4QGSParticipants >;
149 theQGStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation());
150 theQGStringModel->SetFragmentationModel(theQGStringDecay);
151 theQGSModel->SetTransport(theCHIPSCascade);
152
153 theQuasiElastic = new G4QuasiElasticChannel;
154 theQGSModel->SetQuasiElasticChannel(theQuasiElastic);
155 theQGSModel->SetHighEnergyGenerator(theQGStringModel);
156 theQGSModel->SetMinEnergy(minEstring);
157 theQGSModel->SetMaxEnergy(100*TeV);
158
159 //FTF
160 G4TheoFSGenerator* theFTFModel = new G4TheoFSGenerator();
161 theFTFStringModel = new G4FTFModel();
162 theFTFStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
163 theFTFStringModel->SetFragmentationModel(theFTFStringDecay);
164 //theFTFModel->SetTransport(theCHIPSCascade);
165 theFTFModel->SetTransport(theCascade);
166 theFTFModel->SetHighEnergyGenerator(theFTFStringModel);
167 theFTFModel->SetMinEnergy(minEstring);
168 theFTFModel->SetMaxEnergy(100*TeV);
169 //theFTFModel->SetQuasiElasticChannel(theQuasiElastic);
170
171 theParticleIterator->reset();
172 while( (*theParticleIterator)() ) {
173 G4ParticleDefinition* particle = theParticleIterator->value();
174 G4String pname = particle->GetParticleName();
175 if(verbose > 1) G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
176 if(pname == "anti_lambda" ||
177 pname == "anti_neutron" ||
178 pname == "anti_omega-" ||
179 pname == "anti_proton" ||
180 pname == "anti_sigma-" ||
181 pname == "anti_sigma+" ||
182 pname == "anti_xi-" ||
183 pname == "anti_xi0" ||
184 pname == "kaon-" ||
185 pname == "kaon+" ||
186 pname == "kaon0S" ||
187 pname == "kaon0L" ||
188 pname == "lambda" ||
189 pname == "neutron" ||
190 pname == "omega-" ||
191 pname == "pi-" ||
192 pname == "pi+" ||
193 pname == "proton" ||
194 pname == "sigma-" ||
195 pname == "sigma+" ||
196 pname == "xi-" ||
197 pname == "xi0") {
198
199 G4ProcessManager* pmanager = particle->GetProcessManager();
200 G4HadronInelasticProcess* hp =
201 new G4HadronInelasticProcess("hInelastic", particle);
202 pmanager->AddDiscreteProcess(hp);
203
204 if(pname == "proton") {
205 hp->AddDataSet(&theXSecP);
206
207 if(ftfFlag) hp->RegisterMe(theFTFModel);
208 else hp->RegisterMe(theQGSModel);
209
210 if(bertFlag) hp->RegisterMe(theBERT);
211 else hp->RegisterMe(theBIC);
212
213 if(glFlag)
214 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
215
216 } else if(pname == "neutron") {
217 hp->AddDataSet(&theXSecN);
218 if(ftfFlag) hp->RegisterMe(theFTFModel);
219 else hp->RegisterMe(theQGSModel);
220
221 G4HadronCaptureProcess* theNeutronCapture =
222 new G4HadronCaptureProcess("nCapture");
223 G4HadronFissionProcess* theNeutronFission =
224 new G4HadronFissionProcess("nFission");
225 pmanager->AddDiscreteProcess(theNeutronCapture);
226 pmanager->AddDiscreteProcess(theNeutronFission);
227
228 G4double emin = 0.0;
229 if(hpFlag) {
230 emin = 19.5*MeV;
231 theHPXSecI = new G4NeutronHPInelasticData;
232 theHPXSecC = new G4NeutronHPCaptureData;
233 theHPXSecF = new G4NeutronHPFissionData;
234 hp->AddDataSet(theHPXSecI);
235 theNeutronCapture->AddDataSet(theHPXSecC);
236 theNeutronFission->AddDataSet(theHPXSecF);
237 hp->RegisterMe(new G4NeutronHPInelastic());
238 theNeutronCapture->RegisterMe(new G4NeutronHPCapture());
239 theNeutronFission->RegisterMe(new G4NeutronHPFission());
240 }
241
242 G4HadronicInteraction* theB;
243 if(bertFlag) theB = new G4CascadeInterface();
244 else theB = new G4BinaryCascade();
245 theB->SetMinEnergy(emin);
246 theB->SetMaxEnergy(maxEcascade);
247 hp->RegisterMe(theB);
248
249 if(glFlag)
250 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
251
252 G4HadronicInteraction* theC = new G4LCapture();
253 theC->SetMinEnergy(emin);
254 theNeutronCapture->RegisterMe(theC);
255
256 G4HadronicInteraction* theF = new G4LFission();
257 theF->SetMinEnergy(emin);
258 theNeutronFission->RegisterMe(theF);
259
260 } else if(pname == "pi-" || pname == "pi+") {
261 hp->AddDataSet(&thePiCross);
262 if(ftfFlag) hp->RegisterMe(theFTFModel);
263 else hp->RegisterMe(theQGSModel);
264
265 hp->RegisterMe(theBERT);
266 //if(bertFlag) hp->RegisterMe(theBERT);
267 //else hp->RegisterMe(theBIC);
268
269 if(glFlag)
270 hp->AddDataSet(new G4BGGPionInelasticXS(particle));
271
272 } else if(pname == "kaon-" ||
273 pname == "kaon+" ||
274 pname == "kaon0S" ||
275 pname == "kaon0L") {
276 hp->RegisterMe(theFTFModel);
277 hp->RegisterMe(theBERT);
278 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
279
280 } else if(pname == "lambda" ||
281 pname == "sigma-" ||
282 pname == "sigma+" ||
283 pname == "xi-" ||
284 pname == "xi0") {
285
286 hp->RegisterMe(theFTFModel);
287 hp->RegisterMe(theBERT);
288 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
289
290 } else if(pname == "anti_proton" || pname == "anti_neutron") {
291 hp->RegisterMe(theFTFModel);
292 hp->RegisterMe(theCHIPS);
293 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
294
295 } else {
296 hp->RegisterMe(theFTFModel);
297 hp->RegisterMe(theCHIPS);
298 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
299 }
300
301 if(verbose > 1)
302 G4cout << "### HadronInelasticQBBC: " << hp->GetProcessName()
303 << " added for " << pname << G4endl;
304 }
305 }
306}
Note: See TracBrowser for help on using the repository browser.