]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TGeant4/TG4PhysicsConstructorIon.cxx
added inheritance from TG4VPhysicsConstructor;
[u/mrichter/AliRoot.git] / TGeant4 / TG4PhysicsConstructorIon.cxx
CommitLineData
5d321328 1// $Id$
2// Category: physics
3//
4// Author: I. Hrivnacova
5//
6// Class TG4PhysicsConstructorIon
7// ------------------------------
8// See the class description in the header file.
9// According to ExN04IonPhysics.cc,v 1.1.2.1 2001/06/28 19:07:37 gunter Exp
10// GEANT4 tag Name: geant4-03-02
11
12#include "TG4PhysicsConstructorIon.h"
13#include "TG4ProcessControlMap.h"
14#include "TG4ProcessMCMap.h"
15#include "TG4Globals.h"
16
17#include <G4ParticleDefinition.hh>
18#include <G4ProcessManager.hh>
19#include "G4IonConstructor.hh"
20
21//_____________________________________________________________________________
22TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(const G4String& name)
23 : G4VPhysicsConstructor(name)
24{
25//
26 SetVerboseLevel(1);
27}
28
29//_____________________________________________________________________________
30TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(
31 const TG4PhysicsConstructorIon& right)
32{
33//
34 TG4Globals::Exception("TG4PhysicsConstructorIon is protected from copying.");
35}
36
37//_____________________________________________________________________________
38TG4PhysicsConstructorIon::~TG4PhysicsConstructorIon() {
39//
40}
41
42// operators
43
44//_____________________________________________________________________________
45TG4PhysicsConstructorIon&
46TG4PhysicsConstructorIon::operator=(const TG4PhysicsConstructorIon &right)
47{
48 // check assignement to self
49 if (this == &right) return *this;
50
51 TG4Globals::Exception(
52 "TG4PhysicsConstructorIon is protected from assigning.");
53
54 return *this;
55}
56
57
58// private methods
59
60//_____________________________________________________________________________
61void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
62{
63// Constructs electromagnetic processes for generic ion.
64// ---
65
66 // add process
67 G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
68 pManager->AddDiscreteProcess(&fElasticProcess);
69 pManager->AddProcess(&fIonIonisation, ordInActive, 2, 2);
70 pManager->AddProcess(&fIonMultipleScattering);
71
72 // set ordering
73 pManager->SetProcessOrdering(&fIonMultipleScattering, idxAlongStep, 1);
74 pManager->SetProcessOrdering(&fIonMultipleScattering, idxPostStep, 1);
75
76 // map to G3 controls
77 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
78 controlMap->Add(&fElasticProcess, kHADR);
79 controlMap->Add(&fIonIonisation, kLOSS);
80 controlMap->Add(&fIonMultipleScattering, kMULS);
81
82 // map to AliMCProcess codes
83 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
84 mcMap->Add(&fElasticProcess, kPHElastic);
85 mcMap->Add(&fIonIonisation, kPEnergyLoss);
86 mcMap->Add(&fIonMultipleScattering, kPMultipleScattering);
87}
88
89//_____________________________________________________________________________
90void TG4PhysicsConstructorIon::ConstructProcessForDeuteron()
91{
92// Constructs electromagnetic processes for deuteron.
93// ---
94
95 // add process
96 G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
97 pManager->AddDiscreteProcess(&fElasticProcess);
98
99 fDeuteronModel = new G4LEDeuteronInelastic();
100 fDeuteronProcess.RegisterMe(fDeuteronModel);
101 pManager->AddDiscreteProcess(&fDeuteronProcess);
102
103 pManager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2);
104 pManager->AddProcess(&fDeuteronMultipleScattering);
105
106 // set ordering
107 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxAlongStep, 1);
108 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxPostStep, 1);
109
110 // map to G3 controls
111 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
112 controlMap->Add(&fDeuteronProcess, kHADR);
113 controlMap->Add(&fDeuteronIonisation, kLOSS);
114 controlMap->Add(&fDeuteronMultipleScattering, kMULS);
115
116 // map to AliMCProcess codes
117 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
118 mcMap->Add(&fDeuteronProcess, kPHInhelastic);
119 mcMap->Add(&fDeuteronIonisation, kPEnergyLoss);
120 mcMap->Add(&fDeuteronMultipleScattering, kPMultipleScattering);
121}
122
123//_____________________________________________________________________________
124void TG4PhysicsConstructorIon::ConstructProcessForTriton()
125{
126// Constructs electromagnetic processes for triton.
127// ---
128
129 // add process
130 G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
131 pManager->AddDiscreteProcess(&fElasticProcess);
132
133 fTritonModel = new G4LETritonInelastic();
134 fTritonProcess.RegisterMe(fTritonModel);
135 pManager->AddDiscreteProcess(&fTritonProcess);
136
137 pManager->AddProcess(&fTritonIonisation, ordInActive, 2, 2);
138 pManager->AddProcess(&fTritonMultipleScattering);
139
140 // set ordering
141 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxAlongStep, 1);
142 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxPostStep, 1);
143
144 // map to G3 controls
145 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
146 controlMap->Add(&fTritonProcess, kHADR);
147 controlMap->Add(&fTritonIonisation, kLOSS);
148 controlMap->Add(&fTritonMultipleScattering, kMULS);
149
150 // map to AliMCProcess codes
151 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
152 mcMap->Add(&fTritonProcess, kPHInhelastic);
153 mcMap->Add(&fTritonIonisation, kPEnergyLoss);
154 mcMap->Add(&fTritonMultipleScattering, kPMultipleScattering);
155}
156
157//_____________________________________________________________________________
158void TG4PhysicsConstructorIon::ConstructProcessForAlpha()
159{
160// Constructs electromagnetic processes for alpha.
161// ---
162
163 // add process
164 G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
165 pManager->AddDiscreteProcess(&fElasticProcess);
166
167 fAlphaModel = new G4LEAlphaInelastic();
168 fAlphaProcess.RegisterMe(fAlphaModel);
169 pManager->AddDiscreteProcess(&fAlphaProcess);
170
171 pManager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2);
172 pManager->AddProcess(&fAlphaMultipleScattering);
173
174 // set ordering
175 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxAlongStep, 1);
176 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxPostStep, 1);
177
178 // map to G3 controls
179 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
180 controlMap->Add(&fAlphaProcess, kHADR);
181 controlMap->Add(&fAlphaIonisation, kLOSS);
182 controlMap->Add(&fAlphaMultipleScattering, kMULS);
183
184 // map to AliMCProcess codes
185 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
186 mcMap->Add(&fAlphaProcess, kPHInhelastic);
187 mcMap->Add(&fAlphaIonisation, kPEnergyLoss);
188 mcMap->Add(&fAlphaMultipleScattering, kPMultipleScattering);
189}
190
191//_____________________________________________________________________________
192void TG4PhysicsConstructorIon::ConstructProcessForHe3()
193{
194// Constructs electromagnetic processes for He3.
195// ---
196
197 // add process
198 G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
199 pManager->AddDiscreteProcess(&fElasticProcess);
200 pManager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2);
201 pManager->AddProcess(&fHe3MultipleScattering);
202
203 // set ordering
204 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxAlongStep, 1);
205 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxPostStep, 1);
206
207 // map to G3 controls
208 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
209 controlMap->Add(&fHe3Ionisation, kLOSS);
210 controlMap->Add(&fHe3MultipleScattering, kMULS);
211
212 // map to AliMCProcess codes
213 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
214 mcMap->Add(&fHe3Ionisation, kPEnergyLoss);
215 mcMap->Add(&fHe3MultipleScattering, kPMultipleScattering);
216}
217
218// protected methods
219
220//_____________________________________________________________________________
221void TG4PhysicsConstructorIon::ConstructParticle()
222{
223// Instantiates particles.
224// ---
225
226 // Construct light ions
227 G4IonConstructor pConstructor;
228 pConstructor.ConstructParticle();
229}
230
231//_____________________________________________________________________________
232void TG4PhysicsConstructorIon::ConstructProcess()
233{
234// Constructs electromagnetic processes for e+.
235// ---
236
237 // Elastic Process
238 fElasticModel = new G4LElastic();
239 fElasticProcess.RegisterMe(fElasticModel);
240
241 ConstructProcessForGenericIon();
242 ConstructProcessForDeuteron();
243 ConstructProcessForTriton();
244 ConstructProcessForAlpha();
245 ConstructProcessForHe3();
246
247 if (verboseLevel>0)
248 G4cout << "### Ion physics constructed." << G4endl;
249}