ATLAS Offline Software
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
26 
27 // Calo include
28 #include "CaloIdentifier/TileID.h"
29 
30 //TileCalo include
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 
51 {
52 }
53 
54 //****************************************************************************
55 //* Initialization
56 //****************************************************************************
57 
59 {
60 
61  ATH_MSG_INFO( "Initialization started" );
62 
63  // retrieve TileID helper from det store
64 
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) {
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 
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 
163  m_side[m_nchan] = m_tileID->side(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 
213 {
214  ATH_MSG_INFO( "finalize() completed successfully" );
215  return StatusCode::SUCCESS;
216 }
TileHitVecToNtuple::m_energy
NTuple::Array< float > m_energy
Definition: TileHitVecToNtuple.h:65
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileHitVecToNtuple.h
TileHitVecToNtuple::m_sample
NTuple::Array< int > m_sample
Definition: TileHitVecToNtuple.h:71
TileHitVecToNtuple::m_tolE0
NTuple::Item< double > m_tolE0
Definition: TileHitVecToNtuple.h:59
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Tile_Base_ID::pmt
int pmt(const Identifier &id) const
Definition: Tile_Base_ID.cxx:180
TileHitVecToNtuple::m_ntupleID
std::string m_ntupleID
Definition: TileHitVecToNtuple.h:52
TileHitVecToNtuple::execute
StatusCode execute()
Definition: TileHitVecToNtuple.cxx:120
TileHitVecToNtuple::m_commitNtuple
bool m_commitNtuple
Definition: TileHitVecToNtuple.h:54
AtlasHitsVector
Definition: AtlasHitsVector.h:33
Tile_Base_ID::side
int side(const Identifier &id) const
Definition: Tile_Base_ID.cxx:153
Tile_Base_ID::sample
int sample(const Identifier &id) const
Definition: Tile_Base_ID.cxx:171
TileHitVecToNtuple::m_tolE1
NTuple::Item< double > m_tolE1
Definition: TileHitVecToNtuple.h:60
AthCommonMsg< Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TileHitVecToNtuple::m_maxLength
int m_maxLength
Definition: TileHitVecToNtuple.h:55
TileHitVecToNtuple::m_hitVector
std::string m_hitVector
Definition: TileHitVecToNtuple.h:75
TileHitVecToNtuple::m_ntuplePtr
NTuple::Tuple * m_ntuplePtr
Definition: TileHitVecToNtuple.h:51
Tile_Base_ID::tower
int tower(const Identifier &id) const
Definition: Tile_Base_ID.cxx:165
TileHitVecToNtuple::finalize
StatusCode finalize()
Definition: TileHitVecToNtuple.cxx:212
TileHitVecToNtuple::m_pmt
NTuple::Array< int > m_pmt
Definition: TileHitVecToNtuple.h:67
TileID.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TileHitVecToNtuple::m_tolE2
NTuple::Item< double > m_tolE2
Definition: TileHitVecToNtuple.h:61
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Tile_Base_ID::module
int module(const Identifier &id) const
Definition: Tile_Base_ID.cxx:159
TileHitVecToNtuple::m_phi
NTuple::Array< int > m_phi
Definition: TileHitVecToNtuple.h:73
lumiFormat.i
int i
Definition: lumiFormat.py:92
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileHitVecToNtuple::m_tileID
const TileID * m_tileID
Definition: TileHitVecToNtuple.h:77
TileHitVecToNtuple::m_side
NTuple::Array< int > m_side
Definition: TileHitVecToNtuple.h:70
TileHitVecToNtuple::m_time
NTuple::Array< float > m_time
Definition: TileHitVecToNtuple.h:66
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
TileHitVecToNtuple::m_eta
NTuple::Array< int > m_eta
Definition: TileHitVecToNtuple.h:72
AthAlgorithm
Definition: AthAlgorithm.h:47
TileHitVecToNtuple::TileHitVecToNtuple
TileHitVecToNtuple(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TileHitVecToNtuple.cxx:34
TileHitVecToNtuple::m_nchan
NTuple::Item< int > m_nchan
Definition: TileHitVecToNtuple.h:57
TileHitVecToNtuple::m_ntupleLoc
std::string m_ntupleLoc
Definition: TileHitVecToNtuple.h:53
TileHitVector.h
TileHitVecToNtuple::initialize
StatusCode initialize()
Definition: TileHitVecToNtuple.cxx:58
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TileHitVecToNtuple::m_tolE4
NTuple::Item< double > m_tolE4
Definition: TileHitVecToNtuple.h:63
errorcheck.h
Helpers for checking error return status codes and reporting errors.
TileHit
Definition: TileSimEvent/TileSimEvent/TileHit.h:30
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
Tile_Base_ID::to_string
std::string to_string(const Identifier &id, int level=0) const
Definition: Tile_Base_ID.cxx:52
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
Tile_Base_ID::section
int section(const Identifier &id) const
Definition: Tile_Base_ID.cxx:147
beamspotnt.nt
def nt
Definition: bin/beamspotnt.py:1063
TileHitVecToNtuple::m_tolE3
NTuple::Item< double > m_tolE3
Definition: TileHitVecToNtuple.h:62
ntupleSvc
INTupleSvc * ntupleSvc()
Definition: ServiceAccessor.h:14
TileHitVecToNtuple::m_detector
NTuple::Array< int > m_detector
Definition: TileHitVecToNtuple.h:69
TileHitVecToNtuple::~TileHitVecToNtuple
virtual ~TileHitVecToNtuple()
Definition: TileHitVecToNtuple.cxx:50
TileHitVecToNtuple::m_tolE
NTuple::Item< double > m_tolE
Definition: TileHitVecToNtuple.h:58