]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TGeant4/TG4PhysicsConstructorEM.cxx
Functions renamed to get a prefix PHOS
[u/mrichter/AliRoot.git] / TGeant4 / TG4PhysicsConstructorEM.cxx
index edd909d928a3bbd22ab95f61b4c1e070eea4d376..1b2ec38ce542c327ba056c0ea59d7c00853ec483 100644 (file)
@@ -4,37 +4,34 @@
 // Author: I. Hrivnacova
 //
 // Class TG4PhysicsConstructorEM
-// ----------0000---------------
+// -----------------------------
 // See the class description in the header file.
-// According to corresponding part of:
-// ExN04PhysicsList.cc,v 1.7 1999/12/15 14:49:26 gunter
-// GEANT4 tag Name: geant4-01-01
+// According to ExN04EMPhysics.cc,v 1.1.2.1 2001/06/28 19:07:37 gunter Exp 
+// GEANT4 tag Name: geant4-03-02
 
 #include "TG4PhysicsConstructorEM.h"
 #include "TG4ProcessControlMap.h"
 #include "TG4ProcessMCMap.h"
-#include "TG4G3Control.h"
 
 #include <G4ParticleDefinition.hh>
 #include <G4ProcessManager.hh>
-#include <G4ComptonScattering.hh>
-#include <G4GammaConversion.hh>
-#include <G4PhotoElectricEffect.hh>
-#include <G4MultipleScattering.hh>
-#include <G4eIonisation.hh>
-#include <G4eBremsstrahlung.hh>
-#include <G4eplusAnnihilation.hh>
-#include <G4MuIonisation.hh>
-#include <G4MuBremsstrahlung.hh>
-#include <G4MuPairProduction.hh>
-#include <G4hIonisation.hh>
+#include <G4Gamma.hh>
+#include <G4Electron.hh>
+#include <G4Positron.hh>
+#include <G4NeutrinoE.hh>
+#include <G4AntiNeutrinoE.hh>
 
 //_____________________________________________________________________________
 TG4PhysicsConstructorEM::TG4PhysicsConstructorEM(const G4String& name)
