
#ifndef LEMuSRMUONIUMScatt_h
#define LEMuSRMUONIUMScatt_h 1
#include "G4VDiscreteProcess.hh"
#include "G4EnergyLossTables.hh"
#include "G4GPILSelection.hh"
#include "G4PhysicsLogVector.hh"
#include "G4VPhysicalVolume.hh"
#include "G4VParticleChange.hh"
#include "G4ParticleChange.hh"
#include "G4UnitsTable.hh"
#include "G4MaterialCutsCouple.hh"
#include "G4ForceCondition.hh"

#include "G4ParticleTable.hh"
#include "G4DynamicParticle.hh"
#include "LEMuSRPrimaryGeneratorAction.hh"

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......

class LEMuSRMUONIUMScatt : public G4VDiscreteProcess

{
 public:    // with description
  LEMuSRMUONIUMScatt(const G4String& name="Muscatt" ,
		    G4ProcessType   aType = fGeneral );
  

  ~LEMuSRMUONIUMScatt();

  G4VParticleChange* PostStepDoIt(
			     const G4Track& ,
			     const G4Step& 
			    );
  G4double GetMeanFreePath(const G4Track& aTrack,
			   G4double   previousStepSize,
			   G4ForceCondition* condition
                                                               );



  G4bool CheckCondition( const G4Step& aStep);
  G4bool CheckCondition( const G4Step* aStep);


  G4String p_name, vname;
  G4double spin, edep, toten, kinen, tof, globaltime, proptime;
  G4ThreeVector hitpos, hitmom;
  G4int ID;

  G4bool condition;

  void GetDatas( const G4Step* aStep);
   // model parameters
  G4ParticleTable* particleTable; 
  G4ParticleDefinition* particle;
  G4double yvector[3];
  G4double rnd;
  G4DynamicParticle *DP;
  
   G4ParticleChange fParticleChange; 
 




  void  PrepareSecondary(const G4Track&);
  G4Track* aSecondary;

   void InitializeSecondaries(const G4Track&);
 

 
};


#endif
 

 
