]>
Commit | Line | Data |
---|---|---|
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 | 33 | TG4PhysicsConstructorEM::TG4PhysicsConstructorEM(const G4String& name) |
34 | : G4VPhysicsConstructor(name) | |
35 | { | |
36 | // | |
37 | SetVerboseLevel(1); | |
38 | } | |
39 | ||
72095f7c | 40 | //_____________________________________________________________________________ |
b94a914b | 41 | TG4PhysicsConstructorEM::~TG4PhysicsConstructorEM() { |
42 | // | |
43 | } | |
44 | ||
45 | // protected methods | |
46 | ||
72095f7c | 47 | //_____________________________________________________________________________ |
b94a914b | 48 | void TG4PhysicsConstructorEM::ConstructParticle() |
49 | { | |
50 | // The particles are constructed in the | |
51 | // TG4ModularPhysicsList. | |
52 | // --- | |
53 | } | |
54 | ||
72095f7c | 55 | //_____________________________________________________________________________ |
b94a914b | 56 | void 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 | } |