ATLAS Offline Software
Loading...
Searching...
No Matches
G4UA::TestActionVPTimerTool Class Reference

Tool which manages the TestActionVPTimer action. More...

#include <TestActionVPTimerTool.h>

Inheritance diagram for G4UA::TestActionVPTimerTool:
Collaboration diagram for G4UA::TestActionVPTimerTool:

Public Member Functions

 TestActionVPTimerTool (const std::string &type, const std::string &name, const IInterface *parent)
 Standard constructor.
virtual StatusCode finalize () override
 Triggers report merging from threads.
virtual StatusCode fillUserAction (G4AtlasUserActions &actionLists) override final
 Fill the user action lists.
StatusCode BeginOfAthenaEvent (HitCollectionMap &) override
 Calls BeginOfAthenaEvent.
StatusCode EndOfAthenaEvent (HitCollectionMap &) override
 Calls EndOfAthenaEvent.

Protected Member Functions

virtual std::unique_ptr< TestActionVPTimermakeAndFillAction (G4AtlasUserActions &) override final
 Create action for this thread.

Protected Attributes

ThreadSpecificUserAction< TestActionVPTimerm_actions
 Thread-specific storage of the user action.

Private Member Functions

void TimerPrint (std::pair< VolTree, TestActionVPTimer::volumeData >, const double tTotal, const int depth=0) const
void TreeOut (const VolTree &, const double tAtlas, int depth=0)

Private Attributes

TestActionVPTimer::Config m_config
 holds the runtime configuration
TestActionVPTimer::Report m_report
 holds data to be reported at end of run

Detailed Description

Tool which manages the TestActionVPTimer action.

Create the TestActionVPTimer for each worker thread and merges timing results in finalization.

Author
Andrea Di Simone

Definition at line 23 of file TestActionVPTimerTool.h.

Constructor & Destructor Documentation

◆ TestActionVPTimerTool()

G4UA::TestActionVPTimerTool::TestActionVPTimerTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Standard constructor.

Definition at line 40 of file TestActionVPTimerTool.cxx.

43 : UserActionToolBase<TestActionVPTimer>(type, name, parent)
44 {
45 declareProperty("CaloDepth",m_config.dCALO);
46 declareProperty("BeamPipeDepth",m_config.dBeam);
47 declareProperty("InDetDepth",m_config.dIDET);
48 declareProperty("MuonDepth",m_config.dMUON);
49 declareProperty("DetailDepth",m_config.dDetail);
50 }
TestActionVPTimer::Config m_config
holds the runtime configuration
UserActionToolBase(const std::string &type, const std::string &name, const IInterface *parent)

Member Function Documentation

◆ BeginOfAthenaEvent()

StatusCode G4UA::UserActionToolBase< TestActionVPTimer >::BeginOfAthenaEvent ( HitCollectionMap & )
inlineoverrideinherited

Calls BeginOfAthenaEvent.

Definition at line 59 of file UserActionToolBase.h.

59{return StatusCode::SUCCESS;};
abstract template utility base-class for G4 user-action tools.

◆ EndOfAthenaEvent()

StatusCode G4UA::UserActionToolBase< TestActionVPTimer >::EndOfAthenaEvent ( HitCollectionMap & )
inlineoverrideinherited

Calls EndOfAthenaEvent.

Definition at line 61 of file UserActionToolBase.h.

61{return StatusCode::SUCCESS;};

◆ fillUserAction()

virtual StatusCode G4UA::UserActionToolBase< TestActionVPTimer >::fillUserAction ( G4AtlasUserActions & actionLists)
inlinefinaloverridevirtualinherited

Fill the user action lists.

Definition at line 47 of file UserActionToolBase.h.

48 {
50 if(myAction == nullptr) {
51 ATH_MSG_ERROR( "Failed to construct user action in " << name() );
53 }
56 }
#define ATH_MSG_ERROR(x)
virtual std::unique_ptr< TestActionVPTimer > makeAndFillAction(G4AtlasUserActions &actionLists)=0

