00001 #ifndef SimG4Core_SteppingAction_H 00002 #define SimG4Core_SteppingAction_H 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 #include "SimG4Core/Notification/interface/SimActivityRegistry.h" 00006 00007 #include "G4LogicalVolume.hh" 00008 #include "G4Region.hh" 00009 #include "G4UserSteppingAction.hh" 00010 #include "G4VPhysicalVolume.hh" 00011 00012 #include <string> 00013 #include <vector> 00014 00015 class EventAction; 00016 class G4VTouchable; 00017 00018 class SteppingAction: public G4UserSteppingAction { 00019 00020 public: 00021 SteppingAction(EventAction * ea,const edm::ParameterSet & ps); 00022 ~SteppingAction(); 00023 void UserSteppingAction(const G4Step * aStep); 00024 00025 SimActivityRegistry::G4StepSignal m_g4StepSignal; 00026 private: 00027 void catchLowEnergyInVacuumHere(const G4Step * aStep); 00028 void catchLowEnergyInVacuumNext(const G4Step * aStep); 00029 bool catchLongLived (const G4Step * aStep); 00030 bool killLowEnergy (const G4Step * aStep); 00031 bool initPointer(); 00032 bool isThisVolume(const G4VTouchable* touch, G4VPhysicalVolume* pv); 00033 void killTrack (const G4Step * aStep); 00034 private: 00035 EventAction *eventAction_; 00036 bool initialized; 00037 G4VPhysicalVolume *tracker, *calo; 00038 bool killBeamPipe; 00039 double theCriticalEnergyForVacuum; 00040 double theCriticalDensity; 00041 double maxTrackTime; 00042 std::vector<double> maxTrackTimes, ekinMins; 00043 std::vector<std::string> maxTimeNames, ekinNames, ekinParticles; 00044 std::vector<G4Region*> maxTimeRegions; 00045 std::vector<G4LogicalVolume*> ekinVolumes; 00046 std::vector<int> ekinPDG; 00047 int verbose; 00048 }; 00049 00050 #endif