source: trunk/source/processes/electromagnetic/lowenergy/test/hTest/src/hTestHadronPhysicsList.cc @ 1353

Last change on this file since 1353 was 1350, checked in by garnier, 14 years ago

update to last version 4.9.4

File size: 14.4 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//---------------------------------------------------------------------------
27//
28//---------------------------------------------------------------------------
29//
30// ClassName:   hTestHadronPhysicsList
31// 
32// Description: Implementation file for Standard HadronPhysicsList
33//
34// Authors:     V.Ivanchenko 29/03/01
35//
36// Modified:
37//
38//----------------------------------------------------------------------------
39//
40
41//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
42//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
43
44#include "hTestHadronPhysicsList.hh"
45
46// Hadron Processes
47
48#include "G4HadronElasticProcess.hh"
49
50#include "G4PionPlusInelasticProcess.hh"
51#include "G4PionMinusInelasticProcess.hh"
52#include "G4KaonPlusInelasticProcess.hh"
53#include "G4KaonZeroSInelasticProcess.hh"
54#include "G4KaonZeroLInelasticProcess.hh"
55#include "G4KaonMinusInelasticProcess.hh"
56#include "G4ProtonInelasticProcess.hh"
57#include "G4AntiProtonInelasticProcess.hh"
58#include "G4NeutronInelasticProcess.hh"
59#include "G4AntiNeutronInelasticProcess.hh"
60/*
61#include "G4LambdaInelasticProcess.hh"
62#include "G4AntiLambdaInelasticProcess.hh"
63#include "G4SigmaPlusInelasticProcess.hh"
64#include "G4SigmaMinusInelasticProcess.hh"
65#include "G4AntiSigmaPlusInelasticProcess.hh"
66#include "G4AntiSigmaMinusInelasticProcess.hh"
67#include "G4XiZeroInelasticProcess.hh"
68#include "G4XiMinusInelasticProcess.hh"
69#include "G4AntiXiZeroInelasticProcess.hh"
70#include "G4AntiXiMinusInelasticProcess.hh"
71#include "G4OmegaMinusInelasticProcess.hh"
72#include "G4AntiOmegaMinusInelasticProcess.hh"
73*/
74
75#include "G4DeuteronInelasticProcess.hh"
76#include "G4TritonInelasticProcess.hh"
77#include "G4AlphaInelasticProcess.hh"
78
79// Low-energy Models
80
81#include "G4LElastic.hh"
82
83#include "G4LEPionPlusInelastic.hh"
84#include "G4LEPionMinusInelastic.hh"
85#include "G4LEKaonPlusInelastic.hh"
86#include "G4LEKaonZeroSInelastic.hh"
87#include "G4LEKaonZeroLInelastic.hh"
88#include "G4LEKaonMinusInelastic.hh"
89#include "G4LEProtonInelastic.hh"
90#include "G4LEAntiProtonInelastic.hh"
91#include "G4LENeutronInelastic.hh"
92#include "G4LEAntiNeutronInelastic.hh"
93/*
94#include "G4LELambdaInelastic.hh"
95#include "G4LEAntiLambdaInelastic.hh"
96#include "G4LESigmaPlusInelastic.hh"
97#include "G4LESigmaMinusInelastic.hh"
98#include "G4LEAntiSigmaPlusInelastic.hh"
99#include "G4LEAntiSigmaMinusInelastic.hh"
100#include "G4LEXiZeroInelastic.hh"
101#include "G4LEXiMinusInelastic.hh"
102#include "G4LEAntiXiZeroInelastic.hh"
103#include "G4LEAntiXiMinusInelastic.hh"
104#include "G4LEOmegaMinusInelastic.hh"
105#include "G4LEAntiOmegaMinusInelastic.hh"
106*/
107
108#include "G4LEDeuteronInelastic.hh"
109#include "G4LETritonInelastic.hh"
110#include "G4LEAlphaInelastic.hh"
111
112// High-energy Models
113
114#include "G4HEPionPlusInelastic.hh"
115#include "G4HEPionMinusInelastic.hh"
116#include "G4HEKaonPlusInelastic.hh"
117#include "G4HEKaonZeroInelastic.hh"
118#include "G4HEKaonZeroInelastic.hh"
119#include "G4HEKaonMinusInelastic.hh"
120#include "G4HEProtonInelastic.hh"
121#include "G4HEAntiProtonInelastic.hh"
122#include "G4HENeutronInelastic.hh"
123#include "G4HEAntiNeutronInelastic.hh"
124/*
125#include "G4HELambdaInelastic.hh"
126#include "G4HEAntiLambdaInelastic.hh"
127#include "G4HESigmaPlusInelastic.hh"
128#include "G4HESigmaMinusInelastic.hh"
129#include "G4HEAntiSigmaPlusInelastic.hh"
130#include "G4HEAntiSigmaMinusInelastic.hh"
131#include "G4HEXiZeroInelastic.hh"
132#include "G4HEXiMinusInelastic.hh"
133#include "G4HEAntiXiZeroInelastic.hh"
134#include "G4HEAntiXiMinusInelastic.hh"
135#include "G4HEOmegaMinusInelastic.hh"
136#include "G4HEAntiOmegaMinusInelastic.hh"
137*/
138// Stopping processes
139
140#ifdef TRIUMF_STOP_PIMINUS
141#include "G4PionMinusAbsorptionAtRest.hh"
142#else
143#include "G4PiMinusAbsorptionAtRest.hh"
144#endif
145#ifdef TRIUMF_STOP_KMINUS
146#include "G4KaonMinusAbsorption.hh"
147#else
148#include "G4KaonMinusAbsorptionAtRest.hh"
149#endif
150
151//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
152
153void hTestHadronPhysicsList::ConstructProcess()
154{
155   G4cout << "Standard Hadronic PhysicsList is initilized" << G4endl;
156   G4HadronElasticProcess* theElasticProcess = 
157                                    new G4HadronElasticProcess;
158   G4LElastic* theElasticModel = new G4LElastic;
159   theElasticProcess->RegisterMe(theElasticModel);
160
161   theParticleIterator->reset();
162   while ((*theParticleIterator)()) {
163      G4ParticleDefinition* particle = theParticleIterator->value();
164      G4ProcessManager* pmanager = particle->GetProcessManager();
165      G4String particleName = particle->GetParticleName();
166     
167      if (particleName == "pi+") {
168         pmanager->AddDiscreteProcess(theElasticProcess);
169         G4PionPlusInelasticProcess* theInelasticProcess = 
170                                new G4PionPlusInelasticProcess("inelastic");
171         
172         G4LEPionPlusInelastic* theLEInelasticModel = 
173                                new G4LEPionPlusInelastic;
174         theInelasticProcess->RegisterMe(theLEInelasticModel);
175         G4HEPionPlusInelastic* theHEInelasticModel = 
176                                new G4HEPionPlusInelastic;
177         theInelasticProcess->RegisterMe(theHEInelasticModel);
178         
179         pmanager->AddDiscreteProcess(theInelasticProcess);
180      }
181      else if (particleName == "pi-") {
182         pmanager->AddDiscreteProcess(theElasticProcess);
183         G4PionMinusInelasticProcess* theInelasticProcess = 
184                                new G4PionMinusInelasticProcess("inelastic");
185         
186         G4LEPionMinusInelastic* theLEInelasticModel = 
187                                new G4LEPionMinusInelastic;
188         theInelasticProcess->RegisterMe(theLEInelasticModel);
189         G4HEPionMinusInelastic* theHEInelasticModel = 
190                                new G4HEPionMinusInelastic;
191         theInelasticProcess->RegisterMe(theHEInelasticModel);
192         
193         pmanager->AddDiscreteProcess(theInelasticProcess);
194       
195#ifdef TRIUMF_STOP_PIMINUS
196         pmanager->AddRestProcess(new G4PionMinusAbsorptionAtRest, ordDefault);
197#else
198         pmanager->AddRestProcess(new G4PiMinusAbsorptionAtRest(
199                   G4String("PiMinusAbsorptionAtRest")), ordDefault);
200#endif
201
202      }
203      else if (particleName == "kaon+") {
204         pmanager->AddDiscreteProcess(theElasticProcess);
205         G4KaonPlusInelasticProcess* theInelasticProcess = 
206                                  new G4KaonPlusInelasticProcess("inelastic");
207         
208         G4LEKaonPlusInelastic* theLEInelasticModel = 
209                                  new G4LEKaonPlusInelastic;
210         theInelasticProcess->RegisterMe(theLEInelasticModel);
211         G4HEKaonPlusInelastic* theHEInelasticModel = 
212                                  new G4HEKaonPlusInelastic;
213         theInelasticProcess->RegisterMe(theHEInelasticModel);
214         
215         pmanager->AddDiscreteProcess(theInelasticProcess);
216      }
217      else if (particleName == "kaon0S") {
218         pmanager->AddDiscreteProcess(theElasticProcess);
219         G4KaonZeroSInelasticProcess* theInelasticProcess = 
220                             new G4KaonZeroSInelasticProcess("inelastic");
221         G4LEKaonZeroSInelastic* theLEInelasticModel = 
222                             new G4LEKaonZeroSInelastic;
223         theInelasticProcess->RegisterMe(theLEInelasticModel);
224         G4HEKaonZeroInelastic* theHEInelasticModel = 
225                             new G4HEKaonZeroInelastic;
226         theInelasticProcess->RegisterMe(theHEInelasticModel);
227         pmanager->AddDiscreteProcess(theInelasticProcess);
228      }
229      else if (particleName == "kaon0L") {
230         pmanager->AddDiscreteProcess(theElasticProcess);
231         G4KaonZeroLInelasticProcess* theInelasticProcess = 
232                             new G4KaonZeroLInelasticProcess("inelastic");
233         G4LEKaonZeroLInelastic* theLEInelasticModel = 
234                             new G4LEKaonZeroLInelastic;
235         theInelasticProcess->RegisterMe(theLEInelasticModel);
236         G4HEKaonZeroInelastic* theHEInelasticModel = 
237                             new G4HEKaonZeroInelastic;
238         theInelasticProcess->RegisterMe(theHEInelasticModel);
239         pmanager->AddDiscreteProcess(theInelasticProcess);
240      }
241      else if (particleName == "kaon-") {
242         pmanager->AddDiscreteProcess(theElasticProcess);
243         G4KaonMinusInelasticProcess* theInelasticProcess = 
244                                 new G4KaonMinusInelasticProcess("inelastic");
245         G4LEKaonMinusInelastic* theLEInelasticModel = 
246                                 new G4LEKaonMinusInelastic;
247         theInelasticProcess->RegisterMe(theLEInelasticModel);
248         G4HEKaonMinusInelastic* theHEInelasticModel = 
249                                 new G4HEKaonMinusInelastic;
250         theInelasticProcess->RegisterMe(theHEInelasticModel);
251         pmanager->AddDiscreteProcess(theInelasticProcess);
252#ifdef TRIUMF_STOP_KMINUS
253         pmanager->AddRestProcess(new G4KaonMinusAbsorption, ordDefault);
254#else
255         pmanager->AddRestProcess(new G4KaonMinusAbsorptionAtRest, ordDefault);
256#endif
257      }
258      else if (particleName == "proton") {
259         pmanager->AddDiscreteProcess(theElasticProcess);
260         G4ProtonInelasticProcess* theInelasticProcess = 
261                                    new G4ProtonInelasticProcess("inelastic");
262         
263         G4LEProtonInelastic* theLEInelasticModel = new G4LEProtonInelastic;
264         theInelasticProcess->RegisterMe(theLEInelasticModel);
265         G4HEProtonInelastic* theHEInelasticModel = new G4HEProtonInelastic;
266         theInelasticProcess->RegisterMe(theHEInelasticModel);
267         
268         pmanager->AddDiscreteProcess(theInelasticProcess);
269         
270      }
271      else if (particleName == "anti_proton") {
272         pmanager->AddDiscreteProcess(theElasticProcess);
273         G4AntiProtonInelasticProcess* theInelasticProcess = 
274                                new G4AntiProtonInelasticProcess("inelastic");
275         G4LEAntiProtonInelastic* theLEInelasticModel = 
276                                new G4LEAntiProtonInelastic;
277         theInelasticProcess->RegisterMe(theLEInelasticModel);
278         G4HEAntiProtonInelastic* theHEInelasticModel = 
279                                new G4HEAntiProtonInelastic;
280         theInelasticProcess->RegisterMe(theHEInelasticModel);
281         pmanager->AddDiscreteProcess(theInelasticProcess);
282      }
283      else if (particleName == "neutron") {
284         pmanager->AddDiscreteProcess(theElasticProcess);
285
286         G4NeutronInelasticProcess* theInelasticProcess = 
287                                    new G4NeutronInelasticProcess("inelastic");
288         
289         G4LENeutronInelastic* theLEInelasticModel = 
290                                    new G4LENeutronInelastic;
291         theInelasticProcess->RegisterMe(theLEInelasticModel);
292         G4HENeutronInelastic* theHEInelasticModel = 
293                                    new G4HENeutronInelastic;
294         theInelasticProcess->RegisterMe(theHEInelasticModel);
295     
296         pmanager->AddDiscreteProcess(theInelasticProcess);
297      } 
298      else if (particleName == "anti_neutron") {
299         pmanager->AddDiscreteProcess(theElasticProcess);
300         G4AntiNeutronInelasticProcess* theInelasticProcess = 
301                               new G4AntiNeutronInelasticProcess("inelastic");
302         G4LEAntiNeutronInelastic* theLEInelasticModel = 
303                               new G4LEAntiNeutronInelastic;
304         theInelasticProcess->RegisterMe(theLEInelasticModel);
305         G4HEAntiNeutronInelastic* theHEInelasticModel = 
306                               new G4HEAntiNeutronInelastic;
307         theInelasticProcess->RegisterMe(theHEInelasticModel);
308         pmanager->AddDiscreteProcess(theInelasticProcess);
309      }
310      else if (particleName == "deuteron") {
311         pmanager->AddDiscreteProcess(theElasticProcess);
312         G4DeuteronInelasticProcess* theInelasticProcess = 
313                            new G4DeuteronInelasticProcess("inelastic");
314         G4LEDeuteronInelastic* theLEInelasticModel = 
315                                 new G4LEDeuteronInelastic;
316         theInelasticProcess->RegisterMe(theLEInelasticModel);
317         pmanager->AddDiscreteProcess(theInelasticProcess);
318      }
319      else if (particleName == "triton") {
320         pmanager->AddDiscreteProcess(theElasticProcess);
321         G4TritonInelasticProcess* theInelasticProcess = 
322                            new G4TritonInelasticProcess("inelastic");
323         G4LETritonInelastic* theLEInelasticModel = 
324                                 new G4LETritonInelastic;
325         theInelasticProcess->RegisterMe(theLEInelasticModel);
326         pmanager->AddDiscreteProcess(theInelasticProcess);
327      }
328      else if (particleName == "alpha") {
329         pmanager->AddDiscreteProcess(theElasticProcess);
330         G4AlphaInelasticProcess* theInelasticProcess = 
331                            new G4AlphaInelasticProcess("inelastic");
332         G4LEAlphaInelastic* theLEInelasticModel = 
333                                 new G4LEAlphaInelastic;
334         theInelasticProcess->RegisterMe(theLEInelasticModel);
335         pmanager->AddDiscreteProcess(theInelasticProcess);
336      }
337   }
338}
339
340//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
341
342
343
Note: See TracBrowser for help on using the repository browser.