CMS 3D CMS Logo

SteppingAction.h
Go to the documentation of this file.
1 #ifndef SimG4Core_SteppingAction_H
2 #define SimG4Core_SteppingAction_H
3 
6 
7 #include "G4LogicalVolume.hh"
8 #include "G4Region.hh"
9 #include "G4UserSteppingAction.hh"
10 #include "G4VPhysicalVolume.hh"
11 #include "G4VTouchable.hh"
12 #include "G4Track.hh"
13 
14 #include <string>
15 #include <vector>
16 
17 class EventAction;
18 class CMSSteppingVerbose;
19 
21  sAlive = 0,
29 };
30 
31 class SteppingAction : public G4UserSteppingAction {
32 public:
33  explicit SteppingAction(EventAction* ea, const edm::ParameterSet& ps, const CMSSteppingVerbose*, bool hasW);
34  ~SteppingAction() override;
35 
36  void UserSteppingAction(const G4Step* aStep) final;
37 
39 
40 private:
41  bool initPointer();
42 
43  inline bool isInsideDeadRegion(const G4Region* reg) const;
44  inline bool isOutOfTimeWindow(const G4Track* theTrack, const G4Region* reg) const;
45  inline bool isThisVolume(const G4VTouchable* touch, const G4VPhysicalVolume* pv) const;
46 
47  bool isLowEnergy(const G4Step* aStep) const;
48  void PrintKilledTrack(const G4Track*, const TrackStatus&) const;
49 
51  const G4VPhysicalVolume *tracker, *calo;
55  double maxTrackTime;
58  std::vector<double> maxTrackTimes, ekinMins;
59  std::vector<std::string> maxTimeNames, ekinNames, ekinParticles;
60  std::vector<std::string> deadRegionNames;
61  std::vector<const G4Region*> maxTimeRegions;
62  std::vector<const G4Region*> deadRegions;
63  std::vector<G4LogicalVolume*> ekinVolumes;
64  std::vector<int> ekinPDG;
65  unsigned int numberTimes;
66  unsigned int numberEkins;
67  unsigned int numberPart;
68  unsigned int ndeadRegions;
69  unsigned int nWarnings;
70 
73  bool hasWatcher;
74 };
75 
76 inline bool SteppingAction::isInsideDeadRegion(const G4Region* reg) const {
77  bool res = false;
78  for (auto& region : deadRegions) {
79  if (reg == region) {
80  res = true;
81  break;
82  }
83  }
84  return res;
85 }
86 
87 inline bool SteppingAction::isOutOfTimeWindow(const G4Track* theTrack, const G4Region* reg) const {
88  double tofM = maxTrackTime;
89  for (unsigned int i = 0; i < numberTimes; ++i) {
90  if (reg == maxTimeRegions[i]) {
91  tofM = maxTrackTimes[i];
92  break;
93  }
94  }
95  return (theTrack->GetGlobalTime() > tofM);
96 }
97 
98 inline bool SteppingAction::isThisVolume(const G4VTouchable* touch, const G4VPhysicalVolume* pv) const {
99  int level = (touch->GetHistoryDepth()) + 1;
100  return (level >= 3) ? (touch->GetVolume(level - 3) == pv) : false;
101 }
102 
103 #endif
personalPlayback.level
level
Definition: personalPlayback.py:22
SteppingAction::maxTimeNames
std::vector< std::string > maxTimeNames
Definition: SteppingAction.h:59
SteppingAction::theCriticalDensity
double theCriticalDensity
Definition: SteppingAction.h:54
mps_fire.i
i
Definition: mps_fire.py:428
EventAction
Definition: EventAction.h:23
SteppingAction::tracker
const G4VPhysicalVolume * tracker
Definition: SteppingAction.h:51
SteppingAction::killBeamPipe
bool killBeamPipe
Definition: SteppingAction.h:72
SteppingAction::isLowEnergy
bool isLowEnergy(const G4Step *aStep) const
Definition: SteppingAction.cc:175
SteppingAction::isOutOfTimeWindow
bool isOutOfTimeWindow(const G4Track *theTrack, const G4Region *reg) const
Definition: SteppingAction.h:87
SteppingAction::maxZCentralCMS
double maxZCentralCMS
Definition: SteppingAction.h:57
SteppingAction::numberPart
unsigned int numberPart
Definition: SteppingAction.h:67
sAlive
Definition: SteppingAction.h:21
SteppingAction
Definition: SteppingAction.h:31
SteppingAction::maxTrackTime
double maxTrackTime
Definition: SteppingAction.h:55
SteppingAction::deadRegionNames
std::vector< std::string > deadRegionNames
Definition: SteppingAction.h:60
CMSSteppingVerbose
Definition: CMSSteppingVerbose.h:25
sKilledByProcess
Definition: SteppingAction.h:22
sLowEnergyInVacuum
Definition: SteppingAction.h:26
SteppingAction::initPointer
bool initPointer()
Definition: SteppingAction.cc:194
SimActivityRegistry.h
SteppingAction::ekinParticles
std::vector< std::string > ekinParticles
Definition: SteppingAction.h:59
TrackStatus
TrackStatus
Definition: SteppingAction.h:20
SteppingAction::maxTimeRegions
std::vector< const G4Region * > maxTimeRegions
Definition: SteppingAction.h:61
SteppingAction::ekinNames
std::vector< std::string > ekinNames
Definition: SteppingAction.h:59
SteppingAction::theCriticalEnergyForVacuum
double theCriticalEnergyForVacuum
Definition: SteppingAction.h:53
sOutOfTime
Definition: SteppingAction.h:24
SteppingAction::initialized
bool initialized
Definition: SteppingAction.h:71
SteppingAction::maxTrackTimeForward
double maxTrackTimeForward
Definition: SteppingAction.h:56
SteppingAction::PrintKilledTrack
void PrintKilledTrack(const G4Track *, const TrackStatus &) const
Definition: SteppingAction.cc:273
sim_act::Signaler< G4Step >
SteppingAction::isInsideDeadRegion
bool isInsideDeadRegion(const G4Region *reg) const
Definition: SteppingAction.h:76
SteppingAction::numberTimes
unsigned int numberTimes
Definition: SteppingAction.h:65
SteppingAction::steppingVerbose
const CMSSteppingVerbose * steppingVerbose
Definition: SteppingAction.h:52
sDeadRegion
Definition: SteppingAction.h:23
SteppingAction::maxTrackTimes
std::vector< double > maxTrackTimes
Definition: SteppingAction.h:58
edm::ParameterSet
Definition: ParameterSet.h:47
SteppingAction::ndeadRegions
unsigned int ndeadRegions
Definition: SteppingAction.h:68
SteppingAction::calo
const G4VPhysicalVolume * calo
Definition: SteppingAction.h:51
HLT_FULL_cff.region
region
Definition: HLT_FULL_cff.py:88338
MetAnalyzer.pv
def pv(vc)
Definition: MetAnalyzer.py:7
SteppingAction::UserSteppingAction
void UserSteppingAction(const G4Step *aStep) final
Definition: SteppingAction.cc:89
SteppingAction::ekinMins
std::vector< double > ekinMins
Definition: SteppingAction.h:58
SteppingAction::~SteppingAction
~SteppingAction() override
Definition: SteppingAction.cc:87
SteppingAction::hasWatcher
bool hasWatcher
Definition: SteppingAction.h:73
res
Definition: Electron.h:6
SteppingAction::isThisVolume
bool isThisVolume(const G4VTouchable *touch, const G4VPhysicalVolume *pv) const
Definition: SteppingAction.h:98
sEnergyDepNaN
Definition: SteppingAction.h:27
SteppingAction::ekinVolumes
std::vector< G4LogicalVolume * > ekinVolumes
Definition: SteppingAction.h:63
SteppingAction::m_g4StepSignal
SimActivityRegistry::G4StepSignal m_g4StepSignal
Definition: SteppingAction.h:38
SteppingAction::eventAction_
EventAction * eventAction_
Definition: SteppingAction.h:50
sLowEnergy
Definition: SteppingAction.h:25
SteppingAction::ekinPDG
std::vector< int > ekinPDG
Definition: SteppingAction.h:64
SteppingAction::SteppingAction
SteppingAction(EventAction *ea, const edm::ParameterSet &ps, const CMSSteppingVerbose *, bool hasW)
Definition: SteppingAction.cc:18
ParameterSet.h
SteppingAction::deadRegions
std::vector< const G4Region * > deadRegions
Definition: SteppingAction.h:62
sVeryForward
Definition: SteppingAction.h:28
SteppingAction::numberEkins
unsigned int numberEkins
Definition: SteppingAction.h:66
SteppingAction::nWarnings
unsigned int nWarnings
Definition: SteppingAction.h:69