ATLAS Offline Software
Loading...
Searching...
No Matches
DumpLArDigits.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
9//#include "testpack/compdigit.h"
10#include <stdlib.h>
11
12#include <vector>
13
14DumpLArDigits::DumpLArDigits(const std::string& name, ISvcLocator* pSvcLocator)
15 : AthAlgorithm(name, pSvcLocator),
16 m_chan(0),
18 m_emId(0)
19{m_count=0;
20 declareProperty("LArDigitContainerName",m_key="");
21 declareProperty("OutputFileName",m_FileName="LArDigits.txt");
22}
23
27
29{
30 ATH_MSG_INFO ( "======== initialize DumpLArDigits ========" );
31 ATH_CHECK( detStore()->retrieve(m_onlineHelper, "LArOnlineID") );
32 ATH_MSG_DEBUG ( " Found the LArOnlineID helper. " );
33
34 const CaloCell_ID* idHelper = nullptr;
35 ATH_CHECK( detStore()->retrieve (idHelper, "CaloCell_ID") );
36 m_emId=idHelper->em_idHelper();
37 if (!m_emId) {
38 ATH_MSG_ERROR ( "Unable to get EM_ID" );
39 return StatusCode::FAILURE;
40 }
41
42 ATH_CHECK( m_cablingKey.initialize() );
43
44 m_outfile.open(m_FileName.c_str(),std::ios::out);
45
46 ATH_MSG_INFO ( "======== test-stuff initialize successfully ========" );
47 return StatusCode::SUCCESS;
48}
49
50
52{
53 m_count++;
54 ATH_MSG_INFO ( "======== executing event "<< m_count << " ========" );
55 const xAOD::EventInfo* thisEventInfo;
56 StatusCode sc=evtStore()->retrieve(thisEventInfo);
57 if (sc!=StatusCode::SUCCESS)
58 ATH_MSG_WARNING ( "No EventInfo object found!" );
59 else
60 {
61 std::cout << "*** Event #" << std::dec << thisEventInfo->runNumber() << "/" << thisEventInfo->eventNumber() << std::endl;
62 }
63
64 const LArDigitContainer* digit_cont;
65
66 if (m_key.size())
67 ATH_CHECK( evtStore()->retrieve(digit_cont,m_key) );
68 else
69 ATH_CHECK( evtStore()->retrieve(digit_cont) );
70 ATH_MSG_INFO ( "Retrieved LArDigitContainer from StoreGate! key=" << m_key );
72 const LArOnOffIdMapping* cabling{*cablingHdl};
73 if(!cabling){
74 ATH_MSG_ERROR("Do not have mapping object " << m_cablingKey.key() );
75 return StatusCode::FAILURE;
76 }
77 //int nColl=0;
78 short layer,eta,phi;
79 m_chan=0;
80 //int Nchan=0;
81 typedef std::vector< const LArDigit* > LArDigitVector;
82 //std::vector< const LArDigit* > digitVector;
83 LArDigitVector digitVector;
84 LArDigitContainer::const_iterator it = digit_cont->begin();
85 LArDigitContainer::const_iterator it_e = digit_cont->end();
86 //Nchan=0;
87 for(; it!=it_e; ++it){
88 m_chan++;
89 digitVector.push_back(*it);
90 }
91 //std::cout << "End of outer loop" <<std::endl;
92
93 m_outfile << "Event " << m_count << " contains " << m_chan << " digits\n";
94 std::cout << "Event " << m_count << " contains " << m_chan << " digits\n";
95
96 mySort aSort;
97 std::sort(digitVector.begin(),digitVector.end(),aSort);
98 for (const LArDigit* digit : digitVector)
99 {
100 //if (digit->energy()==0)
101 //continue;
102 const HWIdentifier chid=digit->channelID();//hardwareID();
103 const HWIdentifier febid=m_onlineHelper->feb_Id(chid);
104 std::cout << "FEB_ID: 0x" << std::hex << febid.get_identifier32().get_compact()
105 << " channel: " << std::dec << m_onlineHelper->channel(chid)
106 << " (" << m_onlineHelper->channelInSlotMax(febid) << "/FEB), ";
107 m_outfile << "FEB_ID: 0x" << std::hex << febid.get_compact()
108 << " channel: " << std::dec << m_onlineHelper->channel(chid)
109 << " (" << m_onlineHelper->channelInSlotMax(febid) << "/FEB), ";
110 if (!cabling->isOnlineConnected(chid))
111 {std::cout << "disconnected: \n";
112 m_outfile << "disconnected: \n";
113 continue;
114 }
115 const Identifier id=cabling->cnvToIdentifier(chid);
116 //std::cout << "Compact onlineid=" << id.get_compact() << std::endl;
117 eta=m_emId->eta(id);
118 phi=m_emId->phi(id);
119 layer=m_emId->sampling(id);
120 //std::cout << "LArDigit #" << chid.get_compact();
121 if(!m_emId->is_lar_em(id))
122 {std::cout << "Is not EM! \n" << std::endl;
123 m_outfile << "Is not EM! \n" << std::endl;
124 continue;
125 }
126 if (m_onlineHelper->isEmEndcapOnline(chid))
127 {std::cout << "Endcap ";
128 m_outfile << "Endcap ";
129 }
130 if (m_onlineHelper->isEmBarrelOnline(chid))
131 {std::cout << "Barrel ";
132 m_outfile << "Barrel ";
133 }
134 std::cout << " l/e/p= " << layer << "/" << eta << "/" << phi << ":";
135 for(unsigned int i=0;i<digit->samples().size();i++)
136 std::cout << " " << digit->samples()[i];
137 std::cout << " G=" << digit->gain() << std::endl;
138
139 m_outfile << "l/e/p= " << layer << "/" << eta << "/" << phi << ":";
140 for(unsigned int i=0;i<digit->samples().size();i++)
141 m_outfile << " " << digit->samples()[i];
142 m_outfile << " G=" << digit->gain() << std::endl;
143 }
144 //std::cout << "Collection #" << ++nColl << " contains " << chan_coll->size() << " elementes." << std::endl;
145 std::cout << "Event " << m_count << " contains " << m_chan << " (" <<digitVector.size() <<") channels\n";
146 return StatusCode::SUCCESS;
147}
148
150{
151 m_outfile.close();
152 ATH_MSG_INFO ( "======== finalize DumpLArDigit ========" );
153 return StatusCode::SUCCESS;
154}
155
157{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
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
bool operator()(const LArDigit *a, const LArDigit *b)
StatusCode finalize()
std::string m_FileName
StatusCode execute()
const LArEM_ID * m_emId
StatusCode initialize()
std::ofstream m_outfile
DumpLArDigits(const std::string &name, ISvcLocator *pSvcLocator)
const LArOnlineID * m_onlineHelper
std::string m_key
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
value_type get_compact() const
Get the compact id.
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 class for LArDigit.
Liquid Argon digit base class.
Definition LArDigit.h:25
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.