ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
G4Utilities
G4DebuggingTools
src
StepNtuple.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
StepNtuple.h
"
6
7
#include "GaudiKernel/IDataProviderSvc.h"
8
#include "GaudiKernel/INTupleSvc.h"
9
#include "GaudiKernel/NTuple.h"
10
#include "GaudiKernel/SmartDataPtr.h"
11
#include "
SimHelpers/ServiceAccessor.h
"
12
13
#include "G4Step.hh"
14
15
#include "GaudiKernel/Bootstrap.h"
16
#include "GaudiKernel/ISvcLocator.h"
17
#include "GaudiKernel/IMessageSvc.h"
18
19
namespace
G4UA
20
{
21
22
StepNtuple::StepNtuple
(
const
MSG::Level lvl)
23
:
AthMessaging
(
Gaudi
::svcLocator()->service< IMessageSvc >(
"MessageSvc"
),
24
"StepNtuple"
)
25
{
26
AthMessaging::setLevel
(lvl);
27
}
28
29
void
StepNtuple::BeginOfEventAction
(
const
G4Event*)
30
{
31
eventSteps
.clear();
32
}
33
34
void
StepNtuple::EndOfEventAction
(
const
G4Event*)
35
{
36
ATH_MSG_DEBUG
(
"Start end of event; size is "
<<
eventSteps
.size());
37
m_nsteps
=
eventSteps
.size();
38
39
for
(
unsigned
int
k=0; k<
eventSteps
.size(); k++){
40
m_pdgcode
[k] =
eventSteps
[k].code;
41
m_step_x
[k] =
eventSteps
[k].x;
42
m_step_y
[k] =
eventSteps
[k].y;
43
m_step_z
[k] =
eventSteps
[k].z;
44
m_time
[k] =
eventSteps
[k].time;
45
m_dep
[k] =
eventSteps
[k].dep;
46
}
47
48
if
(!
ntupleSvc
()->writeRecord(
"/NTUPLES/FILE1/StepNtuple/10"
).isSuccess()){
49
ATH_MSG_ERROR
(
" failed to write record for this event"
);
50
}
51
}
52
53
void
StepNtuple::UserSteppingAction
(
const
G4Step* aStep)
54
{
55
if
(
eventSteps
.size()<49000){
56
57
stepdata
theInfo{};
58
59
theInfo.
dep
=aStep->GetTotalEnergyDeposit();
60
theInfo.
time
=aStep->GetPreStepPoint()->GetGlobalTime();
61
theInfo.
code
=aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
62
G4ThreeVector pos=aStep->GetPreStepPoint()->GetPosition();
63
theInfo.
x
=pos.x();
64
theInfo.
y
=pos.y();
65
theInfo.
z
=pos.z();
66
67
eventSteps
.push_back(theInfo);
68
ATH_MSG_VERBOSE
(
"Stepping; size is "
<<
eventSteps
.size());
69
}
70
}
71
72
void
StepNtuple::BeginOfRunAction
(
const
G4Run*)
73
{
74
NTupleFilePtr file1(
ntupleSvc
(),
"/NTUPLES/FILE1"
);
75
76
SmartDataPtr<NTuple::Directory>
77
ntdir(
ntupleSvc
(),
"/NTUPLES/FILE1/StepNtuple"
);
78
if
( !ntdir ) {
79
// otherwise create the directory
80
ntdir =
ntupleSvc
()->createDirectory(file1,
"StepNtuple"
);
81
}
82
if
( ! ntdir ) {
83
ATH_MSG_ERROR
(
" failed to get ntuple directory"
);
84
}
85
86
NTuplePtr nt(
ntupleSvc
(),
"/NTUPLES/FILE1/StepNtuple/10"
);
87
88
// Check if already booked
89
if
( !nt ) {
90
nt =
ntupleSvc
()->book( ntdir.ptr(), 10, CLID_ColumnWiseTuple,
"G4 Step Ntuple"
);
91
92
if
( nt ) {
93
ATH_MSG_DEBUG
(
"booked ntuple "
);
94
95
// WARNING!! Force limit to 50k tracks
96
if
( nt->addItem (
"NSteps"
,
m_nsteps
,0, 50000).isFailure() ||
97
nt->addItem (
"PCode"
,
m_nsteps
,
m_pdgcode
).isFailure() ||
98
nt->addItem (
"step_x"
,
m_nsteps
,
m_step_x
).isFailure() ||
99
nt->addItem (
"step_y"
,
m_nsteps
,
m_step_y
).isFailure() ||
100
nt->addItem (
"step_z"
,
m_nsteps
,
m_step_z
).isFailure() ||
101
nt->addItem (
"dep"
,
m_nsteps
,
m_dep
).isFailure() ||
102
nt->addItem (
"time"
,
m_nsteps
,
m_time
).isFailure() ) {
103
ATH_MSG_ERROR
(
"Could not book ntuple!! "
);
104
}
105
}
106
}
107
}
108
109
}
// namespace G4UA
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
ServiceAccessor.h
ntupleSvc
INTupleSvc * ntupleSvc()
Definition
ServiceAccessor.h:14
StepNtuple.h
AthMessaging::setLevel
void setLevel(MSG::Level lvl)
Change the current logging level.
Definition
AthMessaging.cxx:28
AthMessaging::AthMessaging
AthMessaging(IMessageSvc *msgSvc, const std::string &name)
Constructor.
Definition
AthMessaging.cxx:13
G4UA::StepNtuple::EndOfEventAction
virtual void EndOfEventAction(const G4Event *) override
Definition
StepNtuple.cxx:34
G4UA::StepNtuple::m_pdgcode
NTuple::Array< float > m_pdgcode
Definition
StepNtuple.h:48
G4UA::StepNtuple::BeginOfRunAction
virtual void BeginOfRunAction(const G4Run *) override
Definition
StepNtuple.cxx:72
G4UA::StepNtuple::BeginOfEventAction
virtual void BeginOfEventAction(const G4Event *) override
the hooks for G4 UA handling
Definition
StepNtuple.cxx:29
G4UA::StepNtuple::eventSteps
std::vector< stepdata > eventSteps
holds data extracted from steps
Definition
StepNtuple.h:44
G4UA::StepNtuple::m_step_y
NTuple::Array< float > m_step_y
Definition
StepNtuple.h:50
G4UA::StepNtuple::UserSteppingAction
virtual void UserSteppingAction(const G4Step *) override
Definition
StepNtuple.cxx:53
G4UA::StepNtuple::m_nsteps
NTuple::Item< long > m_nsteps
handles for ntuple writing
Definition
StepNtuple.h:47
G4UA::StepNtuple::m_time
NTuple::Array< float > m_time
Definition
StepNtuple.h:52
G4UA::StepNtuple::m_step_x
NTuple::Array< float > m_step_x
Definition
StepNtuple.h:49
G4UA::StepNtuple::m_step_z
NTuple::Array< float > m_step_z
Definition
StepNtuple.h:51
G4UA::StepNtuple::m_dep
NTuple::Array< float > m_dep
Definition
StepNtuple.h:53
G4UA::StepNtuple::StepNtuple
StepNtuple(const MSG::Level lvl=MSG::INFO)
Constructor with message level argument for AthMessaging.
Definition
StepNtuple.cxx:22
G4UA
for nSW
Definition
CalibrationDefaultProcessing.h:19
Gaudi
=============================================================================
Definition
CaloGPUClusterAndCellDataMonitorOptions.h:273
G4UA::StepNtuple::stepdata
simple struct to hold step information
Definition
StepNtuple.h:27
G4UA::StepNtuple::stepdata::dep
float dep
Definition
StepNtuple.h:28
G4UA::StepNtuple::stepdata::code
float code
Definition
StepNtuple.h:28
G4UA::StepNtuple::stepdata::y
float y
Definition
StepNtuple.h:28
G4UA::StepNtuple::stepdata::time
float time
Definition
StepNtuple.h:28
G4UA::StepNtuple::stepdata::z
float z
Definition
StepNtuple.h:28
G4UA::StepNtuple::stepdata::x
float x
Definition
StepNtuple.h:28
Generated on
for ATLAS Offline Software by
1.17.0