ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
TileCalorimeter
TileRec
src
TileHitVecToNtuple.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
//*****************************************************************************
6
// Filename : TileHitVecToNtuple.cxx
7
// Author : Mikhail
8
// Created : July, 2005
9
//
10
// DESCRIPTION:
11
// Implement the algorithm
12
//
13
// HISTORY:
14
//
15
// BUGS:
16
//
17
//*****************************************************************************
18
19
// Gaudi includes
20
#include "GaudiKernel/INTupleSvc.h"
21
#include "GaudiKernel/IDataProviderSvc.h"
22
#include "GaudiKernel/SmartDataPtr.h"
23
24
//Atlas include
25
#include "
AthenaKernel/errorcheck.h
"
26
27
// Calo include
28
#include "
CaloIdentifier/TileID.h
"
29
30
//TileCalo include
31
#include "
TileSimEvent/TileHitVector.h
"
32
#include "
TileRec/TileHitVecToNtuple.h
"
33
34
TileHitVecToNtuple::TileHitVecToNtuple
(
const
std::string& name, ISvcLocator* pSvcLocator)
35
:
AthAlgorithm
(name, pSvcLocator)
36
,
m_ntuplePtr
(0)
37
,
m_ntupleID
(
"h32"
)
38
,
m_ntupleLoc
(
"/FILE1/TileRec"
)
39
,
m_hitVector
(
"TileHitVec"
)
40
,
m_tileID
(0)
41
{
42
declareProperty
(
"TileHitVector"
,
m_hitVector
);
43
declareProperty
(
"NTupleLoc"
,
m_ntupleLoc
);
44
declareProperty
(
"NTupleID"
,
m_ntupleID
);
45
declareProperty
(
"CommitNtuple"
,
m_commitNtuple
=
true
);
46
declareProperty
(
"MaxLength"
,
m_maxLength
= 4999);
47
48
}
49
50
TileHitVecToNtuple::~TileHitVecToNtuple
()
51
{
52
}
53
54
//****************************************************************************
55
//* Initialization
56
//****************************************************************************
57
58
StatusCode
TileHitVecToNtuple::initialize
()
59
{
60
61
ATH_MSG_INFO
(
"Initialization started"
);
62
63
// retrieve TileID helper from det store
64
65
CHECK
(
detStore
()->retrieve(
m_tileID
) );
66
67
m_ntupleLoc
=
"/NTUPLES"
+
m_ntupleLoc
;
68
69
SmartDataPtr<NTuple::Directory> DirPtr(
ntupleSvc
(),
m_ntupleLoc
);
70
if
(!DirPtr) DirPtr=
ntupleSvc
()->createDirectory(
m_ntupleLoc
);
71
if
(!DirPtr) {
72
ATH_MSG_ERROR
(
"Invalid Ntuple Directory: "
);
73
return
StatusCode::FAILURE;
74
}
75
76
m_ntuplePtr
=
ntupleSvc
()->book(DirPtr.ptr(),
m_ntupleID
,
77
CLID_ColumnWiseTuple,
"TileHit-Ntuple"
);
78
79
if
(!
m_ntuplePtr
) {
80
std::string ntupleCompleteID=
m_ntupleLoc
+
"/"
+
m_ntupleID
;
81
NTuplePtr nt(
ntupleSvc
(),ntupleCompleteID);
82
83
if
(!nt) {
84
ATH_MSG_ERROR
(
85
"Failed to book or to retrieve ntuple "
<< ntupleCompleteID );
86
return
StatusCode::FAILURE;
87
}
else
{
88
ATH_MSG_INFO
(
"Reaccessing ntuple "
<< ntupleCompleteID );
89
m_ntuplePtr
= nt;
90
}
91
92
}
93
94
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/nhit"
,
m_nchan
,0,
m_maxLength
) );
95
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE"
,
m_tolE
) );
96
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE05"
,
m_tolE0
) );
97
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE5"
,
m_tolE1
) );
98
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE10"
,
m_tolE2
) );
99
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE25"
,
m_tolE3
) );
100
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE50"
,
m_tolE4
) );
101
102
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/energy"
,
m_nchan
,
m_energy
) );
103
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/time"
,
m_nchan
,
m_time
) );
104
105
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/detector"
,
m_nchan
,
m_detector
,0,3) );
106
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/side"
,
m_nchan
,
m_side
,-1,1) );
107
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/sample"
,
m_nchan
,
m_sample
,0,3) );
108
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/pmt"
,
m_nchan
,
m_pmt
,0,1) );
109
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/eta"
,
m_nchan
,
m_eta
,0,15) );
110
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/phi"
,
m_nchan
,
m_phi
,0,63) );
111
112
ATH_MSG_INFO
(
"Initialization completed"
);
113
return
StatusCode::SUCCESS;
114
}
115
116
//****************************************************************************
117
//* Execution
118
//****************************************************************************
119
120
StatusCode
TileHitVecToNtuple::execute
(
const
EventContext&
/*ctx*/
)
121
{
122
123
// step1: read TileHits from TDS
124
const
TileHitVector
* inputHits =
nullptr
;
125
CHECK
(
evtStore
()->retrieve(inputHits,
m_hitVector
) );
126
127
m_nchan
= 0;
128
m_tolE
= 0.0;
129
m_tolE0
= 0.0;
130
m_tolE1
= 0.0;
131
m_tolE2
= 0.0;
132
m_tolE3
= 0.0;
133
m_tolE4
= 0.0;
134
int
n_hit = 0;
135
for
(
const
TileHit
& cinp : *inputHits) {
136
137
Identifier
id
= cinp.identify();
138
139
int
size
= cinp.size();
140
for
(
int
i = 0; i <
size
; ++i) {
141
float
time=cinp.time(i);
142
double
ene=cinp.energy(i);
143
m_tolE
+= ene;
144
if
(time<49.99) {
145
m_tolE4
+= ene;
146
if
(time<24.99) {
147
m_tolE3
+= ene;
148
if
(time<9.99) {
149
m_tolE2
+= ene;
150
if
(time<4.99) {
151
m_tolE1
+= ene;
152
if
(time>0.01) {
153
m_tolE0
+= ene;
154
}
155
}
156
}
157
}
158
}
159
m_energy
[
m_nchan
] = cinp.energy(i);
160
m_time
[
m_nchan
] = cinp.time(i);
161
162
m_detector
[
m_nchan
] =
m_tileID
->section(
id
);
163
m_side
[
m_nchan
] =
m_tileID
->side(
id
);
164
m_sample
[
m_nchan
] =
m_tileID
->sample(
id
);
165
m_pmt
[
m_nchan
] =
m_tileID
->pmt(
id
);
166
m_eta
[
m_nchan
] =
m_tileID
->tower(
id
);
167
m_phi
[
m_nchan
] =
m_tileID
->module(
id
);
168
169
m_nchan
++;
170
if
(
m_nchan
>=
m_maxLength
)
171
break
;
172
}
173
174
if
(
msgLvl
(MSG::VERBOSE)) {
175
msg
(MSG::VERBOSE) <<
" iHit="
<< n_hit <<
" id="
176
<<
m_tileID
->to_string(
id
, -1) <<
" ener="
;
177
178
for
(
int
i = 0; i <
size
; ++i)
179
msg
(MSG::VERBOSE) << cinp.energy(i) <<
" "
;
180
181
msg
(MSG::VERBOSE) <<
"time="
;
182
for
(
int
i = 0; i <
size
; ++i)
183
msg
(MSG::VERBOSE) << cinp.time(i) <<
" "
;
184
185
msg
(MSG::VERBOSE) <<
endmsg
;
186
}
187
188
++n_hit;
189
if
(
m_nchan
>=
m_maxLength
) {
190
ATH_MSG_DEBUG
(
"Number of hits exceeds maximum ("
<<
m_maxLength
191
<<
"), ignore all the rest"
);
192
break
;
193
}
194
}
195
196
197
// step3: commit ntuple
198
if
(
m_commitNtuple
) {
199
ATH_MSG_DEBUG
(
"Committing Ntuple"
);
200
CHECK
(
ntupleSvc
()->writeRecord(
m_ntuplePtr
) );
201
}
202
203
// Execution completed.
204
ATH_MSG_DEBUG
(
"execute() completed successfully"
);
205
return
StatusCode::SUCCESS;
206
}
207
208
//****************************************************************************
209
//* Finalize
210
//****************************************************************************
211
212
StatusCode
TileHitVecToNtuple::finalize
()
213
{
214
ATH_MSG_INFO
(
"finalize() completed successfully"
);
215
return
StatusCode::SUCCESS;
216
}
endmsg
#define endmsg
Definition
AnalysisConfig_Ntuple.cxx:54
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
errorcheck.h
Helpers for checking error return status codes and reporting errors.
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition
Control/AthenaKernel/AthenaKernel/errorcheck.h:422
ntupleSvc
INTupleSvc * ntupleSvc()
Definition
ServiceAccessor.h:14
size
size_t size() const
Number of registered mappings.
TileHitVecToNtuple.h
TileHitVector.h
TileHitVector
AtlasHitsVector< TileHit > TileHitVector
Definition
TileHitVector.h:28
TileID.h
AthAlgorithm::AthAlgorithm
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
Definition
AthAlgorithm.cxx:10
AthCommonAlgorithm< Gaudi::Algorithm >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition
AthCommonDataStore.h:145
AthCommonAlgorithm< Gaudi::Algorithm >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
Definition
AthCommonDataStore.h:85
AthCommonAlgorithm< Gaudi::Algorithm >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
Definition
AthCommonDataStore.h:95
AthCommonAlgorithm< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition
AthCommonMsg.h:30
AthCommonAlgorithm< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition
AthCommonMsg.h:24
TileHitVecToNtuple::m_tolE4
NTuple::Item< double > m_tolE4
Definition
TileHitVecToNtuple.h:63
TileHitVecToNtuple::~TileHitVecToNtuple
virtual ~TileHitVecToNtuple()
Definition
TileHitVecToNtuple.cxx:50
TileHitVecToNtuple::m_energy
NTuple::Array< float > m_energy
Definition
TileHitVecToNtuple.h:65
TileHitVecToNtuple::m_phi
NTuple::Array< int > m_phi
Definition
TileHitVecToNtuple.h:73
TileHitVecToNtuple::m_tileID
const TileID * m_tileID
Definition
TileHitVecToNtuple.h:77
TileHitVecToNtuple::m_maxLength
int m_maxLength
Definition
TileHitVecToNtuple.h:55
TileHitVecToNtuple::m_ntupleID
std::string m_ntupleID
Definition
TileHitVecToNtuple.h:52
TileHitVecToNtuple::m_sample
NTuple::Array< int > m_sample
Definition
TileHitVecToNtuple.h:71
TileHitVecToNtuple::m_eta
NTuple::Array< int > m_eta
Definition
TileHitVecToNtuple.h:72
TileHitVecToNtuple::TileHitVecToNtuple
TileHitVecToNtuple(const std::string &name, ISvcLocator *pSvcLocator)
Definition
TileHitVecToNtuple.cxx:34
TileHitVecToNtuple::m_pmt
NTuple::Array< int > m_pmt
Definition
TileHitVecToNtuple.h:67
TileHitVecToNtuple::m_detector
NTuple::Array< int > m_detector
Definition
TileHitVecToNtuple.h:69
TileHitVecToNtuple::m_nchan
NTuple::Item< int > m_nchan
Definition
TileHitVecToNtuple.h:57
TileHitVecToNtuple::m_time
NTuple::Array< float > m_time
Definition
TileHitVecToNtuple.h:66
TileHitVecToNtuple::m_side
NTuple::Array< int > m_side
Definition
TileHitVecToNtuple.h:70
TileHitVecToNtuple::m_ntuplePtr
NTuple::Tuple * m_ntuplePtr
Definition
TileHitVecToNtuple.h:51
TileHitVecToNtuple::m_tolE2
NTuple::Item< double > m_tolE2
Definition
TileHitVecToNtuple.h:61
TileHitVecToNtuple::m_tolE1
NTuple::Item< double > m_tolE1
Definition
TileHitVecToNtuple.h:60
TileHitVecToNtuple::finalize
StatusCode finalize()
Definition
TileHitVecToNtuple.cxx:212
TileHitVecToNtuple::m_ntupleLoc
std::string m_ntupleLoc
Definition
TileHitVecToNtuple.h:53
TileHitVecToNtuple::m_hitVector
std::string m_hitVector
Definition
TileHitVecToNtuple.h:75
TileHitVecToNtuple::m_tolE3
NTuple::Item< double > m_tolE3
Definition
TileHitVecToNtuple.h:62
TileHitVecToNtuple::execute
StatusCode execute(const EventContext &ctx)
Execute method.
Definition
TileHitVecToNtuple.cxx:120
TileHitVecToNtuple::m_tolE
NTuple::Item< double > m_tolE
Definition
TileHitVecToNtuple.h:58
TileHitVecToNtuple::m_tolE0
NTuple::Item< double > m_tolE0
Definition
TileHitVecToNtuple.h:59
TileHitVecToNtuple::m_commitNtuple
bool m_commitNtuple
Definition
TileHitVecToNtuple.h:54
TileHitVecToNtuple::initialize
StatusCode initialize()
Definition
TileHitVecToNtuple.cxx:58
TileHit
Definition
TileSimEvent/TileSimEvent/TileHit.h:30
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0