CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/SimG4Core/Application/interface/SteppingAction.h

Go to the documentation of this file.
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