]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TGeant4/TG4PhysicsConstructorIon.cxx
StepProcesses(): OpBoundaryStatus process added to the list of processes
[u/mrichter/AliRoot.git] / TGeant4 / TG4PhysicsConstructorIon.cxx
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 //_____________________________________________________________________________
22 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(const G4String& name)
23   : G4VPhysicsConstructor(name)
24 {
25 //
26   SetVerboseLevel(1);
27 }
28
29 //_____________________________________________________________________________
30 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(
31                                      const TG4PhysicsConstructorIon& right)
32 {
33 //
34   TG4Globals::Exception("TG4PhysicsConstructorIon is protected from copying.");
35 }
36
37 //_____________________________________________________________________________
38 TG4PhysicsConstructorIon::~TG4PhysicsConstructorIon() {
39 //
40 }
41
42 // operators
43
44 //_____________________________________________________________________________
45 TG4PhysicsConstructorIon& 
46 TG4PhysicsConstructorIon::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 //_____________________________________________________________________________
61 void 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 //_____________________________________________________________________________
90 void 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 //_____________________________________________________________________________
124 void 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 //_____________________________________________________________________________
158 void 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 //_____________________________________________________________________________
192 void 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 //_____________________________________________________________________________
221 void TG4PhysicsConstructorIon::ConstructParticle()
222 {
223 // Instantiates particles.
224 // ---
225
226   //  Construct light ions
227   G4IonConstructor pConstructor;
228   pConstructor.ConstructParticle();  
229 }
230
231 //_____________________________________________________________________________
232 void 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 }