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 : G4VPhysicsConstructor(name)
29 //_____________________________________________________________________________
30 TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(
31 const TG4PhysicsConstructorIon& right)
34 TG4Globals::Exception("TG4PhysicsConstructorIon is protected from copying.");
37 //_____________________________________________________________________________
38 TG4PhysicsConstructorIon::~TG4PhysicsConstructorIon() {
44 //_____________________________________________________________________________
45 TG4PhysicsConstructorIon&
46 TG4PhysicsConstructorIon::operator=(const TG4PhysicsConstructorIon &right)
48 // check assignement to self
49 if (this == &right) return *this;
51 TG4Globals::Exception(
52 "TG4PhysicsConstructorIon is protected from assigning.");
60 //_____________________________________________________________________________
61 void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
63 // Constructs electromagnetic processes for generic ion.
67 G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
68 pManager->AddDiscreteProcess(&fElasticProcess);
69 pManager->AddProcess(&fIonIonisation, ordInActive, 2, 2);
70 pManager->AddProcess(&fIonMultipleScattering);
73 pManager->SetProcessOrdering(&fIonMultipleScattering, idxAlongStep, 1);
74 pManager->SetProcessOrdering(&fIonMultipleScattering, idxPostStep, 1);
77 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
78 controlMap->Add(&fElasticProcess, kHADR);
79 controlMap->Add(&fIonIonisation, kLOSS);
80 controlMap->Add(&fIonMultipleScattering, kMULS);
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);
89 //_____________________________________________________________________________
90 void TG4PhysicsConstructorIon::ConstructProcessForDeuteron()
92 // Constructs electromagnetic processes for deuteron.
96 G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
97 pManager->AddDiscreteProcess(&fElasticProcess);
99 fDeuteronModel = new G4LEDeuteronInelastic();
100 fDeuteronProcess.RegisterMe(fDeuteronModel);
101 pManager->AddDiscreteProcess(&fDeuteronProcess);
103 pManager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2);
104 pManager->AddProcess(&fDeuteronMultipleScattering);
107 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxAlongStep, 1);
108 pManager->SetProcessOrdering(&fDeuteronMultipleScattering, idxPostStep, 1);
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);
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);
123 //_____________________________________________________________________________
124 void TG4PhysicsConstructorIon::ConstructProcessForTriton()
126 // Constructs electromagnetic processes for triton.
130 G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
131 pManager->AddDiscreteProcess(&fElasticProcess);
133 fTritonModel = new G4LETritonInelastic();
134 fTritonProcess.RegisterMe(fTritonModel);
135 pManager->AddDiscreteProcess(&fTritonProcess);
137 pManager->AddProcess(&fTritonIonisation, ordInActive, 2, 2);
138 pManager->AddProcess(&fTritonMultipleScattering);
141 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxAlongStep, 1);
142 pManager->SetProcessOrdering(&fTritonMultipleScattering, idxPostStep, 1);
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);
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);
157 //_____________________________________________________________________________
158 void TG4PhysicsConstructorIon::ConstructProcessForAlpha()
160 // Constructs electromagnetic processes for alpha.
164 G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
165 pManager->AddDiscreteProcess(&fElasticProcess);
167 fAlphaModel = new G4LEAlphaInelastic();
168 fAlphaProcess.RegisterMe(fAlphaModel);
169 pManager->AddDiscreteProcess(&fAlphaProcess);
171 pManager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2);
172 pManager->AddProcess(&fAlphaMultipleScattering);
175 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxAlongStep, 1);
176 pManager->SetProcessOrdering(&fAlphaMultipleScattering, idxPostStep, 1);
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);
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);
191 //_____________________________________________________________________________
192 void TG4PhysicsConstructorIon::ConstructProcessForHe3()
194 // Constructs electromagnetic processes for He3.
198 G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
199 pManager->AddDiscreteProcess(&fElasticProcess);
200 pManager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2);
201 pManager->AddProcess(&fHe3MultipleScattering);
204 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxAlongStep, 1);
205 pManager->SetProcessOrdering(&fHe3MultipleScattering, idxPostStep, 1);
207 // map to G3 controls
208 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
209 controlMap->Add(&fHe3Ionisation, kLOSS);
210 controlMap->Add(&fHe3MultipleScattering, kMULS);
212 // map to AliMCProcess codes
213 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
214 mcMap->Add(&fHe3Ionisation, kPEnergyLoss);
215 mcMap->Add(&fHe3MultipleScattering, kPMultipleScattering);
220 //_____________________________________________________________________________
221 void TG4PhysicsConstructorIon::ConstructParticle()
223 // Instantiates particles.
226 // Construct light ions
227 G4IonConstructor pConstructor;
228 pConstructor.ConstructParticle();
231 //_____________________________________________________________________________
232 void TG4PhysicsConstructorIon::ConstructProcess()
234 // Constructs electromagnetic processes for e+.
238 fElasticModel = new G4LElastic();
239 fElasticProcess.RegisterMe(fElasticModel);
241 ConstructProcessForGenericIon();
242 ConstructProcessForDeuteron();
243 ConstructProcessForTriton();
244 ConstructProcessForAlpha();
245 ConstructProcessForHe3();
248 G4cout << "### Ion physics constructed." << G4endl;