ATLAS Offline Software
MCTruthUserAction.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // MCTruthUserAction.cxx, (c) ATLAS Detector software
8 
9 // class header
10 #include "MCTruthUserAction.h"
11 
12 // package includes
13 #include "ISFTrajectory.h"
14 
15 // ISF includes
16 #include "ISF_Event/ISFParticle.h"
17 
20 
21 // ISF Geant4 includes
23 
24 // Athena includes
27 #include "MCTruth/TrackHelper.h"
28 
29 #include "G4EventManager.hh"
30 
31 // Atlas G4 Helpers
32 
33 
34 namespace G4UA{
35 
36  namespace iGeant4{
37 
39  : m_config(config)
40  , m_truthRecordSvcQuick(nullptr)
41  {
42 
44  {
45  G4cout << "create MCTruthUserAction" << G4endl;
46  }
47 
48  if (m_config.truthRecordSvc.retrieve().isFailure()){
49  G4ExceptionDescription description;
50  description << G4String("MCTruthUserAction: ") + "Could not retrieve " << m_config.truthRecordSvc;
51  G4Exception("G4UA::iGeant4::MCTruthUserAction", "NoTruthSvc", FatalException, description);
52  return; //The G4Exception call above should abort the job, but Coverity does not seem to pick this up.
53  }
54 
55  // store a pointer directly to the truth service class
56  // by doing so, the Gaudi overhead can be minimized
58  }
59 
60  void MCTruthUserAction::PreUserTrackingAction(const G4Track* inTrack){
61 
62  TrackHelper trackHelper(inTrack);
63 
64  if (trackHelper.IsPrimary() ||
65  (trackHelper.IsRegisteredSecondary()&&m_config.ilevel>1) ||
66  (trackHelper.IsSecondary()&&m_config.ilevel>2)) {
67 
68  auto trkMgr = G4EventManager::GetEventManager()->GetTrackingManager();
69  G4Trajectory *temp=new ::iGeant4::ISFTrajectory(inTrack, m_truthRecordSvcQuick);
70  trkMgr->SetStoreTrajectory(true);
71  trkMgr->SetTrajectory(temp);
72 
73  // TODO: check that the 'temp' object is actually deleted by the G4TrackingManager
74  // after FADS::FadsTrackingAction::GetTrackingAction()->ResetTraj() is executed
75  }
76 
77  }
78 
80  G4EventManager::GetEventManager()->GetTrackingManager()->SetStoreTrajectory(false);
81  }
82  } // namespace iGeant4
83 
84 } // namespace G4UA
G4UA::iGeant4::MCTruthUserAction::m_truthRecordSvcQuick
ISF::ITruthSvc * m_truthRecordSvcQuick
used for faster access
Definition: MCTruthUserAction.h:55
G4UA
for nSW
Definition: CalibrationDefaultProcessing.h:19
TrackHelper.h
IParticleBroker.h
MCTruthUserAction.h
G4UA::iGeant4::MCTruthUserAction::MCTruthUserAction
MCTruthUserAction(const Config &config)
Definition: MCTruthUserAction.cxx:38
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
G4UA::iGeant4::MCTruthUserAction::PostUserTrackingAction
virtual void PostUserTrackingAction(const G4Track *) override
Definition: MCTruthUserAction.cxx:79
TrackHelper
Definition: TrackHelper.h:14
ISFParticle.h
ISFTrajectory.h
G4UA::iGeant4::MCTruthUserAction::PreUserTrackingAction
virtual void PreUserTrackingAction(const G4Track *) override
Definition: MCTruthUserAction.cxx:60
TrackHelper::IsSecondary
bool IsSecondary() const
Definition: TrackHelper.cxx:30
TrackInformation.h
G4UA::iGeant4::MCTruthUserAction::Config
Definition: MCTruthUserAction.h:42
TrackHelper::IsRegisteredSecondary
bool IsRegisteredSecondary() const
Definition: TrackHelper.cxx:25
AtlasG4EventUserInfo.h
TrackHelper::IsPrimary
bool IsPrimary() const
Definition: TrackHelper.cxx:15
Geant4TruthIncident.h
G4UA::iGeant4::MCTruthUserAction::Config::ilevel
int ilevel
Definition: MCTruthUserAction.h:46
G4UA::iGeant4::MCTruthUserAction::Config::truthRecordSvc
ServiceHandle< ISF::ITruthSvc > truthRecordSvc
Definition: MCTruthUserAction.h:43
G4UA::iGeant4::MCTruthUserAction::m_config
Config m_config
Definition: MCTruthUserAction.h:54
ITruthSvc.h
description
std::string description
glabal timer - how long have I taken so far?
Definition: hcg.cxx:88
iGeant4
Definition: Geant4TruthIncident.h:35
G4UA::iGeant4::MCTruthUserAction::Config::verboseLevel
unsigned int verboseLevel
Definition: MCTruthUserAction.h:47