ATLAS Offline Software
Loading...
Searching...
No Matches
TileRawChannelToNtuple.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 : TileRawChannelToNtuple.cxx
7// Author : Zhifang
8// Created : Nov, 2002
9//
10// DESCRIPTION:
11// Implement the algorithm
12//
13// HISTORY:
14//
15// BUGS:
16//
17//*****************************************************************************
18
19//Gaudi Includes
21#include "GaudiKernel/INTupleSvc.h"
22#include "GaudiKernel/IDataProviderSvc.h"
23#include "GaudiKernel/SmartDataPtr.h"
24
25//Atlas include
29
30// Calo include
32
33//TileCalo include
37
38const int max_chan=12288;
39
40
41// Alg standard interface function
43{
44
45 ATH_MSG_INFO( "Initialization started" );
46
47 // retrieve TileID helper from det store
48
49 ATH_CHECK( detStore()->retrieve(m_tileID) );
50 ATH_CHECK( detStore()->retrieve(m_tileHWID) );
51
52 m_ntupleLoc="/NTUPLES" + m_ntupleLoc;
53
54 SmartDataPtr<NTuple::Directory> DirPtr(ntupleSvc(), m_ntupleLoc);
55 if(!DirPtr) DirPtr = ntupleSvc()->createDirectory(m_ntupleLoc);
56 if(!DirPtr) {
57 ATH_MSG_ERROR( "Invalid Ntuple Directory: " );
58 return StatusCode::FAILURE;
59 }
60 m_ntuplePtr=ntupleSvc()->book(DirPtr.ptr(), m_ntupleID,
61 CLID_ColumnWiseTuple, "TileRC-Ntuple");
62 if(!m_ntuplePtr) {
63
64 std::string ntupleCompleteID=m_ntupleLoc+"/"+m_ntupleID;
65
66 NTuplePtr nt(ntupleSvc(),ntupleCompleteID);
67 if (!nt) {
68 ATH_MSG_ERROR( "Failed to book or to retrieve ntuple "
69 << ntupleCompleteID );
70 return StatusCode::FAILURE;
71 } else {
72 ATH_MSG_INFO( "Reaccessing ntuple " << ntupleCompleteID );
73 m_ntuplePtr = nt;
74 }
75 }
76
77 ATH_CHECK( m_ntuplePtr->addItem("TileRC/nchan",m_nchan,0,max_chan) );
78 ATH_CHECK( m_ntuplePtr->addItem("TileRC/totalE",m_tolE) );
79
80 ATH_CHECK( m_ntuplePtr->addItem("TileRC/energy",m_nchan,m_energy) );
81 ATH_CHECK( m_ntuplePtr->addItem("TileRC/time",m_nchan,m_time) );
82 ATH_CHECK( m_ntuplePtr->addItem("TileRC/quality",m_nchan,m_quality) );
83
84 ATH_CHECK( m_ntuplePtr->addItem("TileRC/detector",m_nchan,m_detector,0,3) );
85 ATH_CHECK( m_ntuplePtr->addItem("TileRC/side",m_nchan,m_side,-1,1) );
86 ATH_CHECK( m_ntuplePtr->addItem("TileRC/sample",m_nchan,m_sample,-1,3) );
87 ATH_CHECK( m_ntuplePtr->addItem("TileRC/eta",m_nchan,m_eta,-1,15) );
88 ATH_CHECK( m_ntuplePtr->addItem("TileRC/phi",m_nchan,m_phi,0,63) );
89 ATH_CHECK( m_ntuplePtr->addItem("TileRC/pmt",m_nchan,m_pmt,-1,1) );
90 ATH_CHECK( m_ntuplePtr->addItem("TileRC/channel",m_nchan,m_channel,0,47) );
91 ATH_CHECK( m_ntuplePtr->addItem("TileRC/gain",m_nchan,m_gain,0,2) );
92
93 ATH_CHECK(m_cablingSvc.retrieve());
95
96 ATH_MSG_INFO( "Initialization completed" );
97 return StatusCode::SUCCESS;
98}
99
101{
102
103 // step1: read RCs from TDS
105 ATH_CHECK( rawChannelContainer.isValid() );
106
107 // step2: to fill items in ntuple
108 SelectAllObject<TileRawChannelContainer> selRCs(rawChannelContainer.cptr());
109 SelectAllObject<TileRawChannelContainer>::const_iterator it=selRCs.begin();
110 SelectAllObject<TileRawChannelContainer>::const_iterator end=selRCs.end();
111 m_nchan=0;
112 m_tolE=0.0;
113 for(; it != end; ++it) {
114 m_tolE+=(*it)->amplitude();
115 m_energy[m_nchan]=(*it)->amplitude();
116 m_time[m_nchan]=(*it)->time();
117 m_quality[m_nchan]=(*it)->quality();
118
119 HWIdentifier hwid=(*it)->adc_HWID();
120
121 Identifier id=(*it)->adc_ID();
122 if (id.is_valid() ) {
123
124 m_detector[m_nchan]=m_tileID->section(id);
125 m_side[m_nchan]=m_tileID->side(id);
126 m_sample[m_nchan]=m_tileID->sample(id);
127 m_eta[m_nchan]=m_tileID->tower(id);
128 m_phi[m_nchan]=m_tileID->module(id);
129 m_pmt[m_nchan]=m_tileID->pmt(id);
130 m_channel[m_nchan]=m_tileHWID->channel(hwid);
131 m_gain[m_nchan]=m_tileHWID->adc(hwid);
132
133 } else {
134
135 m_detector[m_nchan]=(m_tileHWID->ros(hwid)+1)/2;
136 m_side[m_nchan]=(m_tileHWID->ros(hwid)%2)*2-1;
137 m_sample[m_nchan]=-1;
138 m_eta[m_nchan]=-1;
139 m_phi[m_nchan]=m_tileHWID->drawer(hwid);
140 m_pmt[m_nchan]=-1;
141 m_channel[m_nchan]=m_tileHWID->channel(hwid);
142 m_gain[m_nchan]=m_tileHWID->adc(hwid);
143 }
144
145 m_nchan++;
146
147 if (m_nchan >= max_chan) break;
148 }
149
150 // step3: commit ntuple
151 ATH_CHECK( ntupleSvc()->writeRecord(m_ntuplePtr) );
152
153 // Execution completed.
154 ATH_MSG_DEBUG( "execute() completed successfully" );
155 return StatusCode::SUCCESS;
156}
157
159{
160 ATH_MSG_INFO( "finalize() successfully" );
161 return StatusCode::SUCCESS;
162}
163
#define ATH_CHECK
Evaluate an expression and check for errors.
#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.
SelectAllObjectMT< DCC, OBJECT > SelectAllObject
INTupleSvc * ntupleSvc()
Handle class for reading from StoreGate.
const int max_chan
const ServiceHandle< StoreGateSvc > & detStore() const
const_iterator end()
const_iterator begin()
NTuple::Array< int > m_side
StatusCode initialize() override
Gaudi::Property< std::string > m_ntupleID
NTuple::Array< float > m_time
SG::ReadHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
NTuple::Array< int > m_gain
ServiceHandle< TileCablingSvc > m_cablingSvc
Name of Tile cabling service.
Gaudi::Property< std::string > m_ntupleLoc
NTuple::Array< int > m_sample
NTuple::Item< double > m_tolE
NTuple::Array< int > m_detector
NTuple::Array< float > m_quality
NTuple::Array< int > m_channel
NTuple::Array< float > m_energy