◆ finalize()

StatusCode G4UA::TestActionVPTimerTool::finalize ( )
overridevirtual

Triggers report merging from threads.

Definition at line 65 of file TestActionVPTimerTool.cxx.

66 {
67 // We shouldn't need this. End-run actions should be called by Geant4.
68 // I'll leave this here, commented out for now, for reference.
69 //for(auto& tidAction : m_actions) {
70 // ((G4UserRunAction*)tidAction.second)->EndOfRunAction(0);
71 //}
72
73 // Accumulate results across threads
76
77 if(m_report.time_index.size()){
78
79 VolTree topPV; // vector< pair<physvol*,int> >
80 // time_index is map<VolTree, TestActionVPTimer::volumeData>
81
82 topPV.push_back(m_report.time_index.begin()->first.front());
83 TestActionVPTimer::volumeData atlasData = m_report.time_index.find(topPV)->second;
84 G4double DeadTime = m_report.runTime - atlasData.tTotal;
85
86 ATH_MSG_INFO("Runtime " << m_report.runTime
87 << " Dead Time " << DeadTime );
88
89 if (m_report.nev != 0){
90 ATH_MSG_INFO("******* Beginning timer dump *******" );
91
92 ATH_MSG_INFO(setw(12) << "Time" << setw(12) << "per Event" << setw(12)
93 << "per Run" << setw(6) << "Depth" << " Location/Particle" );
94 ATH_MSG_INFO(vPrFmt(m_report.runTime, m_report.nev, atlasData.tTotal, -999, " Event Average") );
95 ATH_MSG_INFO(vPrFmt(DeadTime, m_report.nev, atlasData.tTotal, -999, " Dead/Initialization") );
96
97 ATH_MSG_INFO("\n******* Data by volume/select particles *******");
98 ATH_MSG_INFO("Data printed in reverse tree order (mother following daughter)");
99
100 TreeOut(topPV, atlasData.tTotal);
101 // for (VolIt c = v_time_index.begin(); c != v_time_index.end(); c++) {
102 // TimerPrint(*c, atlasData.tTotal, c->first.size());
103 // }
104
105 ATH_MSG_INFO( "\n******* Data by particle/category *******");
106
107 ATH_MSG_INFO(vPrFmt(atlasData.tElectron, m_report.nev, atlasData.tTotal, -999, "e+/-" ) );
108 ATH_MSG_INFO(vPrFmt(atlasData.tPhoton, m_report.nev, atlasData.tTotal, -999, "gamma" ) );
109 ATH_MSG_INFO(vPrFmt(atlasData.tNeutron, m_report.nev, atlasData.tTotal, -999, "neutron") );
110 ATH_MSG_INFO(vPrFmt(atlasData.tPion, m_report.nev, atlasData.tTotal, -999, "pi+/-/0") );
111 ATH_MSG_INFO(vPrFmt(atlasData.tBaryon, m_report.nev, atlasData.tTotal, -999, "baryon" ) );
112 ATH_MSG_INFO(vPrFmt(atlasData.tLepton, m_report.nev, atlasData.tTotal, -999, "lepton" ) );
113 ATH_MSG_INFO(vPrFmt(atlasData.tMeson, m_report.nev, atlasData.tTotal, -999, "meson" ) );
114 ATH_MSG_INFO(vPrFmt(atlasData.tOther, m_report.nev, atlasData.tTotal, -999, "other" ) );
115
116 } else { ATH_MSG_WARNING("******* No events timed! *******"); }
117 } else { ATH_MSG_WARNING("******* No Timing information recorded! *******"); }
118
119 return StatusCode::SUCCESS;
120 }
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
std::vector< VolID > VolTree
TestActionVPTimer::Report m_report
holds data to be reported at end of run
void TreeOut(const VolTree &, const double tAtlas, int depth=0)
const Report & getReport() const
ThreadSpecificUserAction< TestActionVPTimer > m_actions
std::string vPrFmt(double time, double nEv, double tRun, int depth, const std::string &id)

