4 // Author: I. Hrivnacova
6 // Class TG4PhysicsConstructorHadron
7 // ---------------------------------
8 // See the class description in the header file.
9 // According to ExN04HadronPhysics.cc,v 1.1.2.1 2001/06/28 19:07:37 gunter Exp
10 // GEANT4 tag Name: geant4-03-02
12 #include "TG4PhysicsConstructorHadron.h"
13 #include "TG4ProcessControlMap.h"
14 #include "TG4ProcessMCMap.h"
15 #include "TG4Globals.h"
17 #include <G4ParticleDefinition.hh>
18 #include <G4ProcessManager.hh>
19 #include <G4MesonConstructor.hh>
20 #include <G4BaryonConstructor.hh>
21 #include <G4ShortLivedConstructor.hh>
23 //_____________________________________________________________________________
24 TG4PhysicsConstructorHadron::TG4PhysicsConstructorHadron(const G4String& name)
25 : G4VPhysicsConstructor(name)
31 //_____________________________________________________________________________
32 TG4PhysicsConstructorHadron::TG4PhysicsConstructorHadron(
33 const TG4PhysicsConstructorHadron& right)
36 TG4Globals::Exception("TG4PhysicsConstructorHadron is protected from copying.");
39 //_____________________________________________________________________________
40 TG4PhysicsConstructorHadron::~TG4PhysicsConstructorHadron() {
42 for (G4int i=0; i<fOtherProcesses.size(); i++) delete fOtherProcesses[i];
47 //_____________________________________________________________________________
48 TG4PhysicsConstructorHadron&
49 TG4PhysicsConstructorHadron::operator=(const TG4PhysicsConstructorHadron &right)
51 // check assignement to self
52 if (this == &right) return *this;
54 TG4Globals::Exception(
55 "TG4PhysicsConstructorHadron is protected from assigning.");
63 //_____________________________________________________________________________
64 void TG4PhysicsConstructorHadron::ConstructProcessForPionPlus()
66 // Construct processes for pi+.
70 G4ProcessManager* pManager = G4PionPlus::PionPlus()->GetProcessManager();
71 pManager->AddDiscreteProcess(&fElasticProcess);
73 fLEPionPlusModel = new G4LEPionPlusInelastic();
74 fHEPionPlusModel = new G4HEPionPlusInelastic();
75 fPionPlusInelastic.RegisterMe(fLEPionPlusModel);
76 fPionPlusInelastic.RegisterMe(fHEPionPlusModel);
77 pManager->AddDiscreteProcess(&fPionPlusInelastic);
79 pManager->AddProcess(&fPionPlusIonisation, ordInActive, 2, 2);
80 pManager->AddProcess(&fPionPlusMult);
83 pManager->SetProcessOrdering(&fPionPlusMult, idxAlongStep, 1);
84 pManager->SetProcessOrdering(&fPionPlusMult, idxPostStep, 1);
87 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
88 controlMap->Add(&fElasticProcess, kHADR);
89 controlMap->Add(&fPionPlusInelastic, kHADR);
90 controlMap->Add(&fPionPlusIonisation, kLOSS);
91 controlMap->Add(&fPionPlusMult, kMULS);
93 // map to G3 ALIMCProcess codes
94 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
95 mcMap->Add(&fElasticProcess, kPHElastic);
96 mcMap->Add(&fPionPlusInelastic, kPHInhelastic);
97 mcMap->Add(&fPionPlusIonisation, kPEnergyLoss);
98 mcMap->Add(&fPionPlusMult, kPMultipleScattering);
101 //_____________________________________________________________________________
102 void TG4PhysicsConstructorHadron::ConstructProcessForPionMinus()
104 // Construct processes for pi-.
107 // add process & set ordering
108 G4ProcessManager* pManager = G4PionMinus::PionMinus()->GetProcessManager();
109 pManager->AddDiscreteProcess(&fElasticProcess);
111 fLEPionMinusModel = new G4LEPionMinusInelastic();
112 fHEPionMinusModel = new G4HEPionMinusInelastic();
113 fPionMinusInelastic.RegisterMe(fLEPionMinusModel);
114 fPionMinusInelastic.RegisterMe(fHEPionMinusModel);
115 pManager->AddDiscreteProcess(&fPionMinusInelastic);
117 pManager->AddProcess(&fPionMinusIonisation, ordInActive, 2, 2);
119 pManager->AddProcess(&fPionMinusMult);
120 pManager->SetProcessOrdering(&fPionMinusMult, idxAlongStep, 1);
121 pManager->SetProcessOrdering(&fPionMinusMult, idxPostStep, 1);
123 pManager->AddRestProcess(&fPionMinusAbsorption, ordDefault);
125 // map to G3 controls
126 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
127 controlMap->Add(&fPionMinusInelastic, kHADR);
128 controlMap->Add(&fPionMinusIonisation, kLOSS);
129 controlMap->Add(&fPionMinusMult, kMULS);
130 controlMap->Add(&fPionMinusAbsorption, kHADR);
132 // map to G3 ALIMCProcess codes
133 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
134 mcMap->Add(&fPionMinusInelastic, kPHInhelastic);
135 mcMap->Add(&fPionMinusIonisation, kPEnergyLoss);
136 mcMap->Add(&fPionMinusMult, kPMultipleScattering);
137 mcMap->Add(&fPionMinusAbsorption, kPNuclearAbsorption);
140 //_____________________________________________________________________________
141 void TG4PhysicsConstructorHadron::ConstructProcessForKaonPlus()
143 // Construct processes for K+.
147 G4ProcessManager* pManager = G4KaonPlus::KaonPlus()->GetProcessManager();
148 pManager->AddDiscreteProcess(&fElasticProcess);
150 fLEKaonPlusModel = new G4LEKaonPlusInelastic();
151 fHEKaonPlusModel = new G4HEKaonPlusInelastic();
152 fKaonPlusInelastic.RegisterMe(fLEKaonPlusModel);
153 fKaonPlusInelastic.RegisterMe(fHEKaonPlusModel);
154 pManager->AddDiscreteProcess(&fKaonPlusInelastic);
156 pManager->AddProcess(&fKaonPlusIonisation, ordInActive, 2, 2);
157 pManager->AddProcess(&fKaonPlusMult);
160 pManager->SetProcessOrdering(&fKaonPlusMult, idxAlongStep, 1);
161 pManager->SetProcessOrdering(&fKaonPlusMult, idxPostStep, 1);
163 // map to G3 controls
164 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
165 controlMap->Add(&fKaonPlusInelastic, kHADR);
166 controlMap->Add(&fKaonPlusIonisation, kLOSS);
167 controlMap->Add(&fKaonPlusMult, kMULS);
169 // map to G3 ALIMCProcess codes
170 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
171 mcMap->Add(&fKaonPlusInelastic, kPHInhelastic);
172 mcMap->Add(&fKaonPlusIonisation, kPEnergyLoss);
173 mcMap->Add(&fKaonPlusMult, kPMultipleScattering);
176 //_____________________________________________________________________________
177 void TG4PhysicsConstructorHadron::ConstructProcessForKaonMinus()
179 // Construct processes for K-.
182 // add process & set ordering
183 G4ProcessManager* pManager = G4KaonMinus::KaonMinus()->GetProcessManager();
184 pManager->AddDiscreteProcess(&fElasticProcess);
186 fLEKaonMinusModel = new G4LEKaonMinusInelastic();
187 fHEKaonMinusModel = new G4HEKaonMinusInelastic();
188 fKaonMinusInelastic.RegisterMe(fLEKaonMinusModel);
189 fKaonMinusInelastic.RegisterMe(fHEKaonMinusModel);
190 pManager->AddDiscreteProcess(&fKaonMinusInelastic);
192 pManager->AddProcess(&fKaonMinusIonisation, ordInActive, 2, 2);
194 pManager->AddProcess(&fKaonMinusMult);
195 pManager->SetProcessOrdering(&fKaonMinusMult, idxAlongStep, 1);
196 pManager->SetProcessOrdering(&fKaonMinusMult, idxPostStep, 1);
198 pManager->AddRestProcess(&fKaonMinusAbsorption, ordDefault);
200 // map to G3 controls
201 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
202 controlMap->Add(&fKaonMinusInelastic, kHADR);
203 controlMap->Add(&fKaonMinusIonisation, kLOSS);
204 controlMap->Add(&fKaonMinusMult, kMULS);
205 controlMap->Add(&fKaonMinusAbsorption, kHADR);
207 // map to G3 ALIMCProcess codes
208 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
209 mcMap->Add(&fKaonMinusInelastic, kPHInhelastic);
210 mcMap->Add(&fKaonMinusIonisation, kPEnergyLoss);
211 mcMap->Add(&fKaonMinusMult, kPMultipleScattering);
212 mcMap->Add(&fKaonMinusAbsorption, kPNuclearAbsorption);
215 //_____________________________________________________________________________
216 void TG4PhysicsConstructorHadron::ConstructProcessForKaonZeroLong()
218 // Construct processes for K0L.
222 G4ProcessManager* pManager
223 = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
224 pManager->AddDiscreteProcess(&fElasticProcess);
226 fLEKaonZeroLModel = new G4LEKaonZeroLInelastic();
227 fHEKaonZeroLModel = new G4HEKaonZeroInelastic();
228 fKaonZeroLInelastic.RegisterMe(fLEKaonZeroLModel);
229 fKaonZeroLInelastic.RegisterMe(fHEKaonZeroLModel);
230 pManager->AddDiscreteProcess(&fKaonZeroLInelastic);
232 // map to G3 controls
233 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
234 controlMap->Add(&fKaonZeroLInelastic, kHADR);
236 // map to G3 ALIMCProcess codes
237 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
238 mcMap->Add(&fKaonZeroLInelastic, kPHInhelastic);
241 //_____________________________________________________________________________
242 void TG4PhysicsConstructorHadron::ConstructProcessForKaonZeroShort()
244 // Construct processes for K0S.
248 G4ProcessManager* pManager
249 = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
250 pManager->AddDiscreteProcess(&fElasticProcess);
252 fLEKaonZeroSModel = new G4LEKaonZeroSInelastic();
253 fHEKaonZeroSModel = new G4HEKaonZeroInelastic();
254 fKaonZeroSInelastic.RegisterMe(fLEKaonZeroSModel);
255 fKaonZeroSInelastic.RegisterMe(fHEKaonZeroSModel);
256 pManager->AddDiscreteProcess(&fKaonZeroSInelastic);
258 // map to G3 controls
259 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
260 controlMap->Add(&fKaonZeroSInelastic, kHADR);
262 // map to G3 ALIMCProcess codes
263 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
264 mcMap->Add(&fKaonZeroSInelastic, kPHInhelastic);
267 //_____________________________________________________________________________
268 void TG4PhysicsConstructorHadron::ConstructProcessForProton()
270 // Construct processes for proton.
274 G4ProcessManager* pManager = G4Proton::Proton()->GetProcessManager();
275 pManager->AddDiscreteProcess(&fElasticProcess);
277 fLEProtonModel = new G4LEProtonInelastic();
278 fHEProtonModel = new G4HEProtonInelastic();
279 fProtonInelastic.RegisterMe(fLEProtonModel);
280 fProtonInelastic.RegisterMe(fHEProtonModel);
281 pManager->AddDiscreteProcess(&fProtonInelastic);
283 pManager->AddProcess(&fProtonIonisation, ordInActive, 2, 2);
284 pManager->AddProcess(&fProtonMult);
287 pManager->SetProcessOrdering(&fProtonMult, idxAlongStep, 1);
288 pManager->SetProcessOrdering(&fProtonMult, idxPostStep, 1);
290 // map to G3 controls
291 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
292 controlMap->Add(&fProtonInelastic, kHADR);
293 controlMap->Add(&fProtonIonisation, kLOSS);
294 controlMap->Add(&fProtonMult, kMULS);
296 // map to G3 ALIMCProcess codes
297 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
298 mcMap->Add(&fProtonInelastic, kPHInhelastic);
299 mcMap->Add(&fProtonIonisation, kPEnergyLoss);
300 mcMap->Add(&fProtonMult, kPMultipleScattering);
303 //_____________________________________________________________________________
304 void TG4PhysicsConstructorHadron::ConstructProcessForAntiProton()
306 // Construct processes for anti-proton.
309 // add process & set ordering
310 G4ProcessManager* pManager = G4AntiProton::AntiProton()->GetProcessManager();
311 pManager->AddDiscreteProcess(&fElasticProcess);
313 fLEAntiProtonModel = new G4LEAntiProtonInelastic();
314 fHEAntiProtonModel = new G4HEAntiProtonInelastic();
315 fAntiProtonInelastic.RegisterMe(fLEAntiProtonModel);
316 fAntiProtonInelastic.RegisterMe(fHEAntiProtonModel);
317 pManager->AddDiscreteProcess(&fAntiProtonInelastic);
319 pManager->AddProcess(&fAntiProtonIonisation, ordInActive, 2, 2);
321 pManager->AddProcess(&fAntiProtonMult);
322 pManager->SetProcessOrdering(&fAntiProtonMult, idxAlongStep, 1);
323 pManager->SetProcessOrdering(&fAntiProtonMult, idxPostStep, 1);
325 pManager->AddRestProcess(&fAntiProtonAnnihilation);
327 // map to G3 controls
328 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
329 controlMap->Add(&fAntiProtonInelastic, kHADR);
330 controlMap->Add(&fAntiProtonIonisation, kLOSS);
331 controlMap->Add(&fAntiProtonMult, kMULS);
332 controlMap->Add(&fAntiProtonAnnihilation, kHADR);
334 // map to G3 ALIMCProcess codes
335 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
336 mcMap->Add(&fAntiProtonInelastic, kPHInhelastic);
337 mcMap->Add(&fAntiProtonIonisation, kPEnergyLoss);
338 mcMap->Add(&fAntiProtonMult, kPMultipleScattering);
339 mcMap->Add(&fAntiProtonAnnihilation, kPPbarAnnihilation);
342 //_____________________________________________________________________________
343 void TG4PhysicsConstructorHadron::ConstructProcessForNeutron()
345 // Construct processes for neutron.
349 G4ProcessManager* pManager = G4Neutron::Neutron()->GetProcessManager();
350 pManager->AddDiscreteProcess(&fElasticProcess);
352 fLENeutronModel = new G4LENeutronInelastic();
353 fHENeutronModel = new G4HENeutronInelastic();
354 fNeutronInelastic.RegisterMe(fLENeutronModel);
355 fNeutronInelastic.RegisterMe(fHENeutronModel);
356 pManager->AddDiscreteProcess(&fNeutronInelastic);
358 //fNeutronFissionModel = new G4LFission();
359 //fNeutronFission.RegisterMe(fNeutronFissionModel);
360 //pManager->AddDiscreteProcess(&NeutronFission);
362 //fNeutronCaptureModel = new G4LCapture();
363 //fNeutronCapture.RegisterMe(fNeutronCaptureModel);
364 //pManager->AddDiscreteProcess(&fNeutronCapture);
366 // map to G3 controls
367 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
368 controlMap->Add(&fNeutronInelastic, kHADR);
370 // map to G3 ALIMCProcess codes
371 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
372 mcMap->Add(&fNeutronInelastic, kPHInhelastic);
375 //_____________________________________________________________________________
376 void TG4PhysicsConstructorHadron::ConstructProcessForAntiNeutron()
378 // Construct processes for anti-neutron.
382 G4ProcessManager* pManager = G4AntiNeutron::AntiNeutron()->GetProcessManager();
383 pManager->AddDiscreteProcess(&fElasticProcess);
385 fLEAntiNeutronModel = new G4LEAntiNeutronInelastic();
386 fHEAntiNeutronModel = new G4HEAntiNeutronInelastic();
387 fAntiNeutronInelastic.RegisterMe(fLEAntiNeutronModel);
388 fAntiNeutronInelastic.RegisterMe(fHEAntiNeutronModel);
389 pManager->AddDiscreteProcess(&fAntiNeutronInelastic);
391 pManager->AddRestProcess(&fAntiNeutronAnnihilation);
393 // map to G3 controls
394 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
395 controlMap->Add(&fAntiNeutronInelastic, kHADR);
396 controlMap->Add(&fAntiNeutronAnnihilation, kHADR);
398 // map to G3 ALIMCProcess codes
399 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
400 mcMap->Add(&fAntiNeutronInelastic, kPHInhelastic);
401 mcMap->Add(&fAntiNeutronAnnihilation, kPNoProcess);
404 //_____________________________________________________________________________
405 void TG4PhysicsConstructorHadron::ConstructProcessForLambda()
407 // Construct processes for Lambda.
411 G4ProcessManager* pManager = G4Lambda::Lambda()->GetProcessManager();
412 pManager->AddDiscreteProcess(&fElasticProcess);
414 fLELambdaModel = new G4LELambdaInelastic();
415 fHELambdaModel = new G4HELambdaInelastic();
416 fLambdaInelastic.RegisterMe(fLELambdaModel);
417 fLambdaInelastic.RegisterMe(fHELambdaModel);
418 pManager->AddDiscreteProcess(&fLambdaInelastic);
420 // map to G3 controls
421 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
422 controlMap->Add(&fLambdaInelastic, kHADR);
424 // map to G3 ALIMCProcess codes
425 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
426 mcMap->Add(&fLambdaInelastic, kPHInhelastic);
429 //_____________________________________________________________________________
430 void TG4PhysicsConstructorHadron::ConstructProcessForAntiLambda()
432 // Construct processes for anti-Lambda.
436 G4ProcessManager* pManager = G4AntiLambda::AntiLambda()->GetProcessManager();
437 pManager->AddDiscreteProcess(&fElasticProcess);
439 fLEAntiLambdaModel = new G4LEAntiLambdaInelastic();
440 fHEAntiLambdaModel = new G4HEAntiLambdaInelastic();
441 fAntiLambdaInelastic.RegisterMe(fLEAntiLambdaModel);
442 fAntiLambdaInelastic.RegisterMe(fHEAntiLambdaModel);
443 pManager->AddDiscreteProcess(&fAntiLambdaInelastic);
445 // map to G3 controls
446 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
447 controlMap->Add(&fAntiLambdaInelastic, kHADR);
449 // map to G3 ALIMCProcess codes
450 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
451 mcMap->Add(&fAntiLambdaInelastic, kPHInhelastic);
454 //_____________________________________________________________________________
455 void TG4PhysicsConstructorHadron::ConstructProcessForSigmaMinus()
457 // Construct processes for Sigma-.
460 // add process & set ordering
461 G4ProcessManager* pManager = G4SigmaMinus::SigmaMinus()->GetProcessManager();
462 pManager->AddDiscreteProcess(&fElasticProcess);
464 fLESigmaMinusModel = new G4LESigmaMinusInelastic();
465 fHESigmaMinusModel = new G4HESigmaMinusInelastic();
466 fSigmaMinusInelastic.RegisterMe(fLESigmaMinusModel);
467 fSigmaMinusInelastic.RegisterMe(fHESigmaMinusModel);
468 pManager->AddDiscreteProcess(&fSigmaMinusInelastic);
470 pManager->AddProcess(&fSigmaMinusIonisation, ordInActive, 2, 2);
472 pManager->AddProcess(&fSigmaMinusMult);
473 pManager->SetProcessOrdering(&fSigmaMinusMult, idxAlongStep, 1);
474 pManager->SetProcessOrdering(&fSigmaMinusMult, idxPostStep, 1);
476 // map to G3 controls
477 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
478 controlMap->Add(&fSigmaMinusInelastic, kHADR);
479 controlMap->Add(&fSigmaMinusIonisation, kLOSS);
480 controlMap->Add(&fSigmaMinusMult, kMULS);
482 // map to G3 ALIMCProcess codes
483 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
484 mcMap->Add(&fSigmaMinusInelastic, kPHInhelastic);
485 mcMap->Add(&fSigmaMinusIonisation, kPEnergyLoss);
486 mcMap->Add(&fSigmaMinusMult, kPMultipleScattering);
489 //_____________________________________________________________________________
490 void TG4PhysicsConstructorHadron::ConstructProcessForAntiSigmaMinus()
492 // Construct processes for anti-Sigma-.
495 // add process & set ordering
496 G4ProcessManager* pManager
497 = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
498 pManager->AddDiscreteProcess(&fElasticProcess);
500 fLEAntiSigmaMinusModel = new G4LEAntiSigmaMinusInelastic();
501 fHEAntiSigmaMinusModel = new G4HEAntiSigmaMinusInelastic();
502 fAntiSigmaMinusInelastic.RegisterMe(fLEAntiSigmaMinusModel);
503 fAntiSigmaMinusInelastic.RegisterMe(fHEAntiSigmaMinusModel);
504 pManager->AddDiscreteProcess(&fAntiSigmaMinusInelastic);
506 pManager->AddProcess(&fAntiSigmaMinusIonisation, ordInActive, 2, 2);
508 pManager->AddProcess(&fAntiSigmaMinusMult);
509 pManager->SetProcessOrdering(&fAntiSigmaMinusMult, idxAlongStep, 1);
510 pManager->SetProcessOrdering(&fAntiSigmaMinusMult, idxPostStep, 1);
512 // map to G3 controls
513 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
514 controlMap->Add(&fAntiSigmaMinusInelastic, kHADR);
515 controlMap->Add(&fAntiSigmaMinusIonisation, kLOSS);
516 controlMap->Add(&fAntiSigmaMinusMult, kMULS);
518 // map to G3 ALIMCProcess codes
519 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
520 mcMap->Add(&fAntiSigmaMinusInelastic, kPHInhelastic);
521 mcMap->Add(&fAntiSigmaMinusIonisation, kPEnergyLoss);
522 mcMap->Add(&fAntiSigmaMinusMult, kPMultipleScattering);
525 //_____________________________________________________________________________
526 void TG4PhysicsConstructorHadron::ConstructProcessForSigmaPlus()
528 // Construct processes for Sigma+.
531 // add process & set ordering
532 G4ProcessManager* pManager = G4SigmaPlus::SigmaPlus()->GetProcessManager();
533 pManager->AddDiscreteProcess(&fElasticProcess);
535 fLESigmaPlusModel = new G4LESigmaPlusInelastic();
536 fHESigmaPlusModel = new G4HESigmaPlusInelastic();
537 fSigmaPlusInelastic.RegisterMe(fLESigmaPlusModel);
538 fSigmaPlusInelastic.RegisterMe(fHESigmaPlusModel);
539 pManager->AddDiscreteProcess(&fSigmaPlusInelastic);
541 pManager->AddProcess(&fSigmaPlusIonisation, ordInActive, 2, 2);
543 pManager->AddProcess(&fSigmaPlusMult);
544 pManager->SetProcessOrdering(&fSigmaPlusMult, idxAlongStep, 1);
545 pManager->SetProcessOrdering(&fSigmaPlusMult, idxPostStep, 1);
547 // map to G3 controls
548 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
549 controlMap->Add(&fSigmaPlusInelastic, kHADR);
550 controlMap->Add(&fSigmaPlusIonisation, kLOSS);
551 controlMap->Add(&fSigmaPlusMult, kMULS);
553 // map to G3 ALIMCProcess codes
554 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
555 mcMap->Add(&fSigmaPlusInelastic, kPHInhelastic);
556 mcMap->Add(&fSigmaPlusIonisation, kPEnergyLoss);
557 mcMap->Add(&fSigmaPlusMult, kPMultipleScattering);
560 //_____________________________________________________________________________
561 void TG4PhysicsConstructorHadron::ConstructProcessForAntiSigmaPlus()
563 // Construct processes for anti-Sigma+.
566 // add process & set ordering
567 G4ProcessManager* pManager
568 = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
569 pManager->AddDiscreteProcess(&fElasticProcess);
571 fLEAntiSigmaPlusModel = new G4LEAntiSigmaPlusInelastic();
572 fHEAntiSigmaPlusModel = new G4HEAntiSigmaPlusInelastic();
573 fAntiSigmaPlusInelastic.RegisterMe(fLEAntiSigmaPlusModel);
574 fAntiSigmaPlusInelastic.RegisterMe(fHEAntiSigmaPlusModel);
575 pManager->AddDiscreteProcess(&fAntiSigmaPlusInelastic);
577 pManager->AddProcess(&fAntiSigmaPlusIonisation, ordInActive, 2, 2);
579 pManager->AddProcess(&fAntiSigmaPlusMult);
580 pManager->SetProcessOrdering(&fAntiSigmaPlusMult, idxAlongStep, 1);
581 pManager->SetProcessOrdering(&fAntiSigmaPlusMult, idxPostStep, 1);
583 // map to G3 controls
584 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
585 controlMap->Add(&fAntiSigmaPlusInelastic, kHADR);
586 controlMap->Add(&fAntiSigmaPlusIonisation, kLOSS);
587 controlMap->Add(&fAntiSigmaPlusMult, kMULS);
589 // map to G3 ALIMCProcess codes
590 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
591 mcMap->Add(&fAntiSigmaPlusInelastic, kPHInhelastic);
592 mcMap->Add(&fAntiSigmaPlusIonisation, kPEnergyLoss);
593 mcMap->Add(&fAntiSigmaPlusMult, kPMultipleScattering);
596 //_____________________________________________________________________________
597 void TG4PhysicsConstructorHadron::ConstructProcessForXiMinus()
599 // Construct processes for Xi-.
602 // add process & set ordering
603 G4ProcessManager* pManager = G4XiMinus::XiMinus()->GetProcessManager();
604 pManager->AddDiscreteProcess(&fElasticProcess);
606 fLEXiMinusModel = new G4LEXiMinusInelastic();
607 fHEXiMinusModel = new G4HEXiMinusInelastic();
608 fXiMinusInelastic.RegisterMe(fLEXiMinusModel);
609 fXiMinusInelastic.RegisterMe(fHEXiMinusModel);
610 pManager->AddDiscreteProcess(&fXiMinusInelastic);
612 pManager->AddProcess(&fXiMinusIonisation, ordInActive, 2, 2);
614 pManager->AddProcess(&fXiMinusMult);
615 pManager->SetProcessOrdering(&fXiMinusMult, idxAlongStep, 1);
616 pManager->SetProcessOrdering(&fXiMinusMult, idxPostStep, 1);
618 // map to G3 controls
619 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
620 controlMap->Add(&fXiMinusInelastic, kHADR);
621 controlMap->Add(&fXiMinusIonisation, kLOSS);
622 controlMap->Add(&fXiMinusMult, kMULS);
624 // map to G3 ALIMCProcess codes
625 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
626 mcMap->Add(&fXiMinusInelastic, kPHInhelastic);
627 mcMap->Add(&fXiMinusIonisation, kPEnergyLoss);
628 mcMap->Add(&fXiMinusMult, kPMultipleScattering);
631 //_____________________________________________________________________________
632 void TG4PhysicsConstructorHadron::ConstructProcessForAntiXiMinus()
634 // Construct processes for anti-Xi-.
637 // add process & set ordering
638 G4ProcessManager* pManager
639 = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
640 pManager->AddDiscreteProcess(&fElasticProcess);
642 fLEAntiXiMinusModel = new G4LEAntiXiMinusInelastic();
643 fHEAntiXiMinusModel = new G4HEAntiXiMinusInelastic();
644 fAntiXiMinusInelastic.RegisterMe(fLEAntiXiMinusModel);
645 fAntiXiMinusInelastic.RegisterMe(fHEAntiXiMinusModel);
646 pManager->AddDiscreteProcess(&fAntiXiMinusInelastic);
648 pManager->AddProcess(&fAntiXiMinusIonisation, ordInActive, 2, 2);
650 pManager->AddProcess(&fAntiXiMinusMult);
651 pManager->SetProcessOrdering(&fAntiXiMinusMult, idxAlongStep, 1);
652 pManager->SetProcessOrdering(&fAntiXiMinusMult, idxPostStep, 1);
654 // map to G3 controls
655 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
656 controlMap->Add(&fAntiXiMinusInelastic, kHADR);
657 controlMap->Add(&fAntiXiMinusIonisation, kLOSS);
658 controlMap->Add(&fAntiXiMinusMult, kMULS);
660 // map to G3 ALIMCProcess codes
661 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
662 mcMap->Add(&fAntiXiMinusInelastic, kPHInhelastic);
663 mcMap->Add(&fAntiXiMinusIonisation, kPEnergyLoss);
664 mcMap->Add(&fAntiXiMinusMult, kPMultipleScattering);
667 //_____________________________________________________________________________
668 void TG4PhysicsConstructorHadron::ConstructProcessForXiZero()
670 // Construct processes for Xi0.
674 G4ProcessManager* pManager = G4XiZero::XiZero()->GetProcessManager();
675 pManager->AddDiscreteProcess(&fElasticProcess);
677 fLEXiZeroModel = new G4LEXiZeroInelastic();
678 fHEXiZeroModel = new G4HEXiZeroInelastic();
679 fXiZeroInelastic.RegisterMe(fLEXiZeroModel);
680 fXiZeroInelastic.RegisterMe(fHEXiZeroModel);
681 pManager->AddDiscreteProcess(&fXiZeroInelastic);
683 // map to G3 controls
684 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
685 controlMap->Add(&fXiZeroInelastic, kHADR);
687 // map to G3 ALIMCProcess codes
688 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
689 mcMap->Add(&fXiZeroInelastic, kPHInhelastic);
692 //_____________________________________________________________________________
693 void TG4PhysicsConstructorHadron::ConstructProcessForAntiXiZero()
695 // Construct processes for anti-Xi0.
699 G4ProcessManager* pManager = G4AntiXiZero::AntiXiZero()->GetProcessManager();
700 pManager->AddDiscreteProcess(&fElasticProcess);
702 fLEAntiXiZeroModel = new G4LEAntiXiZeroInelastic();
703 fHEAntiXiZeroModel = new G4HEAntiXiZeroInelastic();
704 fAntiXiZeroInelastic.RegisterMe(fLEAntiXiZeroModel);
705 fAntiXiZeroInelastic.RegisterMe(fHEAntiXiZeroModel);
706 pManager->AddDiscreteProcess(&fAntiXiZeroInelastic);
708 // map to G3 controls
709 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
710 controlMap->Add(&fAntiXiZeroInelastic, kHADR);
712 // map to G3 ALIMCProcess codes
713 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
714 mcMap->Add(&fAntiXiZeroInelastic, kPHInhelastic);
717 //_____________________________________________________________________________
718 void TG4PhysicsConstructorHadron::ConstructProcessForOmegaMinus()
720 // Construct processes for Omega-.
723 // add process & set ordering
724 G4ProcessManager* pManager = G4OmegaMinus::OmegaMinus()->GetProcessManager();
725 pManager->AddDiscreteProcess(&fElasticProcess);
727 fLEOmegaMinusModel = new G4LEOmegaMinusInelastic();
728 fHEOmegaMinusModel = new G4HEOmegaMinusInelastic();
729 fOmegaMinusInelastic.RegisterMe(fLEOmegaMinusModel);
730 fOmegaMinusInelastic.RegisterMe(fHEOmegaMinusModel);
731 pManager->AddDiscreteProcess(&fOmegaMinusInelastic);
733 pManager->AddProcess(&fOmegaMinusIonisation, ordInActive, 2, 2);
735 pManager->AddProcess(&fOmegaMinusMult);
736 pManager->SetProcessOrdering(&fOmegaMinusMult, idxAlongStep, 1);
737 pManager->SetProcessOrdering(&fOmegaMinusMult, idxPostStep, 1);
739 // map to G3 controls
740 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
741 controlMap->Add(&fOmegaMinusInelastic, kHADR);
742 controlMap->Add(&fOmegaMinusIonisation, kLOSS);
743 controlMap->Add(&fOmegaMinusMult, kMULS);
745 // map to G3 ALIMCProcess codes
746 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
747 mcMap->Add(&fOmegaMinusInelastic, kPHInhelastic);
748 mcMap->Add(&fOmegaMinusIonisation, kPEnergyLoss);
749 mcMap->Add(&fOmegaMinusMult, kPMultipleScattering);
752 //_____________________________________________________________________________
753 void TG4PhysicsConstructorHadron::ConstructProcessForAntiOmegaMinus()
755 // Construct processes for pi+.
758 // add process & set ordering
759 G4ProcessManager* pManager
760 = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
761 pManager->AddDiscreteProcess(&fElasticProcess);
763 fLEAntiOmegaMinusModel = new G4LEAntiOmegaMinusInelastic();
764 fHEAntiOmegaMinusModel = new G4HEAntiOmegaMinusInelastic();
765 fAntiOmegaMinusInelastic.RegisterMe(fLEAntiOmegaMinusModel);
766 fAntiOmegaMinusInelastic.RegisterMe(fHEAntiOmegaMinusModel);
767 pManager->AddDiscreteProcess(&fAntiOmegaMinusInelastic);
769 pManager->AddProcess(&fAntiOmegaMinusIonisation, ordInActive, 2, 2);
771 pManager->AddProcess(&fAntiOmegaMinusMult);
772 pManager->SetProcessOrdering(&fAntiOmegaMinusMult, idxAlongStep, 1);
773 pManager->SetProcessOrdering(&fAntiOmegaMinusMult, idxPostStep, 1);
775 // map to G3 controls
776 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
777 controlMap->Add(&fAntiOmegaMinusInelastic, kHADR);
778 controlMap->Add(&fAntiOmegaMinusIonisation, kLOSS);
779 controlMap->Add(&fAntiOmegaMinusMult, kMULS);
781 // map to G3 ALIMCProcess codes
782 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
783 mcMap->Add(&fAntiOmegaMinusInelastic, kPHInhelastic);
784 mcMap->Add(&fAntiOmegaMinusIonisation, kPEnergyLoss);
785 mcMap->Add(&fAntiOmegaMinusMult, kPMultipleScattering);
788 //_____________________________________________________________________________
789 void TG4PhysicsConstructorHadron::ConstructProcessForOther()
791 // Construct processes for other hadrons.
794 theParticleIterator->reset();
795 while( (*theParticleIterator)() ){
796 G4ParticleDefinition* particle = theParticleIterator->value();
797 G4ProcessManager* pManager = particle->GetProcessManager();
798 G4int nofAlongStepProcesses
799 = pManager->GetAlongStepProcessVector()->length();
801 if ( !particle->IsShortLived() &&
802 particle->GetPDGCharge() != 0.0 &&
803 nofAlongStepProcesses == 1 &&
804 particle->GetParticleName() != "chargedgeantino") {
807 G4VProcess* aMultipleScattering = new G4MultipleScattering();
808 G4VProcess* anIonisation = new G4hIonisation();
811 pManager->AddProcess(anIonisation, ordInActive, 2, 2);
812 pManager->AddProcess(aMultipleScattering);
815 pManager->SetProcessOrdering(aMultipleScattering, idxAlongStep, 1);
816 pManager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
818 // map to G3 controls
819 TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
820 controlMap->Add(anIonisation, kLOSS);
821 controlMap->Add(aMultipleScattering, kMULS);
823 // map to AliMCProcess codes
824 TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
825 mcMap->Add(anIonisation, kPEnergyLoss);
826 mcMap->Add(aMultipleScattering, kPMultipleScattering);
829 fOtherProcesses.push_back(aMultipleScattering);
830 fOtherProcesses.push_back(anIonisation);
837 //_____________________________________________________________________________
838 void TG4PhysicsConstructorHadron::ConstructParticle()
840 // Construct all hadrons.
843 // Construct all mesons
844 G4MesonConstructor pMesonConstructor;
845 pMesonConstructor.ConstructParticle();
847 // Construct all barions
848 G4BaryonConstructor pBaryonConstructor;
849 pBaryonConstructor.ConstructParticle();
851 // Construct resonances and quarks
852 G4ShortLivedConstructor pShortLivedConstructor;
853 pShortLivedConstructor.ConstructParticle();
856 //_____________________________________________________________________________
857 void TG4PhysicsConstructorHadron::ConstructProcess()
859 // Construct all hadronic processes.
863 fElasticModel = new G4LElastic();
864 fElasticProcess.RegisterMe(fElasticModel);
866 ConstructProcessForPionPlus();
867 ConstructProcessForPionMinus();
868 ConstructProcessForKaonPlus();
869 ConstructProcessForKaonMinus();
870 ConstructProcessForKaonZeroLong();
871 ConstructProcessForKaonZeroShort();
872 ConstructProcessForProton();
873 ConstructProcessForAntiProton();
874 ConstructProcessForNeutron();
875 ConstructProcessForAntiNeutron();
876 ConstructProcessForLambda();
877 ConstructProcessForAntiLambda();
878 ConstructProcessForSigmaMinus();
879 ConstructProcessForAntiSigmaMinus();
880 ConstructProcessForSigmaPlus();
881 ConstructProcessForAntiSigmaPlus();
882 ConstructProcessForXiMinus();
883 ConstructProcessForAntiXiMinus();
884 ConstructProcessForXiZero();
885 ConstructProcessForAntiXiZero();
886 ConstructProcessForOmegaMinus();
887 ConstructProcessForAntiOmegaMinus();
888 ConstructProcessForOther();
891 G4cout << "### Hadron physics constructed." << G4endl;