-  : G4VPhysicsConstructor(name)
-{
+  : TG4VPhysicsConstructor(name) {
+//
+}
+
+//_____________________________________________________________________________
+TG4PhysicsConstructorEM::TG4PhysicsConstructorEM(G4int verboseLevel,
+                                                 const G4String& name)
+  : TG4VPhysicsConstructor(name, verboseLevel) {
 //
-  SetVerboseLevel(1);
 }
 
 //_____________________________________________________________________________
@@ -42,208 +39,125 @@ TG4PhysicsConstructorEM::~TG4PhysicsConstructorEM() {
 //
 }
 
+// private methods
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorEM::ConstructProcessForGamma()
+{
+// Constructs electromagnetic processes for gamma.
+// ---
+  
+  // add processes
+  G4ProcessManager* pManager = G4Gamma::Gamma()->GetProcessManager();
+  pManager->AddDiscreteProcess(&fPhotoEffect);
+  pManager->AddDiscreteProcess(&fComptonEffect);
+  pManager->AddDiscreteProcess(&fPairProduction);
+
+  // map to G3 controls
+  TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+  controlMap->Add(&fPhotoEffect, kPHOT); 
+  controlMap->Add(&fComptonEffect, kCOMP); 
+  controlMap->Add(&fPairProduction, kPAIR); 
+
+  // map to AliMCProcess codes
+  TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+  mcMap->Add(&fPhotoEffect, kPPhotoelectric); 
+  mcMap->Add(&fComptonEffect, kPCompton); 
+  mcMap->Add(&fPairProduction, kPPair); 
+}  
+
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorEM::ConstructProcessForElectron()
+{
+// Constructs electromagnetic processes for e-.
+// ---
+
+  // add process
+  G4ProcessManager* pManager = G4Electron::Electron()->GetProcessManager();
+  pManager->AddDiscreteProcess(&fElectronBremsStrahlung); 
+  pManager->AddProcess(&fElectronIonisation, ordInActive, 2, 2);
+  pManager->AddProcess(&fElectronMultipleScattering);
+
+  // set ordering
+  pManager->SetProcessOrdering(&fElectronMultipleScattering, idxAlongStep,  1);
+  pManager->SetProcessOrdering(&fElectronMultipleScattering, idxPostStep,  1);
+
+  // map to G3 controls
+  TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+  controlMap->Add(&fElectronBremsStrahlung, kBREM); 
+  controlMap->Add(&fElectronIonisation, kLOSS); 
+  controlMap->Add(&fElectronMultipleScattering, kMULS); 
+
+  // map to AliMCProcess codes
+  TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+  mcMap->Add(&fElectronBremsStrahlung, kPBrem); 
+  mcMap->Add(&fElectronMultipleScattering, kPMultipleScattering); 
+  mcMap->Add(&fElectronIonisation, kPEnergyLoss); 
+}
+
+//_____________________________________________________________________________
+void TG4PhysicsConstructorEM::ConstructProcessForPositron()
+{
+// Constructs electromagnetic processes for e+.
+// ---
+  
+  // add processes
+  G4ProcessManager * pManager = G4Positron::Positron()->GetProcessManager();
+  pManager->AddDiscreteProcess(&fPositronBremsStrahlung);
+  pManager->AddDiscreteProcess(&fAnnihilation);
+  pManager->AddRestProcess(&fAnnihilation);
+  pManager->AddProcess(&fPositronIonisation, ordInActive,2, 2);
+  pManager->AddProcess(&fPositronMultipleScattering);
+
+  // set ordering
+  pManager->SetProcessOrdering(&fPositronMultipleScattering, idxAlongStep,  1);
+  pManager->SetProcessOrdering(&fPositronMultipleScattering, idxPostStep,  1);
+
+  // map to G3 controls
+  TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
+  controlMap->Add(&fPositronBremsStrahlung, kBREM); 
+  controlMap->Add(&fAnnihilation, kANNI); 
+  controlMap->Add(&fPositronIonisation, kLOSS); 
+  controlMap->Add(&fPositronMultipleScattering, kMULS); 
+
+  // map to AliMCProcess codes
+  TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+  mcMap->Add(&fPositronBremsStrahlung, kPBrem); 
+  mcMap->Add(&fAnnihilation, kPAnnihilation); 
+  mcMap->Add(&fPositronIonisation, kPEnergyLoss); 
+  mcMap->Add(&fPositronMultipleScattering, kPMultipleScattering); 
+}
+
 // protected methods
 
 //_____________________________________________________________________________
 void TG4PhysicsConstructorEM::ConstructParticle()
 {
-// The particles are constructed in the 
-// TG4ModularPhysicsList.
+// Instantiates particles.
 // ---
+
+  // gamma
+  G4Gamma::GammaDefinition();
+  // electron
+  G4Electron::ElectronDefinition();
+  G4Positron::PositronDefinition();
+  G4NeutrinoE::NeutrinoEDefinition();
+  G4AntiNeutrinoE::AntiNeutrinoEDefinition();
 }
 
 //_____________________________________________________________________________
 void TG4PhysicsConstructorEM::ConstructProcess()
 {
-// Constructs electromagnetic processes.
+// Constructs electromagnetic processes for e+.
 // ---
 
-  TG4ProcessControlMap* controlMap = TG4ProcessControlMap::Instance();
-  TG4ProcessMCMap* mcMap = TG4ProcessMCMap::Instance();
+  ConstructProcessForGamma();
+  ConstructProcessForElectron();
+  ConstructProcessForPositron();
 
-  theParticleIterator->reset();
-  while( (*theParticleIterator)() ){
-    G4ParticleDefinition* particle = theParticleIterator->value();
-    G4ProcessManager* pmanager = particle->GetProcessManager();
-    G4String particleName = particle->GetParticleName();
-     
-    if (particleName == "gamma") {
-      // construct processes for gamma
-      G4VProcess* theGammaConversion     = new G4GammaConversion();
-      G4VProcess* theComptonScattering   = new G4ComptonScattering();
-      G4VProcess* thePhotoElectricEffect = new G4PhotoElectricEffect();
-      
-      // add processes
-      pmanager->AddDiscreteProcess(theGammaConversion);
-      pmanager->AddDiscreteProcess(theComptonScattering);      
-      pmanager->AddDiscreteProcess(thePhotoElectricEffect);
-      
-      // map to G3 controls
-      controlMap->Add(theGammaConversion, kPAIR); 
-      controlMap->Add(theComptonScattering, kCOMP); 
-      controlMap->Add(thePhotoElectricEffect, kPHOT); 
-
-      // map to AliMCProcess codes
-      mcMap->Add(theGammaConversion, kPPair); 
-      mcMap->Add(theComptonScattering, kPCompton); 
-      mcMap->Add(thePhotoElectricEffect, kPPhotoelectric); 
-    } 
-    else if (particleName == "e-") {
-      // construct processes for electron
-      G4VProcess* theeminusMultipleScattering = new G4MultipleScattering();
-      G4VProcess* theeminusIonisation = new G4eIonisation();
-      G4VProcess* theeminusBremsstrahlung = new G4eBremsstrahlung();
-      
-      // add processes
-      pmanager->AddProcess(theeminusMultipleScattering);
-      pmanager->AddProcess(theeminusIonisation);
-      pmanager->AddProcess(theeminusBremsstrahlung);      
-
-      // set ordering for AlongStepDoIt
-      pmanager->SetProcessOrdering(theeminusMultipleScattering, idxAlongStep,  1);
-      pmanager->SetProcessOrdering(theeminusIonisation, idxAlongStep,  2);
-
-      // set ordering for PostStepDoIt
-      pmanager->SetProcessOrdering(theeminusMultipleScattering, idxPostStep, 1);
-      pmanager->SetProcessOrdering(theeminusIonisation, idxPostStep, 2);
-      pmanager->SetProcessOrdering(theeminusBremsstrahlung, idxPostStep, 3);
-
-      // map to G3 controls
-      controlMap->Add(theeminusMultipleScattering, kMULS); 
-      controlMap->Add(theeminusIonisation, kLOSS); 
-      controlMap->Add(theeminusBremsstrahlung, kBREM); 
-
-      // map to AliMCProcess codes
-      mcMap->Add(theeminusMultipleScattering, kPMultipleScattering); 
-      mcMap->Add(theeminusIonisation, kPEnergyLoss); 
-      mcMap->Add(theeminusBremsstrahlung, kPBrem); 
-    } 
-    else if (particleName == "e+") {
-      // Construct processes for positron
-      G4VProcess* theeplusMultipleScattering = new G4MultipleScattering();
-      G4VProcess* theeplusIonisation = new G4eIonisation();
-      G4VProcess* theeplusBremsstrahlung = new G4eBremsstrahlung();
-      G4VProcess* theeplusAnnihilation = new G4eplusAnnihilation();
-
-      // add processes
-      pmanager->AddProcess(theeplusMultipleScattering);
-      pmanager->AddProcess(theeplusIonisation);
-      pmanager->AddProcess(theeplusBremsstrahlung);
-      pmanager->AddProcess(theeplusAnnihilation);
-
-      // set ordering for AtRestDoIt
-      pmanager->SetProcessOrderingToFirst(theeplusAnnihilation, idxAtRest);
-
-      // set ordering for AlongStepDoIt
-      pmanager->SetProcessOrdering(theeplusMultipleScattering, idxAlongStep,  1);
-      pmanager->SetProcessOrdering(theeplusIonisation, idxAlongStep,  2);
-
-      // set ordering for PostStepDoIt
-      pmanager->SetProcessOrdering(theeplusMultipleScattering, idxPostStep, 1);
-      pmanager->SetProcessOrdering(theeplusIonisation, idxPostStep, 2);
-      pmanager->SetProcessOrdering(theeplusBremsstrahlung, idxPostStep, 3);
-      pmanager->SetProcessOrdering(theeplusAnnihilation, idxPostStep, 4);
-  
-      // map to G3 controls
-      controlMap->Add(theeplusMultipleScattering, kMULS); 
-      controlMap->Add(theeplusIonisation, kLOSS); 
-      controlMap->Add(theeplusBremsstrahlung, kBREM); 
-      controlMap->Add(theeplusAnnihilation, kANNI); 
-      
-      // map to AliMCProcess codes
-      mcMap->Add(theeplusMultipleScattering, kPMultipleScattering); 
-      mcMap->Add(theeplusIonisation, kPEnergyLoss); 
-      mcMap->Add(theeplusBremsstrahlung, kPBrem); 
-      mcMap->Add(theeplusAnnihilation, kPAnnihilation); 
-    } 
-    else if (particleName == "mu+" || 
-             particleName == "mu-") {
-      // construct processes for muons
-      G4VProcess* aMultipleScattering = new G4MultipleScattering();
-      G4VProcess* aBremsstrahlung = new G4MuBremsstrahlung();
-      G4VProcess* aPairProduction = new G4MuPairProduction();
-      G4VProcess* anIonisation = new G4MuIonisation();
-
-      // add processes
-      pmanager->AddProcess(anIonisation);
-      pmanager->AddProcess(aMultipleScattering);
-      pmanager->AddProcess(aBremsstrahlung);
-      pmanager->AddProcess(aPairProduction);
-
-      // set ordering for AlongStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,  1);
-      pmanager->SetProcessOrdering(anIonisation, idxAlongStep,  2);
-
-      // set ordering for PostStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
-      pmanager->SetProcessOrdering(anIonisation, idxPostStep, 2);
-      pmanager->SetProcessOrdering(aBremsstrahlung, idxPostStep, 3);
-      pmanager->SetProcessOrdering(aPairProduction, idxPostStep, 4);
-     
-      // map to G3 controls
-      controlMap->Add(aMultipleScattering, kMULS); 
-      controlMap->Add(aBremsstrahlung, kBREM); 
-      controlMap->Add(anIonisation, kLOSS); 
-      controlMap->Add(aPairProduction, kPAIR); 
-
-      // map to AliMCProcess codes
-      mcMap->Add(aMultipleScattering, kPMultipleScattering); 
-      mcMap->Add(aBremsstrahlung, kPBrem); 
-      mcMap->Add(anIonisation, kPEnergyLoss); 
-      mcMap->Add(aPairProduction, kPPair); 
-    } 
-    else if (particleName == "GenericIon") {
-      // construct processes for ions
-      G4VProcess* aionIonization = new G4hIonisation;
-      G4VProcess* aMultipleScattering = new G4MultipleScattering();
-      pmanager->AddProcess(aionIonization);
-      pmanager->AddProcess(aMultipleScattering);
-
-      // set ordering for AlongStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,  1);
-      pmanager->SetProcessOrdering(aionIonization, idxAlongStep,  2);
-
-      // set ordering for PostStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
-      pmanager->SetProcessOrdering(aionIonization, idxPostStep, 2);
-
-      // map to G3 controls
-      controlMap->Add(aionIonization, kLOSS); 
-      controlMap->Add(aMultipleScattering, kMULS); 
-
-      // map to AliMCProcess codes
-      mcMap->Add(aionIonization, kPEnergyLoss); 
-      mcMap->Add(aMultipleScattering, kPMultipleScattering); 
-    } 
-    else if ((!particle->IsShortLived()) &&
-           (particle->GetPDGCharge() != 0.0) && 
-           (particle->GetParticleName() != "chargedgeantino")) {
-      // construct processes for all others charged particles 
-      // except geantino
-      G4VProcess* aMultipleScattering = new G4MultipleScattering();
-      G4VProcess* anIonisation = new G4hIonisation();
-
-      // add processes
-      pmanager->AddProcess(anIonisation);
-      pmanager->AddProcess(aMultipleScattering);
-
-      // set ordering for AlongStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxAlongStep,  1);
-      pmanager->SetProcessOrdering(anIonisation, idxAlongStep,  2);
-
-      // set ordering for PostStepDoIt
-      pmanager->SetProcessOrdering(aMultipleScattering, idxPostStep, 1);
-      pmanager->SetProcessOrdering(anIonisation, idxPostStep, 2);
-
-      // map to G3 controls
-      controlMap->Add(anIonisation, kLOSS); 
-      controlMap->Add(aMultipleScattering, kMULS); 
-
-      // map to AliMCProcess codes
-      mcMap->Add(anIonisation, kPEnergyLoss); 
-      mcMap->Add(aMultipleScattering, kPMultipleScattering); 
-    }
-  }
-  if (verboseLevel>0)
+  if (VerboseLevel() > 0) {
     G4cout << "### Electromagnetic physics constructed." << G4endl;
+  }  
 }