◆ makeAndFillAction()

std::unique_ptr< TestActionVPTimer > G4UA::TestActionVPTimerTool::makeAndFillAction ( G4AtlasUserActions & actionList)
finaloverrideprotectedvirtual

Create action for this thread.

Implements G4UA::UserActionToolBase< TestActionVPTimer >.

Definition at line 54 of file TestActionVPTimerTool.cxx.

55 {
56 ATH_MSG_DEBUG("Constructing a TestActionVPTimer");
57 auto action = std::make_unique<TestActionVPTimer>(m_config);
58 actionList.runActions.push_back( action.get() );
59 actionList.eventActions.push_back( action.get() );
60 actionList.steppingActions.push_back( action.get() );
61 return action;
62 }
#define ATH_MSG_DEBUG(x)

◆ TimerPrint()

void G4UA::TestActionVPTimerTool::TimerPrint ( std::pair< VolTree, TestActionVPTimer::volumeData > vp,
const double tTotal,
const int depth = 0 ) const
inlineprivate

Definition at line 139 of file TestActionVPTimerTool.cxx.

141 {
142 G4VPhysicalVolume* pv = vp.first.back().first;
143 std::string physical = stringify(pv->GetName());
144 std::string copyNo = stringify(vp.first.back().second);
145 std::string mother = "";
146 if (vp.first.size() != 1) mother = stringify( (vp.first.end()-2)->first->GetName() );
147 ATH_MSG_INFO(vPrFmt(vp.second.tTotal, m_report.nev, tTotal, depth-1, physical+"_"+copyNo+" "+mother) );
148 ATH_MSG_INFO(vPrFmt(vp.second.tElectron, m_report.nev, tTotal, depth-1, " - electrons & positrons") );
149 ATH_MSG_INFO(vPrFmt(vp.second.tPhoton, m_report.nev, tTotal, depth-1, " - photons") );
150 ATH_MSG_INFO(vPrFmt(vp.second.tNeutron, m_report.nev, tTotal, depth-1, " - neutrons") );
151 ATH_MSG_INFO(vPrFmt(vp.second.tPion, m_report.nev, tTotal, depth-1, " - pions") );
152
153 double tOther = vp.second.tTotal - vp.second.tElectron - vp.second.tPhoton - vp.second.tNeutron - vp.second.tPion;
154 ATH_MSG_INFO(vPrFmt(tOther, m_report.nev, m_report.runTime, depth-1, " - other particles") );
155 }
std::string stringify(T obj)
std::string depth
tag string for intendation
Definition fastadd.cxx:46

◆ TreeOut()

void G4UA::TestActionVPTimerTool::TreeOut ( const VolTree & id,
const double tAtlas,
int depth = 0 )
private

Definition at line 123 of file TestActionVPTimerTool.cxx.

124 {
125 VolIt v = m_report.time_index.find(id);
126 if (v != m_report.time_index.end()) {
127 depth++;
128 for (VolIt c = m_report.time_index.begin(); c != m_report.time_index.end(); ++c) {
129 VolTree check = c->first;
130 check.pop_back();
131 if (id == check) TreeOut(c->first, tAtlas, depth);
132 }
133 TimerPrint(*v, tAtlas, depth);
134 }
135 }
void TimerPrint(std::pair< VolTree, TestActionVPTimer::volumeData >, const double tTotal, const int depth=0) const
VolMap::const_iterator VolIt

Member Data Documentation

◆ m_actions

Thread-specific storage of the user action.

Definition at line 70 of file UserActionToolBase.h.

◆ m_config

TestActionVPTimer::Config G4UA::TestActionVPTimerTool::m_config
private

holds the runtime configuration

Definition at line 42 of file TestActionVPTimerTool.h.

◆ m_report

TestActionVPTimer::Report G4UA::TestActionVPTimerTool::m_report
private

holds data to be reported at end of run

Definition at line 44 of file TestActionVPTimerTool.h.


The documentation for this class was generated from the following files: