//_____________________________________________________________________________
TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(const G4String& name)
- : G4VPhysicsConstructor(name)
-{
+ : TG4VPhysicsConstructor(name),
+ fSetEM(true),
+ fSetHadron(true) {
+//
+}
+
+//_____________________________________________________________________________
+TG4PhysicsConstructorIon::TG4PhysicsConstructorIon(G4int verboseLevel,
+ G4bool setEM,
+ G4bool setHadron,
+ const G4String& name)
+ : TG4VPhysicsConstructor(name, verboseLevel),
+ fSetEM(setEM),
+ fSetHadron(setHadron) {
//
- SetVerboseLevel(1);
}
//_____________________________________________________________________________
// private methods
//_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
+void TG4PhysicsConstructorIon::ConstructHadProcessForGenericIon()
{
// Constructs electromagnetic processes for generic ion.
// ---
// add process
G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
pManager->AddDiscreteProcess(&fElasticProcess);
+
+ // map to G3 controls
+ TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+ controlMap->Add(&fElasticProcess, kHADR);
+
+ // map to AliMCProcess codes
+ TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+ mcMap->Add(&fElasticProcess, kPHElastic);
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorIon::ConstructHadProcessForDeuteron()
+{
+// Constructs electromagnetic processes for deuteron.
+// ---
+
+ // add process
+ G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
+ pManager->AddDiscreteProcess(&fElasticProcess);
+
+ fDeuteronModel = new G4LEDeuteronInelastic();
+ fDeuteronProcess.RegisterMe(fDeuteronModel);
+ pManager->AddDiscreteProcess(&fDeuteronProcess);
+
+ // map to G3 controls
+ TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+ controlMap->Add(&fDeuteronProcess, kHADR);
+
+ // map to AliMCProcess codes
+ TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+ mcMap->Add(&fDeuteronProcess, kPHInhelastic);
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorIon::ConstructHadProcessForTriton()
+{
+// Constructs electromagnetic processes for triton.
+// ---
+
+ // add process
+ G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
+ pManager->AddDiscreteProcess(&fElasticProcess);
+
+ fTritonModel = new G4LETritonInelastic();
+ fTritonProcess.RegisterMe(fTritonModel);
+ pManager->AddDiscreteProcess(&fTritonProcess);
+
+ // map to G3 controls
+ TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+ controlMap->Add(&fTritonProcess, kHADR);
+
+ // map to AliMCProcess codes
+ TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+ mcMap->Add(&fTritonProcess, kPHInhelastic);
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorIon::ConstructHadProcessForAlpha()
+{
+// Constructs electromagnetic processes for alpha.
+// ---
+
+ // add process
+ G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
+ pManager->AddDiscreteProcess(&fElasticProcess);
+
+ fAlphaModel = new G4LEAlphaInelastic();
+ fAlphaProcess.RegisterMe(fAlphaModel);
+ pManager->AddDiscreteProcess(&fAlphaProcess);
+
+ // map to G3 controls
+ TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+ controlMap->Add(&fAlphaProcess, kHADR);
+
+ // map to AliMCProcess codes
+ TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+ mcMap->Add(&fAlphaProcess, kPHInhelastic);
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorIon::ConstructHadProcessForHe3()
+{
+// Constructs electromagnetic processes for He3.
+// ---
+
+ // add process
+ G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
+ pManager->AddDiscreteProcess(&fElasticProcess);
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorIon::ConstructEMProcessForGenericIon()
+{
+// Constructs electromagnetic processes for generic ion.
+// ---
+
+ // add process
+ G4ProcessManager* pManager = G4GenericIon::GenericIon()->GetProcessManager();
pManager->AddProcess(&fIonIonisation, ordInActive, 2, 2);
pManager->AddProcess(&fIonMultipleScattering);
// map to G3 controls
TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
- controlMap->Add(&fElasticProcess, kHADR);
controlMap->Add(&fIonIonisation, kLOSS);
controlMap->Add(&fIonMultipleScattering, kMULS);
// map to AliMCProcess codes
TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
- mcMap->Add(&fElasticProcess, kPHElastic);
mcMap->Add(&fIonIonisation, kPEnergyLoss);
mcMap->Add(&fIonMultipleScattering, kPMultipleScattering);
}
//_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForDeuteron()
+void TG4PhysicsConstructorIon::ConstructEMProcessForDeuteron()
{
// Constructs electromagnetic processes for deuteron.
// ---
// add process
G4ProcessManager* pManager = G4Deuteron::Deuteron()->GetProcessManager();
- pManager->AddDiscreteProcess(&fElasticProcess);
-
- fDeuteronModel = new G4LEDeuteronInelastic();
- fDeuteronProcess.RegisterMe(fDeuteronModel);
- pManager->AddDiscreteProcess(&fDeuteronProcess);
pManager->AddProcess(&fDeuteronIonisation, ordInActive, 2, 2);
pManager->AddProcess(&fDeuteronMultipleScattering);
// map to G3 controls
TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
- controlMap->Add(&fDeuteronProcess, kHADR);
controlMap->Add(&fDeuteronIonisation, kLOSS);
controlMap->Add(&fDeuteronMultipleScattering, kMULS);
// map to AliMCProcess codes
TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
- mcMap->Add(&fDeuteronProcess, kPHInhelastic);
mcMap->Add(&fDeuteronIonisation, kPEnergyLoss);
mcMap->Add(&fDeuteronMultipleScattering, kPMultipleScattering);
}
//_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForTriton()
+void TG4PhysicsConstructorIon::ConstructEMProcessForTriton()
{
// Constructs electromagnetic processes for triton.
// ---
// add process
G4ProcessManager* pManager = G4Triton::Triton()->GetProcessManager();
- pManager->AddDiscreteProcess(&fElasticProcess);
-
- fTritonModel = new G4LETritonInelastic();
- fTritonProcess.RegisterMe(fTritonModel);
- pManager->AddDiscreteProcess(&fTritonProcess);
pManager->AddProcess(&fTritonIonisation, ordInActive, 2, 2);
pManager->AddProcess(&fTritonMultipleScattering);
// map to G3 controls
TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
- controlMap->Add(&fTritonProcess, kHADR);
controlMap->Add(&fTritonIonisation, kLOSS);
controlMap->Add(&fTritonMultipleScattering, kMULS);
// map to AliMCProcess codes
TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
- mcMap->Add(&fTritonProcess, kPHInhelastic);
mcMap->Add(&fTritonIonisation, kPEnergyLoss);
mcMap->Add(&fTritonMultipleScattering, kPMultipleScattering);
}
//_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForAlpha()
+void TG4PhysicsConstructorIon::ConstructEMProcessForAlpha()
{
// Constructs electromagnetic processes for alpha.
// ---
// add process
G4ProcessManager* pManager = G4Alpha::Alpha()->GetProcessManager();
- pManager->AddDiscreteProcess(&fElasticProcess);
-
- fAlphaModel = new G4LEAlphaInelastic();
- fAlphaProcess.RegisterMe(fAlphaModel);
- pManager->AddDiscreteProcess(&fAlphaProcess);
pManager->AddProcess(&fAlphaIonisation, ordInActive, 2, 2);
pManager->AddProcess(&fAlphaMultipleScattering);
// map to G3 controls
TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
- controlMap->Add(&fAlphaProcess, kHADR);
controlMap->Add(&fAlphaIonisation, kLOSS);
controlMap->Add(&fAlphaMultipleScattering, kMULS);
// map to AliMCProcess codes
TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
- mcMap->Add(&fAlphaProcess, kPHInhelastic);
mcMap->Add(&fAlphaIonisation, kPEnergyLoss);
mcMap->Add(&fAlphaMultipleScattering, kPMultipleScattering);
}
//_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForHe3()
+void TG4PhysicsConstructorIon::ConstructEMProcessForHe3()
{
// Constructs electromagnetic processes for He3.
// ---
// add process
G4ProcessManager* pManager = G4He3::He3()->GetProcessManager();
- pManager->AddDiscreteProcess(&fElasticProcess);
pManager->AddProcess(&fHe3Ionisation, ordInActive, 2, 2);
pManager->AddProcess(&fHe3MultipleScattering);
mcMap->Add(&fHe3MultipleScattering, kPMultipleScattering);
}
+
// protected methods
//_____________________________________________________________________________
// Constructs electromagnetic processes for e+.
// ---
- // Elastic Process
- fElasticModel = new G4LElastic();
- fElasticProcess.RegisterMe(fElasticModel);
-
- ConstructProcessForGenericIon();
- ConstructProcessForDeuteron();
- ConstructProcessForTriton();
- ConstructProcessForAlpha();
- ConstructProcessForHe3();
-
- if (verboseLevel>0)
+ if (fSetHadron) {
+ // Elastic Process
+ fElasticModel = new G4LElastic();
+ fElasticProcess.RegisterMe(fElasticModel);
+
+ // Hadron processes
+ ConstructHadProcessForGenericIon();
+ ConstructHadProcessForDeuteron();
+ ConstructHadProcessForTriton();
+ ConstructHadProcessForAlpha();
+ ConstructHadProcessForHe3();
+
+ if (VerboseLevel() > 1) {
+ G4cout << "### Ion EM physics constructed." << G4endl;
+ }
+ }
+
+ if (fSetEM) {
+ // EM processes
+ ConstructEMProcessForGenericIon();
+ ConstructEMProcessForDeuteron();
+ ConstructEMProcessForTriton();
+ ConstructEMProcessForAlpha();
+ ConstructEMProcessForHe3();
+
+ if (VerboseLevel() > 1) {
+ G4cout << "### Ion hadron physics constructed." << G4endl;
+ }
+ }
+
+ if (VerboseLevel() > 0) {
G4cout << "### Ion physics constructed." << G4endl;
+ }
}