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

Last change on this file since 1167 was 988, checked in by garnier, 17 years ago

fichiers manquants

File size: 11.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.16 2009/02/19 12:45:42 vnivanch Exp $
27// GEANT4 tag $Name: geant4-09-02-ref-02 $
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 "G4StringChipsParticleLevelInterface.hh"
59#include "G4GeneratorPrecompoundInterface.hh"
60#include "G4QGSMFragmentation.hh"
61#include "G4LundStringFragmentation.hh"
62#include "G4ExcitedStringDecay.hh"
63
64#include "G4BinaryCascade.hh"
65#include "G4HadronFissionProcess.hh"
66#include "G4HadronCaptureProcess.hh"
67#include "G4LFission.hh"
68#include "G4LCapture.hh"
69
70#include "G4NeutronHPInelastic.hh"
71#include "G4NeutronHPFission.hh"
72#include "G4NeutronHPCapture.hh"
73
74#include "G4UInelasticCrossSection.hh"
75
76G4HadronInelasticQBBC::G4HadronInelasticQBBC(const G4String& name,
77 G4int ver, G4bool ftf, G4bool bert, G4bool chips, G4bool hp, G4bool glauber)
78 : G4VPhysicsConstructor(name), verbose(ver), ftfFlag(ftf), bertFlag(bert),
79 chipsFlag(chips), hpFlag(hp), glFlag(glauber), wasActivated(false)
80{
81 if(verbose > 1) G4cout << "### HadronInelasticQBBC bertFlag= "
82 << bertFlag <<G4endl;
83 theHPXSecI = 0;
84 theHPXSecC = 0;
85 theHPXSecF = 0;
86 theCascade = 0;
87 preCompound = 0;
88 theCHIPSCascade = 0;
89 theQuasiElastic = 0;
90 theQGStringDecay = 0;
91 theQGStringModel = 0;
92 theFTFBStringDecay = 0;
93 theFTFBStringModel = 0;
94 theFTFCStringDecay = 0;
95 theFTFCStringModel = 0;
96}
97
98G4HadronInelasticQBBC::~G4HadronInelasticQBBC()
99{
100 delete theCascade;
101 delete preCompound;
102 delete theCHIPSCascade;
103 delete theQuasiElastic;
104 delete theQGStringDecay;
105 delete theQGStringModel;
106 delete theFTFBStringDecay;
107 delete theFTFCStringDecay;
108 delete theFTFBStringModel;
109 delete theFTFCStringModel;
110 delete theHPXSecI;
111 delete theHPXSecC;
112 delete theHPXSecF;
113}
114
115void G4HadronInelasticQBBC::ConstructParticle()
116{
117 G4MesonConstructor pMesonConstructor;
118 pMesonConstructor.ConstructParticle();
119
120 G4BaryonConstructor pBaryonConstructor;
121 pBaryonConstructor.ConstructParticle();
122}
123
124void G4HadronInelasticQBBC::ConstructProcess()
125{
126 if(wasActivated) return;
127 wasActivated = true;
128
129 if(verbose > 1) {
130 G4cout << "### HadronInelasticQBBC Construct Process"
131 << " ftfFlag= " << ftfFlag << " bertFlag= " << bertFlag
132 << G4endl;
133 }
134 G4double minEstring = 9.5*GeV;
135 G4double maxEcascade = 7.5*GeV;
136 G4double minFTF = 4.5*GeV;
137 G4double maxFTF = 25.*GeV;
138
139 //Binary
140 G4HadronicInteraction* theBIC = new G4BinaryCascade();
141 theBIC->SetMinEnergy(0.0);
142 theBIC->SetMaxEnergy(maxEcascade);
143
144 //Bertini
145 G4HadronicInteraction* theBERT = new G4CascadeInterface();
146 theBERT->SetMinEnergy(0.0);
147 theBERT->SetMaxEnergy(maxEcascade);
148
149 //CHIPS
150 G4HadronicInteraction* theCHIPS = new G4StringChipsParticleLevelInterface();
151 theCHIPS->SetMinEnergy(0.0);
152 theCHIPS->SetMaxEnergy(maxEcascade);
153
154 //QGS
155 theCascade = new G4BinaryCascade();
156 preCompound = new G4GeneratorPrecompoundInterface();
157
158 theCHIPSCascade = new G4QStringChipsParticleLevelInterface;
159 G4TheoFSGenerator* theQGSModel = new G4TheoFSGenerator("QGSP");
160 theQGStringModel = new G4QGSModel< G4QGSParticipants >;
161 theQGStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation());
162 theQGStringModel->SetFragmentationModel(theQGStringDecay);
163 theQGSModel->SetTransport(preCompound);
164
165 theQuasiElastic = new G4QuasiElasticChannel();
166 theQGSModel->SetQuasiElasticChannel(theQuasiElastic);
167 theQGSModel->SetHighEnergyGenerator(theQGStringModel);
168 theQGSModel->SetMinEnergy(minEstring);
169 theQGSModel->SetMaxEnergy(100*TeV);
170
171 //FTFB
172 G4TheoFSGenerator* theFTFBModel = new G4TheoFSGenerator("FTFP");
173 theFTFBStringModel = new G4FTFModel();
174 theFTFBStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
175 theFTFBStringModel->SetFragmentationModel(theFTFBStringDecay);
176
177 // theFTFBModel->SetTransport(theCascade);
178 theFTFBModel->SetTransport(preCompound);
179 theFTFBModel->SetHighEnergyGenerator(theFTFBStringModel);
180 theFTFBModel->SetMinEnergy(minFTF);
181 theFTFBModel->SetMaxEnergy(100*TeV);
182
183 //FTFP
184 G4TheoFSGenerator* theFTFCModel = new G4TheoFSGenerator("FTFP");
185 theFTFCStringModel = new G4FTFModel();
186 theFTFCStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
187 theFTFCStringModel->SetFragmentationModel(theFTFCStringDecay);
188
189 theFTFCModel->SetTransport(preCompound);
190 theFTFCModel->SetHighEnergyGenerator(theFTFCStringModel);
191 theFTFCModel->SetMinEnergy(minFTF);
192 theFTFCModel->SetMaxEnergy(maxFTF);
193
194 theParticleIterator->reset();
195 while( (*theParticleIterator)() ) {
196 G4ParticleDefinition* particle = theParticleIterator->value();
197 G4String pname = particle->GetParticleName();
198 if(verbose > 1) G4cout << "### HadronInelasticQBBC: " << pname << G4endl;
199 if(pname == "anti_lambda" ||
200 pname == "anti_neutron" ||
201 pname == "anti_omega-" ||
202 pname == "anti_proton" ||
203 pname == "anti_sigma-" ||
204 pname == "anti_sigma+" ||
205 pname == "anti_xi-" ||
206 pname == "anti_xi0" ||
207 pname == "kaon-" ||
208 pname == "kaon+" ||
209 pname == "kaon0S" ||
210 pname == "kaon0L" ||
211 pname == "lambda" ||
212 pname == "neutron" ||
213 pname == "omega-" ||
214 pname == "pi-" ||
215 pname == "pi+" ||
216 pname == "proton" ||
217 pname == "sigma-" ||
218 pname == "sigma+" ||
219 pname == "xi-" ||
220 pname == "xi0") {
221
222 G4ProcessManager* pmanager = particle->GetProcessManager();
223 G4HadronInelasticProcess* hp =
224 new G4HadronInelasticProcess("hInelastic", particle);
225 pmanager->AddDiscreteProcess(hp);
226
227 if(pname == "proton") {
228 hp->AddDataSet(&theXSecP);
229
230 hp->RegisterMe(theQGSModel);
231 hp->RegisterMe(theFTFCModel);
232 //if(ftfFlag) hp->RegisterMe(theFTFCModel);
233 //else hp->RegisterMe(theQGSModel);
234
235 if(bertFlag) hp->RegisterMe(theBERT);
236 else hp->RegisterMe(theBIC);
237
238 if(glFlag)
239 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
240
241 } else if(pname == "neutron") {
242 hp->AddDataSet(&theXSecN);
243 hp->RegisterMe(theQGSModel);
244 hp->RegisterMe(theFTFCModel);
245 //if(ftfFlag) hp->RegisterMe(theFTFCModel);
246 //else hp->RegisterMe(theQGSModel);
247
248 G4HadronCaptureProcess* theNeutronCapture =
249 new G4HadronCaptureProcess("nCapture");
250 G4HadronFissionProcess* theNeutronFission =
251 new G4HadronFissionProcess("nFission");
252 pmanager->AddDiscreteProcess(theNeutronCapture);
253 pmanager->AddDiscreteProcess(theNeutronFission);
254
255 G4double emin = 0.0;
256 if(hpFlag) {
257 emin = 19.5*MeV;
258 theHPXSecI = new G4NeutronHPInelasticData;
259 theHPXSecC = new G4NeutronHPCaptureData;
260 theHPXSecF = new G4NeutronHPFissionData;
261 hp->AddDataSet(theHPXSecI);
262 theNeutronCapture->AddDataSet(theHPXSecC);
263 theNeutronFission->AddDataSet(theHPXSecF);
264 hp->RegisterMe(new G4NeutronHPInelastic());
265 theNeutronCapture->RegisterMe(new G4NeutronHPCapture());
266 theNeutronFission->RegisterMe(new G4NeutronHPFission());
267 }
268
269 G4HadronicInteraction* theB;
270 if(bertFlag) theB = new G4CascadeInterface();
271 else theB = new G4BinaryCascade();
272 theB->SetMinEnergy(emin);
273 theB->SetMaxEnergy(maxEcascade);
274 hp->RegisterMe(theB);
275
276 if(glFlag)
277 hp->AddDataSet(new G4BGGNucleonInelasticXS(particle));
278
279 G4HadronicInteraction* theC = new G4LCapture();
280 theC->SetMinEnergy(emin);
281 theNeutronCapture->RegisterMe(theC);
282
283 G4HadronicInteraction* theF = new G4LFission();
284 theF->SetMinEnergy(emin);
285 theNeutronFission->RegisterMe(theF);
286
287 } else if(pname == "pi-" || pname == "pi+") {
288 hp->AddDataSet(&thePiCross);
289 hp->RegisterMe(theQGSModel);
290 hp->RegisterMe(theFTFCModel);
291 //if(ftfFlag) hp->RegisterMe(theFTFCModel);
292 //else hp->RegisterMe(theQGSModel);
293
294 hp->RegisterMe(theBERT);
295 //if(bertFlag) hp->RegisterMe(theBERT);
296 //else hp->RegisterMe(theBIC);
297
298 if(glFlag)
299 hp->AddDataSet(new G4BGGPionInelasticXS(particle));
300
301 } else if(pname == "kaon-" ||
302 pname == "kaon+" ||
303 pname == "kaon0S" ||
304 pname == "kaon0L") {
305 hp->RegisterMe(theFTFBModel);
306 hp->RegisterMe(theBERT);
307 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
308
309 } else if(pname == "lambda" ||
310 pname == "sigma-" ||
311 pname == "sigma+" ||
312 pname == "xi-" ||
313 pname == "xi0") {
314
315 hp->RegisterMe(theFTFBModel);
316 hp->RegisterMe(theBERT);
317 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
318
319 } else if(pname == "anti_proton" || pname == "anti_neutron") {
320 hp->RegisterMe(theFTFBModel);
321 hp->RegisterMe(theCHIPS);
322 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
323
324 } else {
325 hp->RegisterMe(theFTFBModel);
326 hp->RegisterMe(theCHIPS);
327 //hp->AddDataSet(new G4UInelasticCrossSection(particle));
328 }
329
330 if(verbose > 1)
331 G4cout << "### HadronInelasticQBBC: " << hp->GetProcessName()
332 << " added for " << pname << G4endl;
333 }
334 }
335}
Note: See TracBrowser for help on using the repository browser.