// 

#include "LEMuSREMPhysics.hh"

#include "globals.hh"
#include "G4ios.hh"
#include <iomanip>   


LEMuSREMPhysics::LEMuSREMPhysics(const G4String& name)
               :  G4VPhysicsConstructor(name)
{
}

LEMuSREMPhysics::~LEMuSREMPhysics()
{
}

#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"

#include "G4Gamma.hh"

#include "G4Electron.hh"
#include "G4Positron.hh"

#include "G4NeutrinoE.hh"
#include "G4AntiNeutrinoE.hh"
#include "G4UserSpecialCuts.hh"
void LEMuSREMPhysics::ConstructParticle()
{
  // gamma
  G4Gamma::GammaDefinition();
  
  // electron
  G4Electron::ElectronDefinition();
  G4Positron::PositronDefinition();
  G4NeutrinoE::NeutrinoEDefinition();
  G4AntiNeutrinoE::AntiNeutrinoEDefinition();
}


#include "G4ProcessManager.hh"


void LEMuSREMPhysics::ConstructProcess()
{
  G4ProcessManager * pManager = 0;
  
  // Gamma Physics
  pManager = G4Gamma::Gamma()->GetProcessManager();
  pManager->AddDiscreteProcess(&thePhotoEffect);
  pManager->AddDiscreteProcess(&theComptonEffect);
  pManager->AddDiscreteProcess(&thePairProduction);
   pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,1);
  // Electron Physics
  pManager = G4Electron::Electron()->GetProcessManager();

  pManager->AddProcess(&theElectronMultipleScattering, -1, 1, 1);
  pManager->AddProcess(&theElectronIonisation,         -1, 2, 2);
  pManager->AddProcess(&theElectronBremsStrahlung,     -1, 3, 3);  
  pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,4); 

  //Positron Physics
  pManager = G4Positron::Positron()->GetProcessManager();
 
  pManager->AddProcess(&thePositronMultipleScattering, -1, 1, 1);
  pManager->AddProcess(&thePositronIonisation,         -1, 2, 2);
  pManager->AddProcess(&thePositronBremsStrahlung,     -1, 3, 3);  
  pManager->AddProcess(&theAnnihilation,                0,-1, 4);  
  pManager->AddProcess(new G4UserSpecialCuts(),-1,-1,5); 
}



