/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
SimG4Core/Application/interface/Phase2SteppingAction.h
97 строк
3 KB
Kevin Pedro
avoid memory leak
25 июн 2026, 00:06
25 июн 2026, 00:06
f1c243b
Код
Авторство
О чём код?
#ifndef SimG4Core_Phase2SteppingAction_H #define SimG4Core_Phase2SteppingAction_H #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "SimG4Core/Notification/interface/SimActivityRegistry.h" #include "SimG4Core/Application/interface/SteppingTrackStatus.h" #include "G4LogicalVolume.hh" #include "G4Region.hh" #include "G4UserSteppingAction.hh" #include "G4VPhysicalVolume.hh" #include "G4VTouchable.hh" #include "G4Track.hh" #include <string> #include <vector> class CMSSteppingVerbose; class Phase2TrackFilter; class Phase2SteppingAction : public G4UserSteppingAction { public: explicit Phase2SteppingAction( const CMSSteppingVerbose*, const edm::ParameterSet&, const edm::ParameterSet&, bool, bool); ~Phase2SteppingAction() override = default; void UserSteppingAction(const G4Step* aStep) final; SimActivityRegistry::G4StepSignal m_g4StepSignal; private: bool initPointer(); inline bool isInsideDeadRegion(const G4Region* reg) const; inline bool isOutOfTimeWindow(const G4Region* reg, const double& time) const; bool isLowEnergy(const G4LogicalVolume*, const G4Track*) const; void PrintKilledTrack(const G4Track*, const TrackStatus&) const; const G4VPhysicalVolume* cmse{nullptr}; const G4VPhysicalVolume* tracker{nullptr}; const G4VPhysicalVolume* calo{nullptr}; const G4VPhysicalVolume* btl{nullptr}; const CMSSteppingVerbose* steppingVerbose; std::unique_ptr<Phase2TrackFilter> filter; double theCriticalEnergyForVacuum; double theCriticalDensity; double maxTrackTime; double maxTrackTimeForward; double maxZCentralCMS; unsigned int numberTimes; unsigned int numberEkins; unsigned int numberPart; unsigned int ndeadRegions; unsigned int nWarnings{0}; G4int maxNumberOfSteps; bool initialized{false}; bool killBeamPipe{false}; bool hasWatcher; bool dd4hep_; bool doFineCalo_; std::vector<double> maxTrackTimes, ekinMins; std::vector<std::string> maxTimeNames, ekinNames, ekinParticles; std::vector<std::string> deadRegionNames; std::vector<const G4Region*> maxTimeRegions; std::vector<const G4Region*> deadRegions; std::vector<G4LogicalVolume*> ekinVolumes; std::vector<int> ekinPDG; G4String cmseName_, trackerName_, caloName_, btlName_, cms2ZDCName_; }; inline bool Phase2SteppingAction::isInsideDeadRegion(const G4Region* reg) const { bool res = false; for (auto& region : deadRegions) { if (reg == region) { res = true; break; } } return res; } inline bool Phase2SteppingAction::isOutOfTimeWindow(const G4Region* reg, const double& time) const { double tofM = maxTrackTime; for (unsigned int i = 0; i < numberTimes; ++i) { if (reg == maxTimeRegions[i]) { tofM = maxTrackTimes[i]; break; } } return (time > tofM); } #endif