]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TGeant4/TG4PhysicsConstructorEM.cxx
added comment only
[u/mrichter/AliRoot.git] / TGeant4 / TG4PhysicsConstructorEM.cxx
CommitLineData
b94a914b 1// $Id$
2// Category: physics
3//
e5967ab3 4// Author: I. Hrivnacova
5//
6// Class TG4PhysicsConstructorEM
7// ----------0000---------------
8// See the class description in the header file.
b94a914b 9// According to corresponding part of:
10// ExN04PhysicsList.cc,v 1.7 1999/12/15 14:49:26 gunter
11// GEANT4 tag Name: geant4-01-01
12
13#include "TG4PhysicsConstructorEM.h"
e5967ab3 14#include "TG4ProcessControlMap.h"
15#include "TG4ProcessMCMap.h"
16#include "TG4G3Control.h"
b94a914b 17
18#include <G4ParticleDefinition.hh>
19#include <G4ProcessManager.hh>
20#include <G4ComptonScattering.hh>
21#include <G4GammaConversion.hh>
22#include <G4PhotoElectricEffect.hh>
23#include <G4MultipleScattering.hh>
24#include <G4eIonisation.hh>
25#include <G4eBremsstrahlung.hh>
26#include <G4eplusAnnihilation.hh>
27#include <G4MuIonisation.hh>
28#include <G4MuBremsstrahlung.hh>
29#include <G4MuPairProduction.hh>
30#include <G4hIonisation.hh>
31
72095f7c 32//_____________________________________________________________________________
b94a914b 33TG4PhysicsConstructorEM::TG4PhysicsConstructorEM(const G4String& name)
34 : G4VPhysicsConstructor(name)
35{
36//
37 SetVerboseLevel(1);
38}
39
72095f7c 40//_____________________________________________________________________________
b94a914b 41TG4PhysicsConstructorEM::~TG4PhysicsConstructorEM() {
42//
43}
44
45// protected methods
46
72095f7c 47//_____________________________________________________________________________
b94a914b 48void TG4PhysicsConstructorEM::ConstructParticle()
49{
50// The particles are constructed in the
51// TG4ModularPhysicsList.
52// ---
53}
54
72095f7c 55//_____________________________________________________________________________
b94a914b 56void TG4PhysicsConstructorEM::ConstructProcess()
57{
58// Constructs electromagnetic processes.
59// ---
60
e5967ab3 61 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
62 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
63
b94a914b 64 theParticleIterator->reset();
65 while( (*theParticleIterator)() ){
66 G4ParticleDefinition* particle = theParticleIterator->value();
67 G4ProcessManager* pmanager = particle->GetProcessManager();
68 G4String particleName = particle->GetParticleName();
69
70 if (particleName == "gamma") {
e5967ab3 71 // construct processes for gamma
72 G4VProcess* theGammaConversion = new G4GammaConversion();
73 G4VProcess* theComptonScattering = new G4ComptonScattering();
74 G4VProcess* thePhotoElectricEffect = new G4PhotoElectricEffect();
75
76 // add processes
77 pmanager->AddDiscreteProcess(theGammaConversion);
78 pmanager->AddDiscreteProcess(theComptonScattering);
79 pmanager->AddDiscreteProcess(thePhotoElectricEffect);
80
81 // map to G3 controls
82 controlMap->Add(theGammaConversion, kPAIR);
83 controlMap->Add(theComptonScattering, kCOMP);
84 controlMap->Add(thePhotoElectricEffect, kPHOT);
85
86 // map to AliMCProcess codes
87 mcMap->Add(theGammaConversion, kPPair);
88 mcMap->Add(theComptonScattering, kPCompton);
89 mcMap->Add(thePhotoElectricEffect, kPPhotoelectric);
90 }
91 else if (particleName == "e-") {
92 // construct processes for electron
b94a914b 93 G4VProcess* theeminusMultipleScattering = new G4MultipleScattering();
94 G4VProcess* theeminusIonisation = new G4eIonisation();
95 G4VProcess* theeminusBremsstrahlung = new G4eBremsstrahlung();
e5967ab3 96
b94a914b 97 // add processes
98 pmanager->AddProcess(theeminusMultipleScattering);
99 pmanager->AddProcess(theeminusIonisation);
100 pmanager->AddProcess(theeminusBremsstrahlung);
e5967ab3 101
b94a914b 102 // set ordering for AlongStepDoIt
103 pmanager->SetProcessOrdering(theeminusMultipleScattering, idxAlongStep, 1);
104 pmanager->SetProcessOrdering(theeminusIonisation, idxAlongStep, 2);
e5967ab3 105
b94a914b 106 // set ordering for PostStepDoIt
107 pmanager->SetProcessOrdering(theeminusMultipleScattering, idxPostStep, 1);
108 pmanager->SetProcessOrdering(theeminusIonisation, idxPostStep, 2);
109 pmanager->SetProcessOrdering(theeminusBremsstrahlung, idxPostStep, 3);
110
e5967ab3 111 // map to G3 controls
112 controlMap->Add(theeminusMultipleScattering, kMULS);
113 controlMap->Add(theeminusIonisation, kLOSS);
114 controlMap->Add(theeminusBremsstrahlung, kBREM);
115
116 // map to AliMCProcess codes
117 mcMap->Add(theeminusMultipleScattering, kPMultipleScattering);
118 mcMap->Add(theeminusIonisation, kPEnergyLoss);
119 mcMap->Add(theeminusBremsstrahlung, kPBrem);
120 }
121 else if (particleName == "e+") {
b94a914b 122 // Construct processes for positron
123 G4VProcess* theeplusMultipleScattering = new G4MultipleScattering();
124 G4VProcess* theeplusIonisation = new G4eIonisation();
125 G4VProcess* theeplusBremsstrahlung = new G4eBremsstrahlung();
126 G4VProcess* theeplusAnnihilation = new G4eplusAnnihilation();
e5967ab3 127
b94a914b 128 // add processes
129 pmanager->AddProcess(theeplusMultipleScattering);
130 pmanager->AddProcess(theeplusIonisation);
131 pmanager->AddProcess(theeplusBremsstrahlung);
132 pmanager->AddProcess(theeplusAnnihilation);
e5967ab3 133
b94a914b 134 // set ordering for AtRestDoIt
135 pmanager->SetProcessOrderingToFirst(theeplusAnnihilation, idxAtRest);
e5967ab3 136
b94a914b 137 // set ordering for AlongStepDoIt
138 pmanager->SetProcessOrdering(theeplusMultipleScattering, idxAlongStep, 1);
139 pmanager->SetProcessOrdering(theeplusIonisation, idxAlongStep, 2);
e5967ab3 140
b94a914b 141 // set ordering for PostStepDoIt
142 pmanager->SetProcessOrdering(theeplusMultipleScattering, idxPostStep, 1);
143 pmanager->SetProcessOrdering(theeplusIonisation, idxPostStep, 2);
144 pmanager->SetProcessOrdering(theeplusBremsstrahlung, idxPostStep, 3);
145 pmanager->SetProcessOrdering(theeplusAnnihilation, idxPostStep, 4);
146
e5967ab3 147 // map to G3 controls
148 controlMap->Add(theeplusMultipleScattering, kMULS);
149 controlMap->Add(theeplusIonisation, kLOSS);
150 controlMap->Add(theeplusBremsstrahlung, kBREM);
151 controlMap->Add(theeplusAnnihilation, kANNI);
152
153 // map to AliMCProcess codes
154 mcMap->Add(theeplusMultipleScattering, kPMultipleScattering);
155 mcMap->Add(theeplusIonisation, kPEnergyLoss);
156 mcMap->Add(theeplusBremsstrahlung, kPBrem);
157 mcMap->Add(theeplusAnnihilation, kPAnnihilation);
158 }
159 else if (particleName == "mu+" ||
160 particleName == "mu-") {
161 // construct processes for muons
162 G4VProcess* aMultipleScattering = new G4MultipleScattering();
163 G4VProcess* aBremsstrahlung = new G4MuBremsstrahlung();
164 G4VProcess* aPairProduction = new G4MuPairProduction();
165 G4VProcess* anIonisation = new G4MuIonisation();
166
b94a914b 167 // add processes
e5967ab3 168 pmanager->AddProcess(anIonisation);
169 pmanager->AddProcess(aMultipleScattering);
170 pmanager->AddProcess(aBremsstrahlung);
171 pmanager->AddProcess(aPairProduction);
172
173 // set ordering for AlongStepDoIt
174 pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep, 1);
175 pmanager->SetProcessOrdering(anIonisation, idxAlongStep, 2);
176
177 // set ordering for PostStepDoIt
178 pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
179 pmanager->SetProcessOrdering(anIonisation, idxPostStep, 2);
180 pmanager->SetProcessOrdering(aBremsstrahlung, idxPostStep, 3);
181 pmanager->SetProcessOrdering(aPairProduction, idxPostStep, 4);
b94a914b 182
e5967ab3 183 // map to G3 controls
184 controlMap->Add(aMultipleScattering, kMULS);
185 controlMap->Add(aBremsstrahlung, kBREM);
186 controlMap->Add(anIonisation, kLOSS);
187 controlMap->Add(aPairProduction, kPAIR);
188
189 // map to AliMCProcess codes
190 mcMap->Add(aMultipleScattering, kPMultipleScattering);
191 mcMap->Add(aBremsstrahlung, kPBrem);
192 mcMap->Add(anIonisation, kPEnergyLoss);
193 mcMap->Add(aPairProduction, kPPair);
194 }
195 else if (particleName == "GenericIon") {
196 // construct processes for ions
197 G4VProcess* aionIonization = new G4hIonisation;
198 G4VProcess* aMultipleScattering = new G4MultipleScattering();
199 pmanager->AddProcess(aionIonization);
200 pmanager->AddProcess(aMultipleScattering);
201
202 // set ordering for AlongStepDoIt
203 pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep, 1);
204 pmanager->SetProcessOrdering(aionIonization, idxAlongStep, 2);
205
206 // set ordering for PostStepDoIt
207 pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
208 pmanager->SetProcessOrdering(aionIonization, idxPostStep, 2);
209
210 // map to G3 controls
211 controlMap->Add(aionIonization, kLOSS);
212 controlMap->Add(aMultipleScattering, kMULS);
213
214 // map to AliMCProcess codes
215 mcMap->Add(aionIonization, kPEnergyLoss);
216 mcMap->Add(aMultipleScattering, kPMultipleScattering);
217 }
218 else if ((!particle->IsShortLived()) &&
219 (particle->GetPDGCharge() != 0.0) &&
220 (particle->GetParticleName() != "chargedgeantino")) {
221 // construct processes for all others charged particles
222 // except geantino
223 G4VProcess* aMultipleScattering = new G4MultipleScattering();
224 G4VProcess* anIonisation = new G4hIonisation();
225
226 // add processes
227 pmanager->AddProcess(anIonisation);
228 pmanager->AddProcess(aMultipleScattering);
229
230 // set ordering for AlongStepDoIt
231 pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep, 1);
232 pmanager->SetProcessOrdering(anIonisation, idxAlongStep, 2);
233
234 // set ordering for PostStepDoIt
235 pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
236 pmanager->SetProcessOrdering(anIonisation, idxPostStep, 2);
237
238 // map to G3 controls
239 controlMap->Add(anIonisation, kLOSS);
240 controlMap->Add(aMultipleScattering, kMULS);
241
242 // map to AliMCProcess codes
243 mcMap->Add(anIonisation, kPEnergyLoss);
244 mcMap->Add(aMultipleScattering, kPMultipleScattering);
b94a914b 245 }
246 }
b94a914b 247 if (verboseLevel>0)
248 G4cout << "### Electromagnetic physics constructed." << G4endl;
249}