ATLAS Offline Software
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 
13 DumpLArRawChannels::DumpLArRawChannels(const std::string& name, ISvcLocator* pSvcLocator)
14  : AthAlgorithm(name, pSvcLocator),
15  m_chan(0),
16  m_onlineHelper(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 
27 {//empty
28 }
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 
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();}
DumpLArRawChannels.h
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArEM_Base_ID::phi
int phi(const Identifier id) const
return phi according to :
DumpLArRawChannels::m_thistSvc
ServiceHandle< ITHistSvc > m_thistSvc
Definition: DumpLArRawChannels.h:51
DumpLArRawChannels::m_toLog
bool m_toLog
Definition: DumpLArRawChannels.h:48
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
DumpLArRawChannels::m_key
std::string m_key
Definition: DumpLArRawChannels.h:39
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
CaloCell_ID::em_idHelper
const LArEM_ID * em_idHelper() const
access to EM idHelper
Definition: CaloCell_ID.h:63
DumpLArRawChannels::m_ntup
std::string m_ntup
Definition: DumpLArRawChannels.h:42
DumpLArRawChannels::DumpLArRawChannels
DumpLArRawChannels(const std::string &name, ISvcLocator *pSvcLocator)
Definition: DumpLArRawChannels.cxx:13
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:83
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DumpLArRawChannels::m_emId
const LArEM_ID * m_emId
Definition: DumpLArRawChannels.h:37
ReadCellNoiseFromCool.cabling
cabling
Definition: ReadCellNoiseFromCool.py:154
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArEM_Base_ID::sampling
int sampling(const Identifier id) const
return sampling according to :
DumpLArRawChannels::execute
StatusCode execute()
Definition: DumpLArRawChannels.cxx:74
DumpLArRawChannels::~DumpLArRawChannels
~DumpLArRawChannels()
Definition: DumpLArRawChannels.cxx:26
HWIdentifier
Definition: HWIdentifier.h:13
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition: Identifier32.h:44
xAOD::EventInfo_v1::runNumber
uint32_t runNumber() const
The current event's run number.
LArEM_Base_ID::eta
int eta(const Identifier id) const
return eta according to :
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
CaloCell_ID.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
DumpLArRawChannels::m_t
float m_t
Definition: DumpLArRawChannels.h:45
AthExHiveOpts.Time
Time
Definition: AthExHiveOpts.py:63
DumpLArRawChannels::m_evt
int m_evt
Definition: DumpLArRawChannels.h:44
DumpLArRawChannels::m_cablingKey
SG::ReadCondHandleKey< LArOnOffIdMapping > m_cablingKey
Definition: DumpLArRawChannels.h:33
DumpLArRawChannels::m_gain
unsigned m_gain
Definition: DumpLArRawChannels.h:46
DumpLArRawChannels::m_count
int m_count
Definition: DumpLArRawChannels.h:34
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
DumpLArRawChannels::initialize
StatusCode initialize()
Definition: DumpLArRawChannels.cxx:30
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
LArRawChannel
Liquid Argon ROD output object base class.
Definition: LArRawChannel.h:40
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
DumpLArRawChannels::mySort
Definition: DumpLArRawChannels.h:53
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
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
DumpLArRawChannels::m_tree
TTree * m_tree
Definition: DumpLArRawChannels.h:43
CaloCell_ID
Helper class for offline cell identifiers.
Definition: CaloCell_ID.h:34
DumpLArRawChannels::m_onlineHelper
const LArOnlineID * m_onlineHelper
Definition: DumpLArRawChannels.h:36
AthAlgorithm
Definition: AthAlgorithm.h:47
DumpLArRawChannels::m_Q
float m_Q
Definition: DumpLArRawChannels.h:45
DumpLArRawChannels::m_e
float m_e
Definition: DumpLArRawChannels.h:45
DumpLArRawChannels::mySort::operator()
bool operator()(const LArRawChannel *a, const LArRawChannel *b)
Definition: DumpLArRawChannels.cxx:190
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
DumpLArRawChannels::m_FileName
std::string m_FileName
Definition: DumpLArRawChannels.h:39
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
DumpLArRawChannels::m_toFile
bool m_toFile
Definition: DumpLArRawChannels.h:49
DumpLArRawChannels::finalize
StatusCode finalize()
Definition: DumpLArRawChannels.cxx:183
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
a
TList * a
Definition: liststreamerinfos.cxx:10
DumpLArRawChannels::m_outfile
std::ofstream m_outfile
Definition: DumpLArRawChannels.h:38
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DumpLArRawChannels::m_id
unsigned m_id
Definition: DumpLArRawChannels.h:47
LArOnlineID_Base::channel_name
std::string channel_name(const HWIdentifier id) const
Return a string corresponding to a feedthrough name given an identifier.
Definition: LArOnlineID_Base.cxx:219
AtlasDetectorID::is_lar_em
bool is_lar_em(Identifier id) const
Definition: AtlasDetectorID.h:818
DumpLArRawChannels::m_chan
int m_chan
Definition: DumpLArRawChannels.h:34
LArEM_Base_ID::is_em_endcap
bool is_em_endcap(const Identifier id) const
test if the id belongs to the EM Endcap
LArRawChannelContainer
Container for LArRawChannel (IDC using LArRawChannelCollection)
Definition: LArRawChannelContainer.h:26
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
Identifier
Definition: IdentifierFieldParser.cxx:14