source: trunk/examples/advanced/radiation_monitor/physics/src/RadmonPhysicsHadronsBertini.cc @ 1317

Last change on this file since 1317 was 807, checked in by garnier, 16 years ago

update

File size: 9.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//
27// File name:     RadmonPhysicsHadronsBertini.cc
28// Creation date: Nov 2005
29// Main author:   Riccardo Capra <capra@ge.infn.it>
30//
31// Id:            $Id: RadmonPhysicsHadronsBertini.cc,v 1.4 2006/06/29 16:18:45 gunter Exp $
32// Tag:           $Name:  $
33//
34
35#include "RadmonPhysicsHadronsBertini.hh"
36
37#include "G4Proton.hh"
38#include "G4PionPlus.hh"
39#include "G4PionMinus.hh"
40#include "G4Alpha.hh"
41
42#include "G4ProcessManager.hh"
43
44#include "G4LElastic.hh"
45#include "G4TheoFSGenerator.hh"
46#include "G4GeneratorPrecompoundInterface.hh"
47#include "G4PreCompoundModel.hh"
48#include "G4ExcitationHandler.hh"
49#include "G4QGSModel.hh"
50#include "G4QGSParticipants.hh"
51#include "G4ExcitedStringDecay.hh"
52#include "G4QGSMFragmentation.hh"
53#include "G4PiNuclearCrossSection.hh"
54#include "G4HadronElasticProcess.hh"
55#include "G4CascadeInterface.hh"
56#include "G4LEProtonInelastic.hh"
57#include "G4ProtonInelasticProcess.hh"
58#include "G4ProtonInelasticCrossSection.hh"
59#include "G4LEPionPlusInelastic.hh"
60#include "G4PionPlusInelasticProcess.hh"
61#include "G4LEPionMinusInelastic.hh"
62#include "G4PionMinusInelasticProcess.hh"
63#include "G4LEAlphaInelastic.hh"
64#include "G4BinaryLightIonReaction.hh"
65#include "G4AlphaInelasticProcess.hh"
66#include "G4TripathiCrossSection.hh"
67#include "G4IonsShenCrossSection.hh"
68
69
70
71RadmonVSubPhysicsListWithLabel *                RadmonPhysicsHadronsBertini :: New(void) const
72{
73 return new RadmonPhysicsHadronsBertini;
74}
75
76
77
78void                                            RadmonPhysicsHadronsBertini :: ConstructParticle(void)
79{
80 G4Proton::ProtonDefinition();
81 G4PionMinus::PionMinusDefinition();
82 G4Alpha::AlphaDefinition();
83 G4PionPlus::PionPlusDefinition();
84}
85
86
87
88void                                            RadmonPhysicsHadronsBertini :: ConstructProcess(void)
89{
90 // Models
91 G4LElastic * elasticModel(new G4LElastic);
92 
93 G4CascadeInterface * bertiniCascadeModel(new G4CascadeInterface());
94 bertiniCascadeModel->SetMaxEnergy(3.2*GeV);
95
96 G4TheoFSGenerator * qgspModel(new G4TheoFSGenerator());
97 G4GeneratorPrecompoundInterface * cascade(new G4GeneratorPrecompoundInterface());
98 cascade->SetDeExcitation(new G4PreCompoundModel(new G4ExcitationHandler()));
99 qgspModel->SetTransport(cascade);
100 G4QGSModel<G4QGSParticipants> * stringModel(new G4QGSModel<G4QGSParticipants>);
101 stringModel->SetFragmentationModel(new G4ExcitedStringDecay(new G4QGSMFragmentation()));
102 qgspModel->SetHighEnergyGenerator(stringModel);
103 qgspModel->SetMinEnergy(20*GeV);
104 qgspModel->SetMaxEnergy(100*TeV);
105 
106 G4PiNuclearCrossSection * piNuclear(new G4PiNuclearCrossSection());
107
108
109 
110 
111 
112 // Protons
113 G4ProcessManager * manager(G4Proton::ProtonDefinition()->GetProcessManager());
114
115
116
117 G4HadronElasticProcess * protonElasticProcess(new G4HadronElasticProcess());
118 protonElasticProcess->RegisterMe(elasticModel);
119 manager->AddDiscreteProcess(protonElasticProcess);
120
121
122
123 G4LEProtonInelastic * protonLEPModel(new G4LEProtonInelastic());
124 protonLEPModel->SetMinEnergy(2.8*GeV);
125 protonLEPModel->SetMaxEnergy(25.*GeV);
126
127 G4ProtonInelasticProcess * protonInelasticProcess(new G4ProtonInelasticProcess());
128 protonInelasticProcess->AddDataSet(new G4ProtonInelasticCrossSection());
129 protonInelasticProcess->RegisterMe(bertiniCascadeModel);
130 protonInelasticProcess->RegisterMe(protonLEPModel);
131 protonInelasticProcess->RegisterMe(qgspModel);
132 manager->AddDiscreteProcess(protonInelasticProcess);
133
134
135
136
137
138 // Pi+
139 manager=G4PionPlus::PionPlusDefinition()->GetProcessManager();
140
141
142
143 G4HadronElasticProcess * pionPlusElasticProcess(new G4HadronElasticProcess());
144 pionPlusElasticProcess->RegisterMe(elasticModel);
145 manager->AddDiscreteProcess(pionPlusElasticProcess);
146
147
148
149 G4LEPionPlusInelastic * pionPlusLEPModel(new G4LEPionPlusInelastic());
150 pionPlusLEPModel->SetMinEnergy(2.8*GeV);
151 pionPlusLEPModel->SetMaxEnergy(25.*GeV);
152
153 G4PionPlusInelasticProcess * pionPlusInelasticProcess(new G4PionPlusInelasticProcess());
154 pionPlusInelasticProcess->AddDataSet(piNuclear);
155 pionPlusInelasticProcess->RegisterMe(bertiniCascadeModel);
156 pionPlusInelasticProcess->RegisterMe(pionPlusLEPModel);
157 pionPlusInelasticProcess->RegisterMe(qgspModel);
158 manager->AddDiscreteProcess(pionPlusInelasticProcess);
159
160
161
162
163
164 // Pi-
165 manager=G4PionMinus::PionMinusDefinition()->GetProcessManager();
166
167
168
169 G4HadronElasticProcess * pionMinusElasticProcess(new G4HadronElasticProcess());
170 pionMinusElasticProcess->RegisterMe(elasticModel);
171 manager->AddDiscreteProcess(pionMinusElasticProcess);
172
173
174
175 G4LEPionMinusInelastic * pionMinusLEPModel(new G4LEPionMinusInelastic());
176 pionMinusLEPModel->SetMinEnergy(2.8*GeV);
177 pionMinusLEPModel->SetMaxEnergy(25.*GeV);
178
179 G4PionMinusInelasticProcess * pionMinusInelasticProcess(new G4PionMinusInelasticProcess());
180 pionMinusInelasticProcess->AddDataSet(piNuclear);
181 pionMinusInelasticProcess->RegisterMe(bertiniCascadeModel);
182 pionMinusInelasticProcess->RegisterMe(pionMinusLEPModel);
183 pionMinusInelasticProcess->RegisterMe(qgspModel);
184 manager->AddDiscreteProcess(pionMinusInelasticProcess);
185
186
187
188
189
190 // Alpha
191 manager=G4Alpha::AlphaDefinition()->GetProcessManager();
192
193
194
195 G4HadronElasticProcess * alphaElasticProcess(new G4HadronElasticProcess());
196 alphaElasticProcess->RegisterMe(elasticModel);
197 manager->AddDiscreteProcess(alphaElasticProcess);
198
199
200
201 G4LEAlphaInelastic * alphaLEPModel(new G4LEAlphaInelastic());
202 alphaLEPModel->SetMinEnergy(0.*GeV);
203 alphaLEPModel->SetMaxEnergy(25.*GeV);
204
205 G4BinaryLightIonReaction * alphaBertiniModel(new G4BinaryLightIonReaction());
206 alphaLEPModel->SetMinEnergy(80.*MeV);
207 alphaLEPModel->SetMaxEnergy(110.*GeV);
208 
209 G4AlphaInelasticProcess * alphaInelasticProcess(new G4AlphaInelasticProcess());
210 alphaInelasticProcess->AddDataSet(new G4TripathiCrossSection());
211 alphaInelasticProcess->AddDataSet(new G4IonsShenCrossSection());
212 alphaInelasticProcess->RegisterMe(alphaLEPModel);
213 alphaInelasticProcess->RegisterMe(alphaBertiniModel);
214 manager->AddDiscreteProcess(alphaInelasticProcess);
215}
216
217
218
219void                                            RadmonPhysicsHadronsBertini :: SetCuts(void)
220{
221}
222
223
224
225
226
227const RadmonPhysicsInfoList &                   RadmonPhysicsHadronsBertini :: Provides(void) const
228{
229 if (infoList.GetNPhysicsInfos()==0)
230 {
231  RadmonPhysicsInfo info;
232 
233  info.SetProcessName("Elastic");
234  info.SetParticleDefinition(G4Proton::ProtonDefinition());
235  info.SetMinEnergy(0.*eV);
236  info.SetMaxEnergy(DBL_MAX);
237  infoList.InsertPhysicsInfo(info);
238
239  info.SetProcessName("Inelastic");
240  info.SetParticleDefinition(G4Proton::ProtonDefinition());
241  info.SetMinEnergy(0.*eV);
242  info.SetMaxEnergy(100.*TeV);
243  infoList.InsertPhysicsInfo(info);
244
245  info.SetProcessName("Elastic");
246  info.SetParticleDefinition(G4PionPlus::PionPlusDefinition());
247  info.SetMinEnergy(0.*eV);
248  info.SetMaxEnergy(DBL_MAX);
249  infoList.InsertPhysicsInfo(info);
250
251  info.SetProcessName("Inelastic");
252  info.SetParticleDefinition(G4PionPlus::PionPlusDefinition());
253  info.SetMinEnergy(0.*eV);
254  info.SetMaxEnergy(100.*TeV);
255  infoList.InsertPhysicsInfo(info);
256
257  info.SetProcessName("Elastic");
258  info.SetParticleDefinition(G4PionMinus::PionMinusDefinition());
259  info.SetMinEnergy(0.*eV);
260  info.SetMaxEnergy(DBL_MAX);
261  infoList.InsertPhysicsInfo(info);
262
263  info.SetProcessName("Inelastic");
264  info.SetParticleDefinition(G4PionMinus::PionMinusDefinition());
265  info.SetMinEnergy(0.*eV);
266  info.SetMaxEnergy(100.*TeV);
267  infoList.InsertPhysicsInfo(info);
268
269  info.SetProcessName("Elastic");
270  info.SetParticleDefinition(G4Alpha::AlphaDefinition());
271  info.SetMinEnergy(0.*eV);
272  info.SetMaxEnergy(DBL_MAX);
273  infoList.InsertPhysicsInfo(info);
274
275  info.SetProcessName("Inelastic");
276  info.SetParticleDefinition(G4Alpha::AlphaDefinition());
277  info.SetMinEnergy(0.*eV);
278  info.SetMaxEnergy(110.*GeV);
279  infoList.InsertPhysicsInfo(info);
280 }
281 
282 return infoList;
283}
Note: See TracBrowser for help on using the repository browser.