 
//	History
//        first version                   12 Nov. 2000 by H.Kurashige 
// ------------------------------------------------------------

#ifndef LEMuSRMuonPhysics_h
#define LEMuSRMuonPhysics_h 1

#include "globals.hh"
#include "G4ios.hh"

#include "G4VPhysicsConstructor.hh"
#include "G4MultipleScattering.hh"
#include "G4MultipleScattering52.hh"
#include "LEMuSRMSC.hh"
#include "G4MuBremsstrahlung.hh"
#include "G4MuPairProduction.hh"
#include "G4MuIonisation.hh"
#include "G4hIonisation.hh"

#include "G4MuonMinusCaptureAtRest.hh"

#include "G4DecayWithSpin.hh"
#include "G4MuonDecayChannel.hh"
#include "G4MuonDecayChannelWithSpin.hh"

#include "LEMuSRAtRestSpinRotation.hh"
#include "LEMuSRDecay.hh"

#include "LEMuSRMUONIUM.hh"
#include "LEMuSRDepolarize.hh"
#include "LEMuSRMUONIUMScatt.hh"



#include"G4VMuEnergyLoss.hh"
 

class LEMuSRMuonPhysics : public G4VPhysicsConstructor
{
  public: 
    LEMuSRMuonPhysics(const G4String& name="muon");
    virtual ~LEMuSRMuonPhysics();

  public: 
    // This method will be invoked in the Construct() method. 
    // each particle type will be instantiated
    virtual void ConstructParticle();
 
    // This method will be invoked in the Construct() method.
    // each physics process will be instantiated and
    // registered to the process manager of each particle type 
    virtual void ConstructProcess();

  protected:
  // Muon physics
  G4MuIonisation        fMuPlusIonisation;
  G4MultipleScattering fMuoniumMultipleScattering;
  LEMuSRMSC   fMuPlusMultipleScattering;
  G4MuBremsstrahlung     fMuPlusBremsstrahlung ;
  G4MuPairProduction     fMuPlusPairProduction;
  LEMuSRMUONIUMScatt fMuoniumScatt;
  LEMuSRMUONIUM fMuFormation;
  LEMuSRDepolarize fDepolarization;

  
 
   G4MuIonisation         fMuMinusIonisation;
   G4MultipleScattering   fMuMinusMultipleScattering;
   G4MuBremsstrahlung     fMuMinusBremsstrahlung ;
   G4MuPairProduction     fMuMinusPairProduction;

   G4MuonMinusCaptureAtRest fMuMinusCaptureAtRest;


#ifdef ASYM_USE_LEMU
  LEMuSRDecay fDecayProcess;
#else   
  G4Decay fDecayProcess;
  G4DecayWithSpin fSDecayProcess;
#endif  

  LEMuSRAtRestSpinRotation  fMuAtRestSpinRotation;

   // Tau physics
   G4MultipleScattering   fTauPlusMultipleScattering;
   G4hIonisation          fTauPlusIonisation;

   G4MultipleScattering   fTauMinusMultipleScattering;
   G4hIonisation          fTauMinusIonisation;
 
};


#endif

