/////////////////////////////////////////////////////////////////////////
// G4Tutorial:
//
// PhysicsEMElectronStandard.cc
// 
// Assembling electromagnetic physics processes for electrons.
// 
// The considered processes are G4MultipleScattering, 4eIonisation
// and G4eBremsstrahlung 
//
/////////////////////////////////////////////////////////////////////////


#include "PhysicsEMElectronStandard.hh"
#include "G4ProcessManager.hh"
#include "G4ParticleDefinition.hh"
#include "G4MultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4StepLimiter.hh"


PhysicsEMElectronStandard::PhysicsEMElectronStandard(const G4String& name): 
   G4VPhysicsConstructor(name) {
 
  // Information about physics processes is printed:
  G4cout << "ELECTROMAGNETIC PROCESS(ES): G4MultipleScattering (electron)" 
         << G4endl
         << "                             G4eIonisation (electron)" 
         << G4endl
         << "                             G4eBremsstrahlung (electron)" 
         << G4endl
         << "APPLIED MODEL(S): -" 
         << G4endl;
}


PhysicsEMElectronStandard::~PhysicsEMElectronStandard() { 

}


void PhysicsEMElectronStandard::ConstructProcess() {
  
  // ****************
  // *** Electron ***
  // ****************

  // The considered physics processes are instantiated:
  G4MultipleScattering* elecMultipScatProcess = new G4MultipleScattering();
  G4eIonisation* elecIonisationProcess = new G4eIonisation();
  G4eBremsstrahlung* elecBremsstrProcess = new G4eBremsstrahlung();

  // Finally, the processes are added to the particles' process manager:
  G4ParticleDefinition* particle = G4Electron::Electron(); 
  G4ProcessManager* processManager = particle -> GetProcessManager();
  processManager -> AddProcess(elecMultipScatProcess, -1, 1, 1);
  processManager -> AddProcess(elecIonisationProcess, -1, 2, 2);
  processManager -> AddProcess(elecBremsstrProcess, -1, 3, 3);
}