ATLAS Offline Software
Loading...
Searching...
No Matches
DumpLArRawChannels.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
8//#include "testpack/compdigit.h"
9#include <stdlib.h>
10
11#include <vector>
12
13DumpLArRawChannels::DumpLArRawChannels(const std::string& name, ISvcLocator* pSvcLocator)
14 : AthAlgorithm(name, pSvcLocator),
15 m_chan(0),
17 m_emId(0),
18 m_thistSvc ("THistSvc", name)
19{m_count=0;
20 declareProperty("LArRawChannelContainerName",m_key="");
21 declareProperty("OutputFileName",m_FileName="LArRawChannels.txt");
22 declareProperty("NtupStream",m_ntup);
23 declareProperty("ToLog",m_toLog=true);
24}
25
29
31{
32 ATH_MSG_INFO ( "======== initialize DumpLArRawChanels ========" );
33
34 ATH_CHECK( detStore()->retrieve(m_onlineHelper, "LArOnlineID") );
35 ATH_MSG_DEBUG ( " Found the LArOnlineID helper. " );
36
37 const CaloCell_ID* idHelper = nullptr;
38 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_ID") );
39 m_emId=idHelper->em_idHelper();
40 if (!m_emId) {
41 ATH_MSG_ERROR ( "Unable to get EM_ID" );
42 return StatusCode::FAILURE;
43 }
44
45 ATH_CHECK( m_cablingKey.initialize() );
46
47 if (!m_FileName.empty()) {
48 m_outfile.open(m_FileName.c_str(),std::ios::out);
49 m_toFile=true;
50 }
51 else
52 m_toFile=false;
53
54 if (m_ntup.size()) {
55 m_tree= new TTree("RC","LArRawChannels");
56 const std::string ntupStream="/"+m_ntup+"/LArRawChanenls";
57 ATH_CHECK(m_thistSvc->regTree(ntupStream,m_tree));
58
59 m_tree->Branch("evt",&m_evt,"evt/I");
60 m_tree->Branch("e",&m_e,"e/F");
61 m_tree->Branch("t",&m_t,"t/F");
62 m_tree->Branch("Q",&m_Q,"q/F");
63 m_tree->Branch("gain",&m_gain,"gain/I");
64 m_tree->Branch("HWID",&m_id,"hwid/I");
65
66 }
67
68
69 ATH_MSG_INFO ( "======== test-stuff initialize successfully ========" );
70 return StatusCode::SUCCESS;
71}
72
73
75{
76 m_count++;
77 ATH_MSG_INFO ( "======== executing event "<< m_count << " ========" );
78 const xAOD::EventInfo* thisEventInfo = nullptr;
79 StatusCode sc=evtStore()->retrieve(thisEventInfo);
80 if (sc!=StatusCode::SUCCESS)
81 ATH_MSG_WARNING ( "No EventInfo object found!" );
82 else
83 {
84 if (m_toLog) std::cout << "*** Event #" << std::dec << thisEventInfo->runNumber() << "/" << thisEventInfo->eventNumber() << std::endl;
85 m_evt=thisEventInfo->eventNumber();
86 }
87
89 const LArOnOffIdMapping* cabling=*larCablingHdl;
90 if(!cabling) {
91 ATH_MSG_ERROR("Could not get LArOnOffIdMapping !!");
92 return StatusCode::FAILURE;
93 }
94
95 const LArRawChannelContainer* channel_cont = nullptr;
96 if (m_key.size())
97 ATH_CHECK( evtStore()->retrieve(channel_cont,m_key) );
98 else
99 ATH_CHECK( evtStore()->retrieve(channel_cont) );
100 ATH_MSG_INFO ( "Retrieved LArRawChannelContainer from StoreGate! key=" << m_key );
101 //int nColl=0;
102 short layer,eta,phi;
103 m_chan=0;
104 //int Nchan=0;
105 typedef std::vector< const LArRawChannel* > LArRawChannelVector;
106 //std::vector< const LArRawChannel* > channelVector;
107 LArRawChannelVector channelVector;
108 LArRawChannelContainer::const_iterator it_chan_coll = channel_cont->begin();
109 LArRawChannelContainer::const_iterator it_chan_coll_end = channel_cont->end();
110 //log <<MSG::DEBUG<<" number of LArRawChannel collections "<< channel_cont->size() <<endmsg;
111 for( ; it_chan_coll!=it_chan_coll_end;++it_chan_coll) {
112 m_chan++;
113 channelVector.push_back(&(*it_chan_coll));
114 }
115 if (m_toFile) m_outfile << "Event " << m_count << " contains " << m_chan << " channels\n";
116 if (m_toLog) std::cout << "Event " << m_count << " contains " << m_chan << " channels\n";
117
118 mySort aSort;
119 std::sort(channelVector.begin(),channelVector.end(),aSort);
120 for (const LArRawChannel* chan : channelVector)
121 {
122 //if (chan->energy()==0)
123 //continue;
124 const HWIdentifier chid=chan->channelID();//hardwareID();
125 if (m_toLog) std::cout << "Channel: " << m_onlineHelper->channel_name(chid);
126 if (m_toFile) m_outfile << "Channel: " << m_onlineHelper->channel_name(chid);
127
128 if (!cabling->isOnlineConnected(chid)) {
129 if (m_toLog) std::cout << " disconnected" << std::endl;
130 if (m_toFile) m_outfile << " disconnected" << std::endl;
131 continue;
132 }
133 const Identifier id=cabling->cnvToIdentifier(chid);
134
135 if(!m_emId->is_lar_em(id)) {
136 eta=m_emId->eta(id);
137 phi=m_emId->phi(id);
138 layer=m_emId->sampling(id);
139 if (m_emId->is_em_endcap(id)) {
140 if (m_toLog) std::cout << " Endcap l/e/p= " << layer << "/" << eta << "/" << phi << ":";
141 if (m_toFile) m_outfile << " Endcap l/e/p= " << layer << "/" << eta << "/" << phi << ":";
142 }
143 else {
144 if (m_toLog) std::cout << " Barrel l/e/p= " << layer << "/" << eta << "/" << phi << ":";
145 if (m_toFile) m_outfile << " Barrel l/e/p= " << layer << "/" << eta << "/" << phi << ":";
146 }
147 }
148 else {
149 if (m_toLog) std::cout << " (is not EM)";
150 if (m_toFile) m_outfile << " (is not EM)";
151 }
152
153
154 int Time=chan->time();
155 /*
156 if (Time>0x1fff)
157 Time=0x1fff;
158 if (Time<-0x1fff)
159 Time=-0x1fff;
160 */
161 //if (abs(Time)>24000)
162 //Time=0;
163 if (m_toLog) std::cout << " E= " << chan->energy() << " t= " << Time << " Q= " << chan->quality() << " P=0x"
164 << std::hex << chan->provenance() << std::dec << " G=" << chan->gain() << std::endl;
165
166 if (m_toFile) m_outfile << " E= " << chan->energy() << " t= " << Time << " Q= " << chan->quality() << " P=0x"
167 << std::hex << chan->provenance() << std::dec << " G=" << chan->gain() << std::endl;
168
169 if (m_tree) {
170 m_e=chan->energy();
171 m_t=chan->time();
172 m_Q=chan->quality();
173 m_gain=chan->gain();
175 m_tree->Fill();
176 }
177 }
178 //std::cout << "Collection #" << ++nColl << " contains " << chan_coll->size() << " elementes." << std::endl;
179 std::cout << "Event " << m_count << " contains " << m_chan << " (" <<channelVector.size() <<") channels\n";
180 return StatusCode::SUCCESS;
181}
182
184{
185 if (m_toFile) m_outfile.close();
186 ATH_MSG_INFO ( "======== finalize DumpLArRawChannel ========" );
187 return StatusCode::SUCCESS;
188}
189
191{return a->channelID() < b->channelID();}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t a
static Double_t sc
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
Helper class for offline cell identifiers.
Definition CaloCell_ID.h:34
const LArEM_ID * em_idHelper() const
access to EM idHelper
Definition CaloCell_ID.h:63
bool operator()(const LArRawChannel *a, const LArRawChannel *b)
const LArEM_ID * m_emId
ServiceHandle< ITHistSvc > m_thistSvc
DumpLArRawChannels(const std::string &name, ISvcLocator *pSvcLocator)
const LArOnlineID * m_onlineHelper
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
value_type get_compact() const
Get the compact id.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
Container for LArRawChannel (IDC using LArRawChannelCollection)
Liquid Argon ROD output object base class.
uint32_t runNumber() const
The current event's run number.
uint64_t eventNumber() const
The current event's event number.
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
EventInfo_v1 EventInfo
Definition of the latest event info version.