4 // Author: I. Hrivnacova
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
12 #include "TG4PhysicsConstructorIon.h"
13 #include "TG4ProcessControlMap.h"
14 #include "TG4ProcessMCMap.h"
15 #include "TG4Globals.h"
17 #include <G4ParticleDefinition.hh>
18 #include <G4ProcessManager.hh>
19 #include "G4IonConstructor.hh"
21 //_____________________________________________________________________________
22 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(const G4String& name)
23 : TG4VPhysicsConstructor(name),
29 //_____________________________________________________________________________
30 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(G4int verboseLevel,
34 : TG4VPhysicsConstructor(name, verboseLevel),
36 fSetHadron(setHadron) {
40 //_____________________________________________________________________________
41 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(
42 const TG4PhysicsConstructorIon& right)
45 TG4Globals::Exception("TG4PhysicsConstructorIon is protected from copying.");
48 //_____________________________________________________________________________
49 TG4PhysicsConstructorIon::~TG4PhysicsConstructorIon() {
55 //_____________________________________________________________________________
56 TG4PhysicsConstructorIon&
57 TG4PhysicsConstructorIon::operator=(const TG4PhysicsConstructorIon &right)
59 // check assignement to self
60 if (this == &right) return *this;
62 TG4Globals::Exception(
63 "TG4PhysicsConstructorIon is protected from assigning.");
71 //_____________________________________________________________________________
72 void TG4PhysicsConstructorIon::ConstructHadProcessForGenericIon()
74 // Constructs electromagnetic processes for generic ion.
78 G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
79 pManager->AddDiscreteProcess(&fElasticProcess);
82 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
83 controlMap->Add(&fElasticProcess, kHADR);
85 // map to AliMCProcess codes
86 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
87 mcMap->Add(&fElasticProcess, kPHElastic);
90 //_____________________________________________________________________________
91 void TG4PhysicsConstructorIon::ConstructHadProcessForDeuteron()
93 // Constructs electromagnetic processes for deuteron.
97 G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
98 pManager->AddDiscreteProcess(&fElasticProcess);
100 fDeuteronModel = new G4LEDeuteronInelastic();
101 fDeuteronProcess.RegisterMe(fDeuteronModel);
102 pManager->AddDiscreteProcess(&fDeuteronProcess);
104 // map to G3 controls
105 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
106 controlMap->Add(&fDeuteronProcess, kHADR);
108 // map to AliMCProcess codes
109 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
110 mcMap->Add(&fDeuteronProcess, kPHInhelastic);
113 //_____________________________________________________________________________
114 void TG4PhysicsConstructorIon::ConstructHadProcessForTriton()
116 // Constructs electromagnetic processes for triton.
120 G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
121 pManager->AddDiscreteProcess(&fElasticProcess);
123 fTritonModel = new G4LETritonInelastic();
124 fTritonProcess.RegisterMe(fTritonModel);
125 pManager->AddDiscreteProcess(&fTritonProcess);
127 // map to G3 controls
128 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
129 controlMap->Add(&fTritonProcess, kHADR);
131 // map to AliMCProcess codes
132 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
133 mcMap->Add(&fTritonProcess, kPHInhelastic);
136 //_____________________________________________________________________________
137 void TG4PhysicsConstructorIon::ConstructHadProcessForAlpha()
139 // Constructs electromagnetic processes for alpha.
143 G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
144 pManager->AddDiscreteProcess(&fElasticProcess);
146 fAlphaModel = new G4LEAlphaInelastic();
147 fAlphaProcess.RegisterMe(fAlphaModel);
148 pManager->AddDiscreteProcess(&fAlphaProcess);
150 // map to G3 controls
151 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
152 controlMap->Add(&fAlphaProcess, kHADR);
154 // map to AliMCProcess codes
155 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
156 mcMap->Add(&fAlphaProcess, kPHInhelastic);
159 //_____________________________________________________________________________
160 void TG4PhysicsConstructorIon::ConstructHadProcessForHe3()
162 // Constructs electromagnetic processes for He3.
166 G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
167 pManager->AddDiscreteProcess(&fElasticProcess);
170 //_____________________________________________________________________________
171 void TG4PhysicsConstructorIon::ConstructEMProcessForGenericIon()
173 // Constructs electromagnetic processes for generic ion.
177 G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
178 pManager->AddProcess(&fIonIonisation, ordInActive, 2, 2);
179 pManager->AddProcess(&fIonMultipleScattering);
182 pManager->SetProcessOrdering(&fIonMultipleScattering, idxAlongStep, 1);
183 pManager->SetProcessOrdering(&fIonMultipleScattering, idxPostStep, 1);
185 // map to G3 controls
186 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
187 controlMap->Add(&fIonIonisation, kLOSS);
188 controlMap->Add(&fIonMultipleScattering, kMULS);
190 // map to AliMCProcess codes
191 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
192 mcMap->Add(&fIonIonisation, kPEnergyLoss);
193 mcMap->Add(&fIonMultipleScattering, kPMultipleScattering);
196 //_____________________________________________________________________________
197 void TG4PhysicsConstructorIon::ConstructEMProcessForDeuteron()
199 // Constructs electromagnetic processes for deuteron.
203 G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
205 pManager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2);
206 pManager->AddProcess(&fDeuteronMultipleScattering);
209 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxAlongStep, 1);
210 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxPostStep, 1);
212 // map to G3 controls
213 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
214 controlMap->Add(&fDeuteronIonisation, kLOSS);
215 controlMap->Add(&fDeuteronMultipleScattering, kMULS);
217 // map to AliMCProcess codes
218 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
219 mcMap->Add(&fDeuteronIonisation, kPEnergyLoss);
220 mcMap->Add(&fDeuteronMultipleScattering, kPMultipleScattering);
223 //_____________________________________________________________________________
224 void TG4PhysicsConstructorIon::ConstructEMProcessForTriton()
226 // Constructs electromagnetic processes for triton.
230 G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
232 pManager->AddProcess(&fTritonIonisation, ordInActive, 2, 2);
233 pManager->AddProcess(&fTritonMultipleScattering);
236 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxAlongStep, 1);
237 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxPostStep, 1);
239 // map to G3 controls
240 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
241 controlMap->Add(&fTritonIonisation, kLOSS);
242 controlMap->Add(&fTritonMultipleScattering, kMULS);
244 // map to AliMCProcess codes
245 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
246 mcMap->Add(&fTritonIonisation, kPEnergyLoss);
247 mcMap->Add(&fTritonMultipleScattering, kPMultipleScattering);
250 //_____________________________________________________________________________
251 void TG4PhysicsConstructorIon::ConstructEMProcessForAlpha()
253 // Constructs electromagnetic processes for alpha.
257 G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
259 pManager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2);
260 pManager->AddProcess(&fAlphaMultipleScattering);
263 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxAlongStep, 1);
264 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxPostStep, 1);
266 // map to G3 controls
267 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
268 controlMap->Add(&fAlphaIonisation, kLOSS);
269 controlMap->Add(&fAlphaMultipleScattering, kMULS);
271 // map to AliMCProcess codes
272 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
273 mcMap->Add(&fAlphaIonisation, kPEnergyLoss);
274 mcMap->Add(&fAlphaMultipleScattering, kPMultipleScattering);
277 //_____________________________________________________________________________
278 void TG4PhysicsConstructorIon::ConstructEMProcessForHe3()
280 // Constructs electromagnetic processes for He3.
284 G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
285 pManager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2);
286 pManager->AddProcess(&fHe3MultipleScattering);
289 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxAlongStep, 1);
290 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxPostStep, 1);
292 // map to G3 controls
293 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
294 controlMap->Add(&fHe3Ionisation, kLOSS);
295 controlMap->Add(&fHe3MultipleScattering, kMULS);
297 // map to AliMCProcess codes
298 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
299 mcMap->Add(&fHe3Ionisation, kPEnergyLoss);
300 mcMap->Add(&fHe3MultipleScattering, kPMultipleScattering);
306 //_____________________________________________________________________________
307 void TG4PhysicsConstructorIon::ConstructParticle()
309 // Instantiates particles.
312 // Construct light ions
313 G4IonConstructor pConstructor;
314 pConstructor.ConstructParticle();
317 //_____________________________________________________________________________
318 void TG4PhysicsConstructorIon::ConstructProcess()
320 // Constructs electromagnetic processes for e+.
325 fElasticModel = new G4LElastic();
326 fElasticProcess.RegisterMe(fElasticModel);
329 ConstructHadProcessForGenericIon();
330 ConstructHadProcessForDeuteron();
331 ConstructHadProcessForTriton();
332 ConstructHadProcessForAlpha();
333 ConstructHadProcessForHe3();
335 if (VerboseLevel() > 1) {
336 G4cout << "### Ion EM physics constructed." << G4endl;
342 ConstructEMProcessForGenericIon();
343 ConstructEMProcessForDeuteron();
344 ConstructEMProcessForTriton();
345 ConstructEMProcessForAlpha();
346 ConstructEMProcessForHe3();
348 if (VerboseLevel() > 1) {
349 G4cout << "### Ion hadron physics constructed." << G4endl;
353 if (VerboseLevel() > 0) {
354 G4cout << "### Ion physics constructed." << G4endl;