ATLAS Offline Software
LArRawCalibDataReadingAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #include "eformat/Version.h"
14 #include "eformat/index.h"
15 
20 
21 #include "LArFebHeaderReader.h"
22 
23 LArRawCalibDataReadingAlg::LArRawCalibDataReadingAlg(const std::string& name, ISvcLocator* pSvcLocator) :
24  AthReentrantAlgorithm(name, pSvcLocator) {}
25 
27 
28  if (m_DigitKey.key().size()>0) {
30  m_doDigits=true;
31  }
32  else {
33  m_doDigits=false;
34  }
35 
36  if (m_calibDigitKey.key().size()>0) {
38  m_doCalibDigits=true;
39  }
40  else {
41  m_doCalibDigits=false;
42  }
43 
44  if (m_accDigitKey.key().size()>0) {
46  m_doAccDigits=true;
47  }
48  else {
49  m_doAccDigits=false;
50  }
51 
52  if (m_accCalibDigitKey.key().size()>0) {
54  m_doAccCalibDigits=true;
55  }
56  else {
57  m_doAccCalibDigits=false;
58  }
59 
60  if (m_febHeaderKey.key().size()>0) {
62  m_doFebHeaders=true;
63  }
64  else {
65  m_doFebHeaders=false;
66  }
67 
69  ATH_MSG_FATAL("Needs ether Digits or CalibDigits or AccDigits or AccCalibDigit Key");
70  return StatusCode::FAILURE;
71  }
72 
74  ATH_MSG_FATAL("Could not have both CalibDigits, AccCalibDigits Key");
75  return StatusCode::FAILURE;
76  }
77 
79  ATH_MSG_FATAL("Could not have AccDigits with Calib Key");
80  return StatusCode::FAILURE;
81  }
82 
83  ATH_CHECK(m_robDataProviderSvc.retrieve());
84  ATH_CHECK(detStore()->retrieve(m_onlineId,"LArOnlineID"));
85 
87 
88 
89  //Fill FT list if only Barrel/EC and side is given:
90  if (m_vBEPreselection.size() && m_vPosNegPreselection.size() && m_vFTPreselection.size()==0) {
91  std::set<unsigned> fts;
92  if (std::find(m_vBEPreselection.begin(),m_vBEPreselection.end(),0)!=m_vBEPreselection.end()) { //Barrel selected
93  fts.insert({0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31});
94  }
95  if (std::find(m_vBEPreselection.begin(),m_vBEPreselection.end(),1)!=m_vBEPreselection.end()) { //Endcap selected
96  fts.insert({0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24});
97  }
98  m_vFTPreselection.value().insert(m_vFTPreselection.begin(),fts.begin(),fts.end());
99  }
100 
101  //Build list of preselected Feedthroughs
102  if (m_vBEPreselection.size() && m_vPosNegPreselection.size() && m_vFTPreselection.size()) {
103  ATH_MSG_INFO("Building list of selected feedthroughs");
104  for (const unsigned iBE : m_vBEPreselection) {
105  for (const unsigned iPN: m_vPosNegPreselection) {
106  for (const unsigned iFT: m_vFTPreselection) {
107  HWIdentifier finalFTId=m_onlineId->feedthrough_Id(iBE,iPN,iFT);
108  //unsigned int finalFTId32 = finalFTId.get_identifier32().get_compact();
109  ATH_MSG_INFO("Adding feedthrough Barrel/Endcap=" << iBE << " pos/neg=" << iPN << " FT=" << iFT
110  << " (0x" << std::hex << finalFTId.get_identifier32().get_compact() << std::dec << ")");
111  m_vFinalPreselection.insert(finalFTId);
112  }
113  }
114  }
115  }//end if something set
116 
117  if (!m_subCaloPreselection.value().empty()) {
118  ATH_MSG_INFO("Adding list of selected subcalo"<<m_subCaloPreselection.value());
119  std::set<HWIdentifier> subcaloFTs;
120  if (m_subCaloPreselection.value().compare("EM")==0) {
121  for (auto febid : m_onlineId->feb_range()) {
122  if (m_onlineId->isEMBchannel(febid) || m_onlineId->isEMECchannel(febid)) {
123  subcaloFTs.insert(m_onlineId->feedthrough_Id(febid));
124  }
125  }
126  }
127  else if (m_subCaloPreselection.value().find("HEC")!=std::string::npos || m_subCaloPreselection.value().find("FCAL")!=std::string::npos) {
128  if (m_subCaloPreselection.value().find("HEC")!=std::string::npos) {
129  for (auto febid : m_onlineId->feb_range()) {
130  if (m_onlineId->isHECchannel(febid)) {
131  subcaloFTs.insert(m_onlineId->feedthrough_Id(febid));
132  }
133  }
134  }
135  if (m_subCaloPreselection.value().find("FCAL")!=std::string::npos) {
136  for (auto febid : m_onlineId->feb_range()) {
137  if (m_onlineId->isFCALchannel(febid)) {
138  subcaloFTs.insert(m_onlineId->feedthrough_Id(febid));
139  }
140  }
141  }
142  } else {
143  ATH_MSG_ERROR("Configuration problem, property 'SubCaloPreselection' set to " << m_subCaloPreselection.value() << ", expect 'EM', 'HEC' or 'FCAL'");
144  return StatusCode::FAILURE;
145  }
146  std::cout << "set sizes:" << subcaloFTs.size() << ", " << m_vFinalPreselection.size() << std::endl;
147  if (m_vFinalPreselection.size()>0) {
148  //Form the intersection of the preselection give as subdet and side/FT/slot
149  for(auto it = m_vFinalPreselection.begin(); it != m_vFinalPreselection.end(); ) {
150  if (subcaloFTs.find(*it)==subcaloFTs.end())
151  it=m_vFinalPreselection.erase(it);
152  else
153  ++it;
154  }
155  if (m_vFinalPreselection.empty()) {
156  ATH_MSG_WARNING("Apparently inconistent configuration of FT preselections. No preselection left after intersecting 'SubCaloPreselection' with 'PosNeg/BE/FT' preselection");
157  }
158  }
159  else {
160  m_vFinalPreselection.swap(subcaloFTs);
161  }
162  }//end if subCaloPreselection set
163 
164  if (!m_vFinalPreselection.empty()) {
165  ATH_MSG_INFO("Give pre-selection covers " << m_vFinalPreselection.size() << " feedthroughts. Will ignore bytestream data from other feedthroughs.");
166  }
167 
168  return StatusCode::SUCCESS;
169 }
170 
171 StatusCode LArRawCalibDataReadingAlg::execute(const EventContext& ctx) const {
172  LArDigitContainer* digits=nullptr;
173  LArCalibDigitContainer* cdigits=nullptr;
174  LArAccumulatedDigitContainer* accdigits=nullptr;
175  LArAccumulatedCalibDigitContainer* caccdigits=nullptr;
176  LArFebHeaderContainer* febHeaders=nullptr;
177 
178  if (m_doDigits) {
180  ATH_CHECK(digitsHdl.record(std::make_unique<LArDigitContainer>()));
181  digits=digitsHdl.ptr();
182  digits->reserve(200000); //Enough space for the full calo
183  }
184 
185  if (m_doCalibDigits) {
187  ATH_CHECK(cdigitsHdl.record(std::make_unique<LArCalibDigitContainer>()));
188  cdigits=cdigitsHdl.ptr();
189  cdigits->reserve(200000); //Enough space for the full calo
190  }
191 
192  if (m_doAccDigits) {
194  ATH_CHECK(accdigitsHdl.record(std::make_unique<LArAccumulatedDigitContainer>()));
195  accdigits=accdigitsHdl.ptr();
196  accdigits->reserve(200000); //Enough space for the full calo
197  }
198 
199  if (m_doAccCalibDigits) {
201  ATH_CHECK(caccdigitsHdl.record(std::make_unique<LArAccumulatedCalibDigitContainer>()));
202  caccdigits=caccdigitsHdl.ptr();
203  caccdigits->reserve(200000); //Enough space for the full calo
204  }
205 
206  if (m_doFebHeaders) {
208  ATH_CHECK(febHeadersHdl.record(std::make_unique<LArFebHeaderContainer>()));
209  febHeaders=febHeadersHdl.ptr();
210  febHeaders->reserve(1524); //Total number of LAr Front End Boards
211  }
212 
213  //Get full events and filter out LAr ROBs
214  const RawEvent* fullEvent=m_robDataProviderSvc->getEvent(ctx);
215  std::map<eformat::SubDetectorGroup, std::vector<const uint32_t*> > rawEventTOC;
216  eformat::helper::build_toc(*fullEvent, rawEventTOC);
217  auto larRobs=rawEventTOC.find(eformat::LAR);
218  if (larRobs==rawEventTOC.end()) {
219  ATH_MSG_DEBUG("No LAr data found in this event.");
220  return StatusCode::SUCCESS;
221  }
222 
223 
224  std::unique_ptr<LArRodBlockStructure> rodBlock;
225  uint16_t rodMinorVersion=0x0;
226  uint32_t rodBlockType=0x0;
227 
228  const LArCalibLineMapping *calibMap=nullptr;
229  if (m_doAccCalibDigits) {
231  calibMap = *clHdl;
232  if(!calibMap) {
233  ATH_MSG_ERROR( "Do not have calib line mapping !!!" );
234  return StatusCode::FAILURE;
235  }
236  }
237 
238  for (const uint32_t* robPtr : larRobs->second) {
240  ATH_MSG_VERBOSE("Decoding ROB fragment 0x" << std::hex << rob.rob_source_id () << " with " << std::dec << rob.rod_fragment_size_word() << "ROB words");
241 
242  if (rob.rod_fragment_size_word() <3) {
243  ATH_MSG_ERROR("Encountered corrupt ROD fragment, less than 3 words!");
244  if (m_failOnCorruption) {
245  return StatusCode::FAILURE;
246  }else
247  continue; //Jump to next ROD block
248  }
249 
250  eformat::helper::Version ver(rob.rod_version());
251  //(re-)init rodBlock only once per event or if (very unlikly or even impossible) some FEBs have a differnt firmware
252  if (rodBlock==nullptr || rodMinorVersion !=ver.minor_version() || rodBlockType!=(rob.rod_detev_type()&0xff)) {
253  rodMinorVersion=ver.minor_version();
254  rodBlockType=rob.rod_detev_type()&0xff;
255  ATH_MSG_VERBOSE("Found version " << rodMinorVersion << " of Rod Block Type " << rodBlockType);
256  if (rodBlockType==10) { // Accumulated digits
257  rodBlock.reset(new LArRodBlockAccumulatedV3);
258  }//end of rodBlockType ==10
259  else if (rodBlockType==7 || rodBlockType==2) { // Calib. digits
260  if(rodMinorVersion>=6) { // Accumulated calib. digits
261  rodBlock.reset(new LArRodBlockCalibrationV3);
262  } else {
263  ATH_MSG_ERROR("Found unsupported ROD Block version " << rodMinorVersion
264  << " of ROD block type " << rodBlockType);
265  return m_failOnCorruption ? StatusCode::FAILURE : StatusCode::SUCCESS;
266  }
267  } else {
268  ATH_MSG_ERROR("Found unsupported Rod block type " << rodBlockType);
269  if (m_failOnCorruption)
270  return StatusCode::FAILURE;
271  else
272  continue; //Jump to next ROD block
273  }
274  }//End if need to re-init RodBlock
275 
276  const uint32_t* pData=rob.rod_data();
277  const uint32_t nData=rob.rod_ndata();
278  if (!rodBlock->setFragment(pData,nData)) {
279  ATH_MSG_ERROR("Failed to assign fragment pointer to LArRodBlockStructure");
280  return StatusCode::FAILURE;
281  }
282 
283  if(m_verifyChecksum) {
284  const uint32_t onsum = rodBlock->onlineCheckSum();
285  const uint32_t offsum = rodBlock->offlineCheckSum();
286  if(onsum!=offsum) {
287  ATH_MSG_ERROR("Checksum error:");
288  ATH_MSG_ERROR("online checksum = 0x" << MSG::hex << onsum);
289  ATH_MSG_ERROR("offline checksum = 0x" << MSG::hex << offsum << MSG::dec);
290  if (m_failOnCorruption)
291  return StatusCode::FAILURE;
292  else
293  continue; //Jump to the next ROD-block
294  }
295  }
296 
297  //Loop over FEBs in ROD:
298  do {
299  HWIdentifier fId(Identifier32(rodBlock->getFEBID()));
300  if (!m_onlineId->isValidId(fId)) {
301  ATH_MSG_ERROR("Invalid FEB identifer 0x" << std::hex << fId.get_identifier32().get_compact());
302  if (m_failOnCorruption)
303  return StatusCode::FAILURE;
304  else
305  continue;
306  }
307 
308  if (m_vFinalPreselection.size()) {
309  const auto ftId=m_onlineId->feedthrough_Id(fId);
310  if (m_vFinalPreselection.find(ftId)==m_vFinalPreselection.end()) {
311  ATH_MSG_DEBUG("Feedthrough with id 0x" << MSG::hex << ftId << MSG::dec <<" not in preselection. Ignored.");
312  continue;
313  }
314  }
315 
316 
317  const int NthisFebChannel=m_onlineId->channelInSlotMax(fId);
318 
319  //Decode LArDigits (if requested)
320  if (m_doDigits) {
321  uint32_t gain;
322  int fcNb;
323  std::vector<short> samples;
324  while (rodBlock->getNextRawData(fcNb,samples,gain)) {
325  if (fcNb>=NthisFebChannel)
326  continue;
327  if (samples.size()==0) continue; // Ignore missing cells
328  HWIdentifier cId = m_onlineId->channel_Id(fId,fcNb);
329  digits->emplace_back(new LArDigit(cId, (CaloGain::CaloGain)gain, std::move(samples)));
330  samples.clear();
331  }//end getNextRawData loop
332  }//end if m_doDigits
333 
334  //Decode LArCalibDigits (if requested)
335  if (m_doCalibDigits) {
336  uint32_t gain;
337  uint16_t dac;
338  uint16_t delay;
339  bool ispulsed;
340  int fcNb;
341  std::vector<short> samples;
342  while (rodBlock->getNextRawData(fcNb,samples,gain)) {
343  if (fcNb>=NthisFebChannel)
344  continue;
345  if (samples.size()==0) continue; // Ignore missing cells
346  dac = rodBlock->getDAC();
347  delay = rodBlock->getDelay();
348  ispulsed = rodBlock->getPulsed(fcNb);
349  HWIdentifier cId = m_onlineId->channel_Id(fId,fcNb);
350  cdigits->emplace_back(new LArCalibDigit(cId, (CaloGain::CaloGain)gain, std::move(samples), dac, delay, ispulsed));
351  samples.clear();
352  }//end getNextRawData loop
353  }//end if m_doCalibDigits
354 
355  //Decode LArAccumulatedDigits (if requested)
356  if (m_doAccDigits && rodBlockType==10) {
357  uint32_t gain;
358  int fcNb;
359  std::vector<uint64_t> samplesSum;
360  std::vector<uint64_t> samples2Sum;
361  uint32_t nTrigger;
362  while (rodBlock->getNextAccumulatedDigit(fcNb,samplesSum,samples2Sum,gain)) {
363  if (fcNb>=NthisFebChannel)
364  continue;
365  if (samplesSum.size()==0 || samples2Sum.size()==0) continue; // Ignore missing cells
366  nTrigger = rodBlock->getNTrigger();
367  HWIdentifier cId = m_onlineId->channel_Id(fId,fcNb);
368  accdigits->emplace_back(new LArAccumulatedDigit(cId, (CaloGain::CaloGain)gain, std::move(samplesSum), std::move(samples2Sum), nTrigger));
369  samplesSum.clear();
370  samples2Sum.clear();
371  }//end getNext loop
372  }//end if m_doAccDigits
373 
374  //Decode LArAccumulatedCalibDigits (if requested)
375  if (m_doAccCalibDigits) {
376  uint32_t gain;
377  uint32_t itmp;
378  uint16_t dac;
379  uint16_t delay;
380  uint16_t nstep;
381  uint16_t istep;
382  bool ispulsed=false;
383  uint16_t ispulsed_int;
384  unsigned bitShift;
385  int fcNb;
386  std::vector<uint64_t> samplesSum;
387  std::vector<uint64_t> samples2Sum;
388  uint32_t nTrigger;
389  while (rodBlock->getNextAccumulatedCalibDigit(fcNb,samplesSum,samples2Sum,itmp,gain)) {
390  if (fcNb>=NthisFebChannel)
391  continue;
392  if (samplesSum.size()==0 || samples2Sum.size()==0) continue; // Ignore missing cells
393  ispulsed_int=0;
394  bitShift=0;
395  dac = rodBlock->getDAC();
396  delay = rodBlock->getDelay();
397  nTrigger = rodBlock->getNTrigger();
398  nstep = rodBlock->getNStep();
399  istep = rodBlock->getStepIndex();
400  HWIdentifier cId = m_onlineId->channel_Id(fId,fcNb);
401  const std::vector<HWIdentifier>& calibChannelIDs = calibMap->calibSlotLine(cId);
402  for(std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs.begin(); csl_it!=calibChannelIDs.end();++csl_it){
403  uint32_t calibLine = m_onlineId->channel(*csl_it);
404  ispulsed=rodBlock->getPulsed(calibLine);
405  ispulsed_int=( ispulsed_int | ((uint16_t)ispulsed<<bitShift) );
406  bitShift++;
407  }
408  caccdigits->emplace_back(new LArAccumulatedCalibDigit(cId, (CaloGain::CaloGain)gain, std::move(samplesSum), std::move(samples2Sum), nTrigger, dac, delay, ispulsed_int, nstep, istep));
409  }//end getNext loop
410  caccdigits->setDelayScale(m_delayScale);
411  }//end if m_doAccDigits
412 
413  //Decode FebHeaders (if requested)
414  if (m_doFebHeaders) {
415  std::unique_ptr<LArFebHeader> larFebHeader(new LArFebHeader(fId));
416  LArFebHeaderReader::fillFebHeader(larFebHeader.get(),rodBlock.get(),rob);
417  febHeaders->push_back(std::move(larFebHeader));
418  }//end if m_doFebHeaders
419 
420  }while (rodBlock->nextFEB()); //Get NextFeb
421  } //end loop over ROBs
422  return StatusCode::SUCCESS;
423 }
DataVector::reserve
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArRawCalibDataReadingAlg::m_DigitKey
SG::WriteHandleKey< LArDigitContainer > m_DigitKey
Definition: LArRawCalibDataReadingAlg.h:39
LArRawCalibDataReadingAlg::m_delayScale
DoubleProperty m_delayScale
Definition: LArRawCalibDataReadingAlg.h:57
LArCalibDigitContainer.h
Identifier32
Definition: Identifier32.h:25
LArAccumulatedCalibDigit
Data class for calibration ADC samples preprocessed by the DSP.
Definition: LArAccumulatedCalibDigit.h:42
LArRawCalibDataReadingAlg::m_doAccDigits
bool m_doAccDigits
Definition: LArRawCalibDataReadingAlg.h:67
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
LArFebHeaderReader::fillFebHeader
void fillFebHeader(LArFebHeader *lfh, const LArRodBlockStructure *bl, const ROBFragment &robFrag)
Fill info for one FEB Header.
Definition: LArFebHeaderReader.cxx:10
LArRawCalibDataReadingAlg::m_vFinalPreselection
std::set< HWIdentifier > m_vFinalPreselection
Definition: LArRawCalibDataReadingAlg.h:59
LArAccumulatedCalibDigitContainer::setDelayScale
void setDelayScale(const double scale)
set the delay Scale
Definition: LArAccumulatedCalibDigitContainer.h:35
LArRodBlockStructure::getStepIndex
virtual uint16_t getStepIndex() const
Definition: LArRodBlockStructure.h:486
LArRawCalibDataReadingAlg::m_failOnCorruption
BooleanProperty m_failOnCorruption
Definition: LArRawCalibDataReadingAlg.h:50
DataVector::emplace_back
value_type emplace_back(value_type pElem)
Add an element to the end of the collection.
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArAccumulatedDigitContainer
Container class for LArAccumulatedDigit.
Definition: LArAccumulatedDigitContainer.h:22
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
LArRodBlockStructure::getNextAccumulatedDigit
virtual int getNextAccumulatedDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)
Definition: LArRodBlockStructure.cxx:100
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LArRawCalibDataReadingAlg::m_doFebHeaders
bool m_doFebHeaders
Definition: LArRawCalibDataReadingAlg.h:69
LArAccumulatedDigitContainer.h
LArCalibLineMapping::calibSlotLine
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
Definition: LArCalibLineMapping.cxx:15
LArRawCalibDataReadingAlg::m_doCalibDigits
bool m_doCalibDigits
Definition: LArRawCalibDataReadingAlg.h:66
LArCalibLineMapping
Definition: LArCalibLineMapping.h:17
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
LArRodBlockStructure::getNTrigger
virtual uint16_t getNTrigger() const
Definition: LArRodBlockStructure.h:480
RawEvent
OFFLINE_FRAGMENTS_NAMESPACE::FullEventFragment RawEvent
data type for reading raw event
Definition: RawEvent.h:37
skel.it
it
Definition: skel.GENtoEVGEN.py:423
LArRodBlockStructure::getNStep
virtual uint16_t getNStep() const
Definition: LArRodBlockStructure.h:491
LArRawCalibDataReadingAlg::m_robDataProviderSvc
ServiceHandle< IROBDataProviderSvc > m_robDataProviderSvc
Definition: LArRawCalibDataReadingAlg.h:46
LArRawCalibDataReadingAlg::m_verifyChecksum
BooleanProperty m_verifyChecksum
Definition: LArRawCalibDataReadingAlg.h:49
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
HWIdentifier
Definition: HWIdentifier.h:13
LArRawCalibDataReadingAlg::m_accDigitKey
SG::WriteHandleKey< LArAccumulatedDigitContainer > m_accDigitKey
Definition: LArRawCalibDataReadingAlg.h:41
LArRodBlockStructure::offlineCheckSum
virtual uint32_t offlineCheckSum() const
Definition: LArRodBlockStructure.cxx:163
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
LArOnlineID_Base::isFCALchannel
bool isFCALchannel(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1657
Pythia8_A14_NNPDF23LO_Var1Down_Common.ver
ver
Definition: Pythia8_A14_NNPDF23LO_Var1Down_Common.py:26
LArCalibDigitContainer
Container class for LArCalibDigit.
Definition: LArCalibDigitContainer.h:19
LArOnlineID_Base::channel
int channel(const HWIdentifier id) const
Return the channel number of a hardware cell identifier channel = [0,127] in all FEB.
Definition: LArOnlineID_Base.cxx:1967
LArAccumulatedDigit
Data class for ADC samples and autocorr preprocessed by the DSP.
Definition: LArAccumulatedDigit.h:32
LArRawCalibDataReadingAlg::m_subCaloPreselection
Gaudi::Property< std::string > m_subCaloPreselection
Definition: LArRawCalibDataReadingAlg.h:52
LArOnlineID::isEMECchannel
bool isEMECchannel(const HWIdentifier id) const override final
Definition: LArOnlineID.cxx:774
LArOnlineID_Base::feb_range
id_range feb_range() const
Definition: LArOnlineID_Base.cxx:1920
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Identifier32::get_compact
value_type get_compact(void) const
Get the compact id.
Definition: Identifier32.h:171
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
LArDigit
Liquid Argon digit base class.
Definition: LArDigit.h:25
LArRodBlockAccumulatedV3.h
eformat::ROBFragment
Definition: L1CaloBsDecoderUtil.h:12
LArRawCalibDataReadingAlg::m_vPosNegPreselection
Gaudi::Property< std::vector< unsigned > > m_vPosNegPreselection
Definition: LArRawCalibDataReadingAlg.h:55
LArOnlineID_Base::channelInSlotMax
int channelInSlotMax(const HWIdentifier Id) const
Return the Maximum channel number of a given feb slot.
Definition: LArOnlineID_Base.cxx:286
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::WriteHandle::ptr
pointer_type ptr()
Dereference the pointer.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
01SubmitToGrid.samples
samples
Definition: 01SubmitToGrid.py:58
LArRawCalibDataReadingAlg.h
LArOnlineID_Base::channel_Id
HWIdentifier channel_Id(int barrel_ec, int pos_neg, int feedthrough, int slot, int channel) const
create channel identifier from fields
Definition: LArOnlineID_Base.cxx:1569
LArAccumulatedCalibDigitContainer.h
LArRodBlockAccumulatedV3
This class provides decoding/encoding from/to ROD format.
Definition: LArRodBlockAccumulatedV3.h:24
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArRodBlockStructure::getFEBID
uint32_t getFEBID() const
Definition: LArRodBlockStructure.h:297
delay
double delay(std::size_t d)
Definition: JetTrigTimerTest.cxx:14
LArRawCalibDataReadingAlg::execute
StatusCode execute(const EventContext &ctx) const override
Definition: LArRawCalibDataReadingAlg.cxx:171
LArRawCalibDataReadingAlg::m_calibDigitKey
SG::WriteHandleKey< LArCalibDigitContainer > m_calibDigitKey
Definition: LArRawCalibDataReadingAlg.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
LArRawCalibDataReadingAlg::initialize
StatusCode initialize() override
Definition: LArRawCalibDataReadingAlg.cxx:26
LArFebHeader
Holds information from the FEB Header.
Definition: LArFebHeader.h:21
LArOnlineID_Base::isValidId
bool isValidId(const HWIdentifier id) const
Returns false if the identifier is not a LAr-online id or any of the sub-fields is out of range.
Definition: LArOnlineID_Base.cxx:1333
LArRawCalibDataReadingAlg::m_doAccCalibDigits
bool m_doAccCalibDigits
Definition: LArRawCalibDataReadingAlg.h:68
LArRodBlockCalibrationV3
This class provides decoding/encoding from/to ROD format.
Definition: LArRodBlockCalibrationV3.h:24
integrator_ascii2db.dac
dac
Definition: integrator_ascii2db.py:126
LArRodBlockStructure::nextFEB
bool nextFEB()
Definition: LArRodBlockStructure.h:497
LArFebHeaderContainer.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
LArCalibDigit
Base class for LArDigits taken during calibration runs.
Definition: LArCalibDigit.h:29
LArRodBlockTransparentV0.h
LArRawCalibDataReadingAlg::m_vBEPreselection
Gaudi::Property< std::vector< unsigned > > m_vBEPreselection
Definition: LArRawCalibDataReadingAlg.h:54
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
LArDigitContainer.h
LArOnlineID_Base::isEMBchannel
bool isEMBchannel(const HWIdentifier id) const
Definition: LArOnlineID_Base.cxx:1652
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
LArRawCalibDataReadingAlg::m_accCalibDigitKey
SG::WriteHandleKey< LArAccumulatedCalibDigitContainer > m_accCalibDigitKey
Definition: LArRawCalibDataReadingAlg.h:42
LArRodBlockStructure.h
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
LArRawCalibDataReadingAlg::m_onlineId
const LArOnlineID * m_onlineId
Definition: LArRawCalibDataReadingAlg.h:62
LArRawCalibDataReadingAlg::m_febHeaderKey
SG::WriteHandleKey< LArFebHeaderContainer > m_febHeaderKey
Definition: LArRawCalibDataReadingAlg.h:43
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
LArFebHeaderReader.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArRodBlockStructure::getNextRawData
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
Definition: LArRodBlockStructure.cxx:88
LArRodBlockStructure::setFragment
bool setFragment(const uint32_t *p, uint32_t n)
Definition: LArRodBlockStructure.h:252
LArRodBlockStructure::getDelay
virtual uint16_t getDelay() const
Definition: LArRodBlockStructure.h:474
LArRawCalibDataReadingAlg::m_CLKey
SG::ReadCondHandleKey< LArCalibLineMapping > m_CLKey
Definition: LArRawCalibDataReadingAlg.h:36
LArDigitContainer
Container class for LArDigit.
Definition: LArDigitContainer.h:24
LArRodBlockStructure::getDAC
virtual uint16_t getDAC() const
Definition: LArRodBlockStructure.h:468
LArRodBlockStructure::getNextAccumulatedCalibDigit
virtual int getNextAccumulatedCalibDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &Samples2Sum, uint32_t &nStepTriggers, uint32_t &gain)
Definition: LArRodBlockStructure.cxx:94
LArFebHeaderContainer
Container class for LArFebHeader.
Definition: LArFebHeaderContainer.h:20
LArRodBlockStructure::onlineCheckSum
virtual uint32_t onlineCheckSum() const
Definition: LArRodBlockStructure.cxx:155
LArRodBlockStructure::getPulsed
virtual bool getPulsed(unsigned channelNumber) const
Definition: LArRodBlockStructure.h:462
LArOnlineID::isHECchannel
bool isHECchannel(const HWIdentifier id) const override final
Definition: LArOnlineID.cxx:734
Identifier::get_identifier32
Identifier32 get_identifier32(void) const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArAccumulatedCalibDigitContainer
Container class for LArAccumulatedCalibDigit.
Definition: LArAccumulatedCalibDigitContainer.h:25
LAR
@ LAR
Definition: RegSelEnums.h:27
IROBDataProviderSvc.h
LArOnlineID_Base::feedthrough_Id
HWIdentifier feedthrough_Id(int barrel_ec, int pos_neg, int feedthrough) const
Create a feedthrough identifier from fields.
Definition: LArOnlineID_Base.cxx:1404
LArOnlineID.h
LArRawCalibDataReadingAlg::m_doDigits
bool m_doDigits
Definition: LArRawCalibDataReadingAlg.h:65
LArRodBlockCalibrationV3.h
LArRawCalibDataReadingAlg::m_vFTPreselection
Gaudi::Property< std::vector< unsigned > > m_vFTPreselection
Definition: LArRawCalibDataReadingAlg.h:56
LArRawCalibDataReadingAlg::LArRawCalibDataReadingAlg
LArRawCalibDataReadingAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: LArRawCalibDataReadingAlg.cxx:23