ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
TileCalorimeter
TileRec
src
TileHitToNtuple.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
//*****************************************************************************
6
// Filename : TileHitToNtuple.cxx
7
// Author : Gia
8
// Created : March, 2003
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
#include "
EventContainers/SelectAllObject.h
"
27
28
// Calo include
29
#include "
CaloIdentifier/TileID.h
"
30
31
//TileCalo include
32
#include "
TileEvent/TileHitContainer.h
"
33
#include "
TileRec/TileHitToNtuple.h
"
34
35
TileHitToNtuple::TileHitToNtuple
(
const
std::string& name, ISvcLocator* pSvcLocator)
36
:
AthAlgorithm
(name, pSvcLocator)
37
,
m_ntuplePtr
(0)
38
,
m_ntupleID
(
"h30"
)
39
,
m_ntupleLoc
(
"/FILE1/TileRec"
)
40
,
m_hitContainer
(
"TileHitCnt"
)
41
,
m_tileID
(0)
42
{
43
declareProperty
(
"TileHitContainer"
,
m_hitContainer
);
44
declareProperty
(
"NTupleLoc"
,
m_ntupleLoc
);
45
declareProperty
(
"NTupleID"
,
m_ntupleID
);
46
declareProperty
(
"CommitNtuple"
,
m_commitNtuple
=
true
);
47
declareProperty
(
"MaxLength"
,
m_maxLength
= 4999);
48
49
}
50
51
TileHitToNtuple::~TileHitToNtuple
()
52
{
53
}
54
55
//****************************************************************************
56
//* Initialization
57
//****************************************************************************
58
59
StatusCode
TileHitToNtuple::initialize
()
60
{
61
62
ATH_MSG_INFO
(
"Initialization started"
);
63
64
// retrieve TileID helper from det store
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
m_ntuplePtr
=
ntupleSvc
()->book(DirPtr.ptr(),
m_ntupleID
,
76
CLID_ColumnWiseTuple,
"TileHit-Ntuple"
);
77
if
(!
m_ntuplePtr
) {
78
79
std::string ntupleCompleteID=
m_ntupleLoc
+
"/"
+
m_ntupleID
;
80
81
NTuplePtr nt(
ntupleSvc
(),ntupleCompleteID);
82
if
(!nt) {
83
ATH_MSG_ERROR
(
"Failed to book or to retrieve ntuple "
84
<< ntupleCompleteID );
85
return
StatusCode::FAILURE;
86
}
else
{
87
ATH_MSG_INFO
(
"Reaccessing ntuple "
<< ntupleCompleteID );
88
m_ntuplePtr
= nt;
89
}
90
}
91
92
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/nhit"
,
m_nchan
,0,
m_maxLength
) );
93
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/totalE"
,
m_tolE
) );
94
95
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/energy"
,
m_nchan
,
m_energy
) );
96
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/time"
,
m_nchan
,
m_time
) );
97
98
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/detector"
,
m_nchan
,
m_detector
,0,3) );
99
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/side"
,
m_nchan
,
m_side
,-1,1) );
100
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/sample"
,
m_nchan
,
m_sample
,0,3) );
101
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/pmt"
,
m_nchan
,
m_pmt
,0,1) );
102
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/eta"
,
m_nchan
,
m_eta
,0,15) );
103
CHECK
(
m_ntuplePtr
->addItem(
"TileHit/phi"
,
m_nchan
,
m_phi
,0,63) );
104
105
ATH_MSG_INFO
(
"Initialization completed"
);
106
return
StatusCode::SUCCESS;
107
}
108
109
//****************************************************************************
110
//* Execution
111
//****************************************************************************
112
113
StatusCode
TileHitToNtuple::execute
(
const
EventContext&
/*ctx*/
)
114
{
115
116
// step1: read TileHits from TDS
117
const
TileHitContainer
* HitCnt =
nullptr
;
118
CHECK
(
evtStore
()->retrieve(HitCnt,
m_hitContainer
) );
119
120
// step2: put items in ntuple
121
SelectAllObject<TileHitContainer>
selHits(HitCnt);
122
SelectAllObject<TileHitContainer>::const_iterator it=selHits.
begin
();
123
SelectAllObject<TileHitContainer>::const_iterator end=selHits.
end
();
124
125
m_nchan
=0;
126
m_tolE
=0.0;
127
int
n_hit = 0;
128
for
(; it != end; ++it) {
129
130
const
TileHit
* cinp = (*it);
131
Identifier
id
=cinp->
identify
();
132
133
int
size
= cinp->
size
();
134
for
(
int
i=0;i<
size
;++i)
135
{
136
m_tolE
+=cinp->
energy
(i);
137
m_energy
[
m_nchan
]=cinp->
energy
(i);
138
m_time
[
m_nchan
]=cinp->
time
(i);
139
140
m_detector
[
m_nchan
]=
m_tileID
->section(
id
);
141
m_side
[
m_nchan
]=
m_tileID
->side(
id
);
142
m_sample
[
m_nchan
]=
m_tileID
->sample(
id
);
143
m_pmt
[
m_nchan
]=
m_tileID
->pmt(
id
);
144
m_eta
[
m_nchan
]=
m_tileID
->tower(
id
);
145
m_phi
[
m_nchan
]=
m_tileID
->module(
id
);
146
147
m_nchan
++;
148
if
(
m_nchan
>=
m_maxLength
)
break
;
149
}
150
151
if
(
msgLvl
(MSG::VERBOSE)) {
152
msg
(MSG::VERBOSE) <<
" iHit="
<< n_hit <<
" id="
153
<<
m_tileID
->to_string(
id
, -1) <<
" ener="
;
154
155
for
(
int
i = 0; i <
size
; ++i)
156
msg
(MSG::VERBOSE) << cinp->
energy
(i) <<
" "
;
157
158
msg
(MSG::VERBOSE) <<
"time="
;
159
for
(
int
i = 0; i <
size
; ++i)
160
msg
(MSG::VERBOSE) << cinp->
time
() <<
" "
;
161
162
msg
(MSG::VERBOSE) <<
endmsg
;
163
}
164
165
++n_hit;
166
if
(
m_nchan
>=
m_maxLength
) {
167
ATH_MSG_DEBUG
(
"Number of hits exceeds maximum ("
<<
m_maxLength
168
<<
"), ignore all the rest"
);
169
break
;
170
}
171
}
172
173
// step3: commit ntuple
174
if
(
m_commitNtuple
) {
175
ATH_MSG_DEBUG
(
"Committing Ntuple"
);
176
CHECK
(
ntupleSvc
()->writeRecord(
m_ntuplePtr
) );
177
}
178
179
// Execution completed.
180
ATH_MSG_DEBUG
(
"execute() completed successfully"
);
181
return
StatusCode::SUCCESS;
182
}
183
184
//****************************************************************************
185
//* Finalize
186
//****************************************************************************
187
188
StatusCode
TileHitToNtuple::finalize
()
189
{
190
ATH_MSG_INFO
(
"finalize() completed successfully"
);
191
return
StatusCode::SUCCESS;
192
}
193
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
SelectAllObject.h
SelectAllObject
SelectAllObjectMT< DCC, OBJECT > SelectAllObject
Definition
SelectAllObject.h:11
ntupleSvc
INTupleSvc * ntupleSvc()
Definition
ServiceAccessor.h:14
size
size_t size() const
Number of registered mappings.
TileHitContainer.h
TileHitToNtuple.h
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
SelectAllObjectMT::end
const_iterator end()
Definition
SelectAllObjectMT.h:131
SelectAllObjectMT::begin
const_iterator begin()
Definition
SelectAllObjectMT.h:115
TileHitContainer
Definition
TileHitContainer.h:13
TileHitToNtuple::m_detector
NTuple::Array< int > m_detector
Definition
TileHitToNtuple.h:63
TileHitToNtuple::m_energy
NTuple::Array< float > m_energy
Definition
TileHitToNtuple.h:59
TileHitToNtuple::m_sample
NTuple::Array< int > m_sample
Definition
TileHitToNtuple.h:65
TileHitToNtuple::m_tolE
NTuple::Item< double > m_tolE
Definition
TileHitToNtuple.h:57
TileHitToNtuple::m_maxLength
int m_maxLength
Definition
TileHitToNtuple.h:54
TileHitToNtuple::m_side
NTuple::Array< int > m_side
Definition
TileHitToNtuple.h:64
TileHitToNtuple::m_eta
NTuple::Array< int > m_eta
Definition
TileHitToNtuple.h:66
TileHitToNtuple::~TileHitToNtuple
virtual ~TileHitToNtuple()
Definition
TileHitToNtuple.cxx:51
TileHitToNtuple::finalize
StatusCode finalize()
Definition
TileHitToNtuple.cxx:188
TileHitToNtuple::m_commitNtuple
bool m_commitNtuple
Definition
TileHitToNtuple.h:53
TileHitToNtuple::m_hitContainer
std::string m_hitContainer
Definition
TileHitToNtuple.h:69
TileHitToNtuple::TileHitToNtuple
TileHitToNtuple(const std::string &name, ISvcLocator *pSvcLocator)
Definition
TileHitToNtuple.cxx:35
TileHitToNtuple::execute
StatusCode execute(const EventContext &ctx)
Execute method.
Definition
TileHitToNtuple.cxx:113
TileHitToNtuple::m_tileID
const TileID * m_tileID
Definition
TileHitToNtuple.h:71
TileHitToNtuple::m_phi
NTuple::Array< int > m_phi
Definition
TileHitToNtuple.h:67
TileHitToNtuple::m_ntupleID
std::string m_ntupleID
Definition
TileHitToNtuple.h:51
TileHitToNtuple::initialize
StatusCode initialize()
Definition
TileHitToNtuple.cxx:59
TileHitToNtuple::m_ntuplePtr
NTuple::Tuple * m_ntuplePtr
Definition
TileHitToNtuple.h:50
TileHitToNtuple::m_time
NTuple::Array< float > m_time
Definition
TileHitToNtuple.h:60
TileHitToNtuple::m_pmt
NTuple::Array< int > m_pmt
Definition
TileHitToNtuple.h:61
TileHitToNtuple::m_nchan
NTuple::Item< int > m_nchan
Definition
TileHitToNtuple.h:56
TileHitToNtuple::m_ntupleLoc
std::string m_ntupleLoc
Definition
TileHitToNtuple.h:52
TileHit
Definition
TileSimEvent/TileSimEvent/TileHit.h:30
TileHit::time
float time(int ind=0) const
Return time of ind-th sub-hit.
Definition
TileSimEvent/TileSimEvent/TileHit.h:97
TileHit::energy
float energy(int ind=0) const
Return energy of ind-th sub-hit.
Definition
TileSimEvent/TileSimEvent/TileHit.h:95
TileHit::identify
Identifier identify(void) const
Return logical ID of the pmt.
Definition
TileSimEvent/TileSimEvent/TileHit.h:81
TileHit::size
int size(void) const
Return length of energy/time vectors.
Definition
TileSimEvent/TileSimEvent/TileHit.h:99
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0