ATLAS Offline Software
Loading...
Searching...
No Matches
TileTBHitToNtuple.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 : TileTBHitToNtuple.cxx
7// Author : Anna
8// Created : June, 2004
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
27
28
29//TileCalo include
34
35const int max_chan=99999;
36
37// Constructor & deconstructor
38TileTBHitToNtuple::TileTBHitToNtuple(const std::string& name, ISvcLocator* pSvcLocator)
39 : AthAlgorithm(name, pSvcLocator)
40 , m_ntuplePtr(0)
41 , m_ntupleID("h31")
42 , m_ntupleLoc("/FILE1/TileRec")
43 , m_hitContainer("TileTBHits") //name of hit vector for ancillary detectors
44 , m_tileTBID(0)
45{
46 declareProperty("TileHitContainer", m_hitContainer);
47 declareProperty("NTupleLoc", m_ntupleLoc);
48 declareProperty("NTupleID", m_ntupleID);
49}
50
54
55// Alg standard interface function
57{
58
59 ATH_MSG_INFO( "Initialization started" );
60
61 // retrieve TileTBID helper from det store
62
63 CHECK( detStore()->retrieve(m_tileTBID) );
64
65 m_ntupleLoc="/NTUPLES" + m_ntupleLoc;
66
67 SmartDataPtr<NTuple::Directory> DirPtr(ntupleSvc(), m_ntupleLoc);
68 if (!DirPtr) DirPtr = ntupleSvc()->createDirectory(m_ntupleLoc);
69 if(!DirPtr) {
70 ATH_MSG_ERROR( "Invalid Ntuple Directory: " );
71 return StatusCode::FAILURE;
72 }
73 m_ntuplePtr=ntupleSvc()->book(DirPtr.ptr(), m_ntupleID,
74 CLID_ColumnWiseTuple, "TileTBHit-Ntuple");
75 if(!m_ntuplePtr) {
76
77 std::string ntupleCompleteID=m_ntupleLoc+"/"+m_ntupleID;
78
79 NTuplePtr nt(ntupleSvc(),ntupleCompleteID);
80 if (!nt) {
81 ATH_MSG_ERROR( "Failed to book or to retrieve ntuple "
82 << ntupleCompleteID );
83 return StatusCode::FAILURE;
84 } else {
85 ATH_MSG_INFO( "Reaccessing ntuple " << ntupleCompleteID );
86 m_ntuplePtr = nt;
87 }
88 }
89
90 CHECK( m_ntuplePtr->addItem("TileTBHit/nchan",m_nchan,0,max_chan) );
91 CHECK( m_ntuplePtr->addItem("TileTBHit/energy",m_nchan,m_energy) );
92 CHECK( m_ntuplePtr->addItem("TileTBHit/time",m_nchan,m_time) );
93 CHECK( m_ntuplePtr->addItem("TileTBHit/type",m_nchan,m_type,-1,6) );
94 CHECK( m_ntuplePtr->addItem("TileTBHit/module", m_nchan, m_module,0,7) );
95 CHECK( m_ntuplePtr->addItem("TileTBHit/channel",m_nchan,m_channel,0,15) );
96 CHECK( m_ntuplePtr->addItem("TileTBHit/totalE",m_tolE) );
97
98 ATH_MSG_INFO( "Initialization completed" );
99 return StatusCode::SUCCESS;
100}
101
103{
104
105 // step1: read Hit for ancillary
106 const TileHitVector* HitCnt = nullptr;
107 CHECK( evtStore()->retrieve(HitCnt, m_hitContainer) );
108
109 m_nchan=0;
110 m_tolE=0.0;
111 for (const TileHit& cinp : *HitCnt) {
112 m_tolE+=cinp.energy();
113 m_energy[m_nchan]=cinp.energy();
114 m_time[m_nchan]=cinp.time();
115
116 Identifier id=cinp.identify();
117 m_type[m_nchan]=m_tileTBID->type(id);
118 m_channel[m_nchan]=m_tileTBID->channel(id);
119 m_module[m_nchan]=m_tileTBID->module(id);
120
121 m_nchan++;
122
123 if (m_nchan >= max_chan) break;
124 }
125
126 // step3: commit ntuple
127 CHECK( ntupleSvc()->writeRecord(m_ntuplePtr) );
128
129 // Execution completed.
130 ATH_MSG_DEBUG( "execute() completed successfully" );
131 return StatusCode::SUCCESS;
132}
133
135{
136 ATH_MSG_INFO( "finalize() successfully" );
137 return StatusCode::SUCCESS;
138}
139
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
INTupleSvc * ntupleSvc()
const int max_chan
AtlasHitsVector< TileHit > TileHitVector
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
NTuple::Array< int > m_channel
NTuple::Array< float > m_time
const TileTBID * m_tileTBID
NTuple::Item< int > m_nchan
NTuple::Tuple * m_ntuplePtr
std::string m_hitContainer
NTuple::Array< float > m_energy
NTuple::Array< int > m_type
NTuple::Array< int > m_module
NTuple::Item< double > m_tolE
TileTBHitToNtuple(const std::string &name, ISvcLocator *pSvcLocator)