]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TGeant4/TG4PhysicsConstructorIon.cxx
Updated SDigitizer
[u/mrichter/AliRoot.git] / TGeant4 / TG4PhysicsConstructorIon.cxx
index 4db709f51f0e6d6755e6043c3d9655e4f1fa639f..68e1968d4e8cc57043d0775210b324ef8dceb3dd 100644 (file)
 
 //_____________________________________________________________________________
 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);
 }
 
 //_____________________________________________________________________________
@@ -58,7 +69,7 @@ TG4PhysicsConstructorIon::operator=(const TG4PhysicsConstructorIon &right)
 // private methods
 
 //_____________________________________________________________________________
-void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
+void TG4PhysicsConstructorIon::ConstructHadProcessForGenericIon()
 {
 // Constructs electromagnetic processes for generic ion.
 // ---
@@ -66,6 +77,104 @@ void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
   // 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);
 
@@ -75,30 +184,23 @@ void TG4PhysicsConstructorIon::ConstructProcessForGenericIon()
 
   // 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);
@@ -109,30 +211,23 @@ void TG4PhysicsConstructorIon::ConstructProcessForDeuteron()
 
   // 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);
@@ -143,30 +238,23 @@ void TG4PhysicsConstructorIon::ConstructProcessForTriton()
 
   // 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);
@@ -177,26 +265,23 @@ void TG4PhysicsConstructorIon::ConstructProcessForAlpha()
 
   // 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);
 
@@ -215,6 +300,7 @@ void TG4PhysicsConstructorIon::ConstructProcessForHe3()
   mcMap->Add(&fHe3MultipleScattering, kPMultipleScattering); 
 }
 
+
 // protected methods
 
 //_____________________________________________________________________________
@@ -234,16 +320,37 @@ void TG4PhysicsConstructorIon::ConstructProcess()
 // 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;
+  }  
 }