1 |
|
2 |
#include "IonPhysics.hh" |
3 |
|
4 |
#include "globals.hh" |
5 |
#include "G4ios.hh" |
6 |
|
7 |
|
8 |
#include "G4ParticleDefinition.hh" |
9 |
#include "G4ProcessManager.hh" |
10 |
//#include "G4LFission.hh" |
11 |
//#include "G4LCapture.hh" |
12 |
#include "G4Deuteron.hh" |
13 |
#include "G4Triton.hh" |
14 |
#include "G4He3.hh" |
15 |
#include "G4Alpha.hh" |
16 |
//#include "IonC12.hh" |
17 |
#include "G4GenericIon.hh" |
18 |
|
19 |
#include "G4ExcitationHandler.hh" |
20 |
#include "G4Evaporation.hh" |
21 |
#include "G4FermiBreakUp.hh" |
22 |
#include "G4StatMF.hh" |
23 |
#include "G4GeneratorPrecompoundInterface.hh" |
24 |
|
25 |
#include "G4HadronInelasticProcess.hh" |
26 |
#include "G4BinaryLightIonReaction.hh" |
27 |
#include "G4TripathiCrossSection.hh" |
28 |
#include "G4IonsShenCrossSection.hh" |
29 |
#include "G4LEDeuteronInelastic.hh" |
30 |
#include "G4LETritonInelastic.hh" |
31 |
#include "G4LEAlphaInelastic.hh" |
32 |
|
33 |
|
34 |
IonPhysics::IonPhysics(const G4String& name) |
35 |
: G4VPhysicsConstructor(name) |
36 |
{ |
37 |
} |
38 |
IonPhysics::~IonPhysics() |
39 |
{ |
40 |
} |
41 |
|
42 |
//#include "G4ParticleDefinition.hh" |
43 |
//#include "G4ParticleTable.hh" |
44 |
|
45 |
// Nuclei |
46 |
#include "G4IonConstructor.hh" |
47 |
|
48 |
void IonPhysics::ConstructParticle() |
49 |
{ |
50 |
// Construct light ions |
51 |
G4IonConstructor pConstructor; |
52 |
pConstructor.ConstructParticle(); |
53 |
} |
54 |
|
55 |
|
56 |
//#include "G4ProcessManager.hh" |
57 |
|
58 |
|
59 |
void IonPhysics::ConstructProcess() |
60 |
{ |
61 |
|
62 |
G4ParticleDefinition* particle = 0; |
63 |
G4ProcessManager* pmanager = 0; |
64 |
G4BinaryLightIonReaction* theBC = new G4BinaryLightIonReaction(); |
65 |
theBC->SetMinEnergy(80*MeV); |
66 |
theBC->SetMaxEnergy(20*GeV); |
67 |
|
68 |
G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection; |
69 |
G4IonsShenCrossSection * aShen = new G4IonsShenCrossSection; |
70 |
|
71 |
|
72 |
// Elastic Process |
73 |
theElasticModel = new G4LElastic(); |
74 |
theElasticProcess.RegisterMe(theElasticModel); |
75 |
|
76 |
// Generic Ion |
77 |
// pmanager = G4GenericIon::GenericIon()->GetProcessManager(); |
78 |
// add process |
79 |
|
80 |
|
81 |
|
82 |
// GenericIon |
83 |
particle = G4GenericIon::GenericIon(); |
84 |
pmanager = particle->GetProcessManager(); |
85 |
G4HadronInelasticProcess* theIPGenericIon = |
86 |
new G4HadronInelasticProcess("IonInelastic",particle); |
87 |
theIPGenericIon->AddDataSet(TripathiCrossSection); |
88 |
theIPGenericIon->AddDataSet(aShen); |
89 |
G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction; |
90 |
theGenIonBC->SetMinEnergy(0*MeV); |
91 |
theGenIonBC->SetMaxEnergy(10*GeV); |
92 |
theIPGenericIon->RegisterMe(theGenIonBC); |
93 |
pmanager->AddDiscreteProcess(theIPGenericIon); |
94 |
//------------------------------------------------- |
95 |
pmanager->AddDiscreteProcess(&theElasticProcess); |
96 |
pmanager->AddProcess(&fIonIonisation, ordInActive, 2, 2); |
97 |
pmanager->AddProcess(&fIonMultipleScattering); |
98 |
pmanager->SetProcessOrdering(&fIonMultipleScattering, idxAlongStep, 1); |
99 |
pmanager->SetProcessOrdering(&fIonMultipleScattering, idxPostStep, 1); |
100 |
//------------------------------------------------------------------------ |
101 |
|
102 |
// C12 |
103 |
// particle = IonC12::Ion(); |
104 |
// pmanager = particle->GetProcessManager(); |
105 |
// G4HadronInelasticProcess* theIPIonC12 = |
106 |
// new G4HadronInelasticProcess("IonC12Inelastic",particle); |
107 |
// theIPIonC12->AddDataSet(TripathiCrossSection); |
108 |
// theIPIonC12->AddDataSet(aShen); |
109 |
// theIPIonC12->RegisterMe(theGenIonBC); |
110 |
// pmanager->AddDiscreteProcess(theIPIonC12); |
111 |
//------------------------------------------------------------------------ |
112 |
// Deuteron |
113 |
particle = G4Deuteron::Deuteron(); |
114 |
pmanager = particle->GetProcessManager(); |
115 |
G4LEDeuteronInelastic* theDIModel = new G4LEDeuteronInelastic; |
116 |
theDIModel->SetMaxEnergy(100*MeV); |
117 |
theIPdeuteron.AddDataSet(TripathiCrossSection); |
118 |
theIPdeuteron.AddDataSet(aShen); |
119 |
theIPdeuteron.RegisterMe(theDIModel); |
120 |
theIPdeuteron.RegisterMe(theBC); |
121 |
pmanager->AddDiscreteProcess(&theIPdeuteron); |
122 |
//------------------------------------------------------ |
123 |
// pmanager = G4Deuteron::Deuteron()->GetProcessManager(); |
124 |
// add process |
125 |
pmanager->AddDiscreteProcess(&theElasticProcess); |
126 |
|
127 |
// fDeuteronModel = new G4LEDeuteronInelastic(); |
128 |
// fDeuteronProcess.RegisterMe(fDeuteronModel); |
129 |
// pmanager->AddDiscreteProcess(&fDeuteronProcess); |
130 |
|
131 |
pmanager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2); |
132 |
|
133 |
pmanager->AddProcess(&fDeuteronMultipleScattering); |
134 |
pmanager->SetProcessOrdering(&fDeuteronMultipleScattering, idxAlongStep, 1); |
135 |
pmanager->SetProcessOrdering(&fDeuteronMultipleScattering, idxPostStep, 1); |
136 |
//------------------------------------------------------------------------------ |
137 |
// Triton |
138 |
//----------------------------------------------------------------------------- |
139 |
particle = G4Triton::Triton(); |
140 |
pmanager = particle->GetProcessManager(); |
141 |
G4LETritonInelastic* theTIModel = new G4LETritonInelastic; |
142 |
theTIModel->SetMaxEnergy(100*MeV); |
143 |
theIPtriton.AddDataSet(TripathiCrossSection); |
144 |
theIPtriton.AddDataSet(aShen); |
145 |
theIPtriton.RegisterMe(theTIModel); |
146 |
theIPtriton.RegisterMe(theBC); |
147 |
pmanager->AddDiscreteProcess(&theIPtriton); |
148 |
pmanager = G4Triton::Triton()->GetProcessManager(); |
149 |
// add process |
150 |
//---------------------------------------------- |
151 |
pmanager->AddDiscreteProcess(&theElasticProcess); |
152 |
|
153 |
// fTritonModel = new G4LETritonInelastic(); |
154 |
// fTritonProcess.RegisterMe(fTritonModel); |
155 |
//pmanager->AddDiscreteProcess(&fTritonProcess); |
156 |
|
157 |
pmanager->AddProcess(&fTritonIonisation, ordInActive, 2, 2); |
158 |
|
159 |
pmanager->AddProcess(&fTritonMultipleScattering); |
160 |
pmanager->SetProcessOrdering(&fTritonMultipleScattering, idxAlongStep, 1); |
161 |
pmanager->SetProcessOrdering(&fTritonMultipleScattering, idxPostStep, 1); |
162 |
|
163 |
// Alpha |
164 |
|
165 |
particle = G4Alpha::Alpha(); |
166 |
pmanager = particle->GetProcessManager(); |
167 |
G4LEAlphaInelastic* theAIModel = new G4LEAlphaInelastic; |
168 |
theAIModel->SetMaxEnergy(100*MeV); |
169 |
theIPalpha.AddDataSet(TripathiCrossSection); |
170 |
theIPalpha.AddDataSet(aShen); |
171 |
theIPalpha.RegisterMe(theAIModel); |
172 |
theIPalpha.RegisterMe(theBC); |
173 |
pmanager->AddDiscreteProcess(&theIPalpha); |
174 |
//------------------------------------------------------------------------- |
175 |
// pmanager = G4Alpha::Alpha()->GetProcessManager(); |
176 |
// add process |
177 |
pmanager->AddDiscreteProcess(&theElasticProcess); |
178 |
|
179 |
// fAlphaModel = new G4LEAlphaInelastic(); |
180 |
// fAlphaProcess.RegisterMe(fAlphaModel); |
181 |
// pmanager->AddDiscreteProcess(&fAlphaProcess); |
182 |
|
183 |
pmanager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2); |
184 |
|
185 |
pmanager->AddProcess(&fAlphaMultipleScattering); |
186 |
pmanager->SetProcessOrdering(&fAlphaMultipleScattering, idxAlongStep, 1); |
187 |
pmanager->SetProcessOrdering(&fAlphaMultipleScattering, idxPostStep, 1); |
188 |
//------------------------------------------------------------------------ |
189 |
// He3 |
190 |
particle = G4He3::He3(); |
191 |
pmanager = particle->GetProcessManager(); |
192 |
G4HadronInelasticProcess* theIPHe3 = |
193 |
new G4HadronInelasticProcess("He3Inelastic",particle); |
194 |
theIPHe3->AddDataSet(TripathiCrossSection); |
195 |
theIPHe3->AddDataSet(aShen); |
196 |
theIPHe3->RegisterMe(theGenIonBC); |
197 |
pmanager->AddDiscreteProcess(theIPHe3); |
198 |
//------------------------------------------------------------------------ |
199 |
// pmanager = G4He3::He3()->GetProcessManager(); |
200 |
// add process |
201 |
pmanager->AddDiscreteProcess(&theElasticProcess); |
202 |
|
203 |
pmanager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2); |
204 |
|
205 |
pmanager->AddProcess(&fHe3MultipleScattering); |
206 |
pmanager->SetProcessOrdering(&fHe3MultipleScattering, idxAlongStep, 1); |
207 |
pmanager->SetProcessOrdering(&fHe3MultipleScattering, idxPostStep, 1); |
208 |
|
209 |
} |
210 |
|
211 |
|
212 |
|