ATLAS Offline Software
LArRodDecoder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Implementation of LArRodDecoder class
7 #include "GaudiKernel/TypeNameString.h"
8 #include "GaudiKernel/MsgStream.h"
9 #include "GaudiKernel/Bootstrap.h"
10 #include "GaudiKernel/ISvcLocator.h"
11 #include "GaudiKernel/IToolSvc.h"
12 
14 //#include "LArByteStream/LArRodBlockStructure_0.h"
17 // IWS 14.07.2005
19 // IWS 25.04.2006
30 #include <algorithm>
31 #include <fstream>
32 
36 
37 static const InterfaceID IID_ILArRodDecoder
38  ("LArRodDecoder", 1, 0);
39 
40 LArRodDecoder::LArRodDecoder ( const std::string& type, const std::string& name,const IInterface* parent )
42  m_LArCellEthreshold(-100.),
43  m_readtdc(false),
44  m_onlineHelper(0)
45  {
46  declareInterface< LArRodDecoder >( this );
47  declareProperty("IgnoreCheckFEBs",m_IgnoreCheckFEBs);
48  declareProperty("CellCorrections",m_LArCellCorrNames );
49  declareProperty("LArCellEthreshold",m_LArCellEthreshold );
50  declareProperty("ReadTDC",m_readtdc);
51  declareProperty("DelayScale",m_delayScale=(25./240.)*CLHEP::ns);
52  declareProperty("FebExchange", m_febExchange=0); //FIXME: Very ugly hack! See explanation in .h file
53  declareProperty("FebId1", m_febId1=0);
54  declareProperty("FebId2", m_febId2=0);
55  declareProperty("FirstSample", m_firstSample=0); //FIXME: Very ugly hack! See explanation in .h file
56 
57  declareProperty("BEPreselection",m_vBEPreselection,"For channel-selection: Barrel=0, Endcap=1");
58  declareProperty("PosNegPreselection",m_vPosNegPreselection,"For channel-selection: C-Side:0, A-Side: 1");
59  declareProperty("FTNumPreselection",m_vFTPreselection,"For channel-selection: Feedthrough numbers (e.g. 0 - 31 for barrel)");
60  declareProperty("MultiDSPMode", m_MultiDSPMode=false);
61  declareProperty("CheckSum", m_CheckSum=false);
62  declareProperty("StatusMask", m_StatusMask=0x00000212);
63  declareProperty("RequiredPhysicsNSamples", m_requiredPhysicsNSamples = 0);
64 }
65 
66 // destructor
68 {
69 }
70 
71 const InterfaceID& LArRodDecoder::interfaceID( )
72 { return IID_ILArRodDecoder; }
73 
76 {
77  // Before anything, access message service
78  m_StatusNMask = !m_StatusMask;
79 
80 
81  StatusCode sc = detStore()->retrieve(m_onlineHelper, "LArOnlineID");
82  if (sc.isFailure()) {
83  msg(MSG::ERROR) << "Could not get LArOnlineID helper !" << endmsg;
84  return sc;
85  }
86 
87  ATH_CHECK( m_evt.initialize() );
88 
89  std::vector<std::string>::const_iterator it = m_LArCellCorrNames.begin();
90  std::vector<std::string>::const_iterator it_end = m_LArCellCorrNames.end();
91  for(; it!=it_end;++it)
92  {IAlgTool* tool;
93  CaloCellCorrection* corr;
94  Gaudi::Utils::TypeNameString li(*it);
95  if((toolSvc()->retrieveTool(li.type(), li.name(), tool)).isFailure() )
96  {msg(MSG::ERROR) << " Can't get AlgTool for CaloCellCorrection " << endmsg;
97  return StatusCode::FAILURE;
98  }
99 
100  corr = dynamic_cast<CaloCellCorrection*> (tool);
101  if(!corr )
102  {msg(MSG::ERROR) << " Can't d-cast to CaloCellCorrection* " << endmsg;
103  return StatusCode::FAILURE;
104  }
105  m_LArCellCorrTools.push_back(corr);
106  }
107 
108  //Build list of preselected Feedthroughs
109  if (m_vBEPreselection.size() && m_vPosNegPreselection.size() && m_vFTPreselection.size()) {
110  ATH_MSG_INFO("Building list of selected feedthroughs");
111  for (const unsigned BE : m_vBEPreselection) {
112  for (const unsigned PN : m_vPosNegPreselection) {
113  for (const unsigned FT : m_vFTPreselection) {
114  HWIdentifier finalFTId=m_onlineHelper->feedthrough_Id(BE,PN,FT);
115  unsigned int finalFTId32 = finalFTId.get_identifier32().get_compact();
116  ATH_MSG_INFO("Adding feedthrough Barrel/Endcap=" << BE << " pos/neg=" << PN << " FT=" << FT
117  << " (0x" << std::hex << finalFTId32 << std::dec << ")");
118  m_vFinalPreselection.push_back(finalFTId32);
119  }
120  }
121  }
122  std::sort(m_vFinalPreselection.begin(),m_vFinalPreselection.end());
123  }//end if something set
124  else {
125  if (m_vBEPreselection.size() || m_vPosNegPreselection.size() || m_vFTPreselection.size()) {
126  msg(MSG::ERROR) << "Feedthrough preselection: jobOption inconsistency! "<< endmsg;
127  msg(MSG::ERROR) << "Need to set all three jobOptions BEPreselection PNPreselecton and FTPreselection" << endmsg;
128  return StatusCode::FAILURE;
129  }
130  ATH_MSG_DEBUG("No feedthrough preselection by jobOptions.");
131  }
132  return sc;
133 }
134 
135 
136 
138  const uint32_t* p, uint32_t n, LArDigitContainer& coll, CaloGain::CaloGain RequestedGain) const
139 { // Digit pointer
140  LArDigit * dg=0 ;
141  CaloGain::CaloGain calogain;
142  uint32_t gain;
143  int fcNb;
144  std::vector<short> samples;
145  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
146  if (!BlStruct) return;
147 
148  do {
149  HWIdentifier fId( Identifier32(BlStruct->getFEBID()) );
150  unsigned int fId32 = fId.get_identifier32().get_compact();
151  if (!m_onlineHelper->isValidId(fId)) {
152  msg(MSG::WARNING) << "Invalid FEB identifer 0x" << std::hex << fId32 << std::dec << ". Skipping" << endmsg;
153  continue;
154  }
155  // std::cout << "digit FEBID=" << std::hex<< " " <<fId32 << std::dec<<std::endl;
156  if(m_febExchange) {
157  if (fId32 == m_febId1) {
159  fId32 = fId.get_identifier32().get_compact();
160  }
161  else if(fId32 == m_febId2) {
163  fId32 = fId.get_identifier32().get_compact();
164  }
165  }
166 
167  // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
168  if (!BlStruct->hasRawDataBlock())
169  {
170  ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID 0x"<< std::hex << BlStruct->getFEBID() << std::dec);
171  continue;
172  }
173 
174  // RL 04.17.2008 skip check for some FEBs
175  int do_check=1;
176  std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
177  std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
178  for(; it_feb!=it_feb_end;++it_feb)
179  if(fId==*it_feb) {
180  do_check=0;
181  break;
182  }
183  if(do_check) {
184  //WL 31.10.2007 //check RodStatus-word to catch corrupt events
185  if (BlStruct->getStatus() & m_StatusNMask) {
186  msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
187  continue;
188  }
189  }
190  // RL 05.11.2007 checksum
191  if(m_CheckSum) {
192  const uint32_t onsum = BlStruct->onlineCheckSum();
193  const uint32_t offsum = BlStruct->offlineCheckSum();
194  if(onsum!=offsum) {
195  msg(MSG::WARNING) << "Checksum error for FEB: " << MSG::hex << fId32 << endmsg;
196  msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
197  msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << MSG::dec << endmsg;
198  continue;
199  }
200  }
201 
202  if (m_vFinalPreselection.size()) {
203  const unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
204  if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
205  ATH_MSG_DEBUG("Feedthrough with id 0x" << MSG::hex << ftId << MSG::dec <<" not in preselection. Ignored.");
206  continue;
207  }
208  }
209  const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
210  while (BlStruct->getNextRawData(fcNb,samples,gain))
211  {if (fcNb>=NthisFebChannel)
212  continue;
213  if (samples.size()==0) continue; // Ignore missing cells
214  HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
215  calogain=(CaloGain::CaloGain)gain;
216  dg = new LArDigit(cId, calogain, std::move(samples));
217  samples.clear();
218  coll.push_back(dg);
219  }
220  }
221  while (BlStruct->nextFEB()); //Get NextFeb
222  return;
223 }
224 
225 //*******
226 
227 
229  const uint32_t* p, uint32_t n, LArRawChannelContainer& coll, CaloGain::CaloGain RequestedGain) const
230 {
231  int32_t energy;
232  int32_t time;
233  int32_t quality;
234  uint32_t gain;
235  int fcNb;
236  HWIdentifier cId;
237  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
238  if (!BlStruct) return;
239 
240  do {
241  HWIdentifier fId( Identifier32(BlStruct->getFEBID()) );
242  unsigned int fId32 = fId.get_identifier32().get_compact();
243  if (!m_onlineHelper->isValidId(fId)) {
244  msg(MSG::WARNING) << "Invalid FEB identifer " << std::hex << fId32 << std::dec << ". Skipping" << endmsg;
245  continue;
246  }
247  // std::cout << "rawChan FEBID=" << std::hex <<fId32 << std::dec<<std::endl;
248 
249  if(m_febExchange) {
250  if (fId32 == m_febId1) {
252  fId32 = fId.get_identifier32().get_compact();
253  }
254  else if(fId32 == m_febId2) {
256  fId32 = fId.get_identifier32().get_compact();
257  }
258  }
259  if (!BlStruct->hasPhysicsBlock()) {
260  ATH_MSG_DEBUG("No Physics Data for this FEB - NULL event for FEBID 0x" << std::hex << BlStruct->getFEBID() << std::dec);
261  continue;
262  }
263 
264  // RL 04.17.2008 skip check for some FEBs
265  int do_check=1;
266  std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
267  std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
268  for(; it_feb!=it_feb_end;++it_feb)
269  if(fId==*it_feb) {
270  do_check=0;
271  break;
272  }
273  if(do_check) {
274  //WL 31.10.2007 //check RodStatus-word to catch corrupt events
275  if (BlStruct->getStatus() & m_StatusNMask) {
276  msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
277  continue;
278  }
279  }
280 
281  // RL 05.11.2007 checksum
282  if(m_CheckSum) {
283  const uint32_t onsum = BlStruct->onlineCheckSum();
284  const uint32_t offsum = BlStruct->offlineCheckSum();
285  if(onsum!=offsum) {
286  msg(MSG::WARNING) << "Checksum error:" << endmsg;
287  msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
288  msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
289  continue;
290  }
291  }
292 
293  if (m_vFTPreselection.size()) {
295  if (!std::binary_search(m_vFTPreselection.begin(), m_vFTPreselection.end(),ftId)) {
296  ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
297  continue;
298  }
299  }
300  const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
301  while (BlStruct->getNextEnergy(fcNb,energy,time,quality,gain)) {
302  if (fcNb>=NthisFebChannel)
303  continue;
304  cId = m_onlineHelper->channel_Id(fId,fcNb);
305  uint16_t iquality = 0;
306  uint16_t iprovenance = 0x1000;
307  if (quality>0) {
308  iprovenance |= 0x2000;
309  iquality = (quality & 0xFFFF);
310  }
311  LArRawChannel chan(cId, energy, time, iquality, iprovenance, (CaloGain::CaloGain)gain);
312  coll.push_back(chan);
313  }
314  }
315  while (BlStruct->nextFEB()); //Get NextFeb
316  return;
317 }
318 
319 
321  const uint32_t* p,
322  uint32_t n,
324  CaloGain::CaloGain RequestedGain,
325  const LArCalibLineMapping& calibLineMapping,
326  const LArOnOffIdMapping& onOffIdMapping) const
327 { // CalibDigit pointer
328  LArCalibDigit * dg=0 ;
329  uint32_t gain;
330  CaloGain::CaloGain calogain;
331  int fcNb;
332  uint16_t dac, delay;
333  bool ispulsed;
334  std::vector<short> samples;
335 
336  ATH_MSG_VERBOSE("FillCollection for LArCalibDigitContainer is called.");
337  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
338  if (!BlStruct) return;
339  if (BlStruct->canSetCalibration()) {
340  dac=BlStruct->getDAC();
341  delay=BlStruct->getDelay();
342  // int iFeb=0, iCan=0; //For debug purpose
343  do
344  {
345  // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
346  if (!BlStruct->hasRawDataBlock()) {
347  ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID " << std::hex << BlStruct->getFEBID());
348  continue;
349  }
350  HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
351  unsigned int fId32 = fId.get_identifier32().get_compact();
352  // RL 20.09.2006 protection against 0 FebId
353  if (!fId32){
354  ATH_MSG_DEBUG("Bad FebID=0x"<< std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!");
355  continue;
356  }
357  // RL 04.17.2008 skip check for some FEBs
358  int do_check=1;
359  std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
360  std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
361  for(; it_feb!=it_feb_end;++it_feb)
362  if(fId==*it_feb) {
363  do_check=0;
364  break;
365  }
366  if(do_check) {
367  //WL 31.10.2007 //check RodStatus-word to catch corrupt events
368  if (BlStruct->getStatus() & m_StatusNMask) {
369  msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
370  continue;
371  }
372  }
373  // RL 05.11.2007 checksum
374  if(m_CheckSum) {
375  uint32_t onsum = BlStruct->onlineCheckSum();
376  uint32_t offsum = BlStruct->offlineCheckSum();
377  if(onsum!=offsum) {
378  msg(MSG::WARNING) << "Checksum error:" << endmsg;
379  msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
380  msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
381  continue;
382  }
383  }
384  if(m_febExchange) {
385  if (fId32 == m_febId1) {
387  fId32 = fId.get_identifier32().get_compact();
388  }
389  else if(fId32 == m_febId2) {
391  fId32 = fId.get_identifier32().get_compact();
392  }
393  }
394 
395  if (m_vFinalPreselection.size()) {
396  unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
397  if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
398  ATH_MSG_DEBUG("Feedthrough with id 0x" << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
399  continue;
400  }
401  }
402  const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
403  while (BlStruct->getNextRawData(fcNb,samples,gain))
404  {if (fcNb>=NthisFebChannel)
405  continue;
406  if (samples.size()==0) continue; // Ignore missing cells
407  HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
408  ispulsed=BlStruct->getPulsed(fcNb);
409 
410  calogain=(CaloGain::CaloGain)gain;
411  dg = new LArCalibDigit(cId, calogain, samples, dac, delay, ispulsed);
412  samples.clear();
413  coll.push_back(dg);
414  }
415  }
416  while (BlStruct->nextFEB()); //Get NextFeb
417  }
418  else {//Not a calibration data block, try to get from database
419  ATH_MSG_VERBOSE("Not LArCalibDigit data block found. Building it using DB values");
420  //1st step, get Calib board config object
421  const LArCalibParams* calibParams = nullptr;
422  StatusCode sc=detStore()->retrieve(calibParams);
423  if (sc.isFailure())
424  {msg(MSG::ERROR) << "Cannot load LArCalibParams from DetStore!" << endmsg;
425  return;
426  }
427  //2st step, get Event number
429  if (!evt.isValid()) {
430  ATH_MSG_ERROR("Cannot get EventInfo");
431  return; //Return empty container.
432  }
433  const unsigned eventNb=evt->eventNumber();
434  const std::vector<HWIdentifier>* calibChannelIDs;
435  do { //Loop over all FEBs in this ROD
436 
437  // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
438  if (!BlStruct->hasRawDataBlock()) {
439  ATH_MSG_DEBUG("No Raw Data for this FEB - NULL event for FEBID 0x" << std::hex << BlStruct->getFEBID() << std::dec);
440  continue;
441  }
442  HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
443  unsigned int fId32 = fId.get_identifier32().get_compact();
444  // RL 20.09.2006 protection against 0 FebId
445  if (!fId32) {
446  ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
447  continue;
448  }
449  if(m_febExchange) {
450  if (fId32 == m_febId1) {
452  fId32 = fId.get_identifier32().get_compact();
453  }
454  else if(fId32 == m_febId2) {
456  fId32 = fId.get_identifier32().get_compact();
457  }
458  }
459  fcNb=0;
460  HWIdentifier cId;
461  do { //Search for the first connected channel of this FEB (probably the first one...)
462  fcNb++;
463  cId = m_onlineHelper->channel_Id(fId,fcNb);
464  calibChannelIDs=&calibLineMapping.calibSlotLine(cId);
465  }
466  while ( (!onOffIdMapping.isOnlineConnected(cId) || calibChannelIDs->size()==0) && fcNb<128); // This is the right conditions to exit the loop!
467 
468  if ( calibChannelIDs->size()==0 ) {
469  msg(MSG::ERROR) << "Cannot get calibration Channel ID for FEB " << std::hex << fId32 << std::dec << endmsg;
470  return;
471  }
472 
473  uint16_t dac;
474  uint16_t delay;
475 
476  std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs->begin();
477  //Derive DAC and Delay value from this channel
478  dac=calibParams->DAC(eventNb,*csl_it);
479  delay=calibParams->Delay(eventNb,*csl_it);
480 
481  //Now start looping over channels in FEB
482  const int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
483  //std::cout << "Processing FEB #" << iFeb++ << std::endl;
484 
485  //int iCan=0;
486 
487  fcNb=0;
488  while (BlStruct->getNextRawData(fcNb,samples,gain))
489  {
490  if (fcNb>=NthisFebChannel) continue;
491  if (samples.size()==0) continue; // Ignore missing cells
492  cId = m_onlineHelper->channel_Id(fId,fcNb);
493  calibChannelIDs=&calibLineMapping.calibSlotLine(cId);
494  //if (calibChannelIDs->size()==0)
495  //continue; //Disconnected channel
496  //For the time being, I assume we are in H8 and have only one calib channel per FEB channel
497 
498  if (calibChannelIDs->size()!=0) {
499  csl_it=calibChannelIDs->begin();
500  ispulsed=calibParams->isPulsed(eventNb,*csl_it);
501 
502  } else ispulsed=0;
503  calogain=(CaloGain::CaloGain)gain;
504  dg = new LArCalibDigit(cId, calogain, samples, dac, delay, ispulsed);
505  samples.clear();
506 
507  coll.push_back(dg);
508  //iCan++;
509  }
510  }
511  while (BlStruct->nextFEB()); //Get NextFeb
512  }
514  return;
515 }
516 
518  const uint32_t* p,
519  uint32_t n,
521  CaloGain::CaloGain RequestedGain,
522  const LArCalibLineMapping& calibLineMapping) const
523 { // Accumulated Digit pointer
525  CaloGain::CaloGain calogain;
526  uint32_t gain, ntrigger;
527  int dac, delay, NStep=-1, StepIndex=-1;
528  bool ispulsed;
529  uint16_t ispulsed_int;
530  int bitShift;
531  uint32_t FirstGoodFEB=1;
532  int fcNb;
533  std::vector< uint64_t > samplesSum;
534  std::vector< uint64_t > samples2Sum;
535 
536  // for(int i=0;i<16;i++)
537  // std::cout << " - " << std::hex << p[i] << std::endl;
538 
539  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
540  if (!BlStruct) return;
541  do
542  {
543  // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
544  if (!BlStruct->hasCalibBlock())
545  {
546  ATH_MSG_DEBUG("No Calib Data for this FEB - NULL event");
547  continue;
548  }
549  if(FirstGoodFEB)
550  {
551  FirstGoodFEB=0;
552  }
553  HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
554  unsigned int fId32 = fId.get_identifier32().get_compact();
555  // RL 20.09.2006 protection against 0 FebId
556  if (!fId32){
557  ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
558  continue;
559  }
560  // RL 04.17.2008 skip check for some FEBs
561  int do_check=1;
562  std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
563  std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
564  for(; it_feb!=it_feb_end;++it_feb)
565  if(fId==*it_feb) {
566  do_check=0;
567  break;
568  }
569  if(do_check) {
570  //WL 31.10.2007 //check RodStatus-word to catch corrupt events
571  if (BlStruct->getStatus() & m_StatusNMask) {
572  msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
573  continue;
574  }
575  }
576  // RL 05.11.2007 checksum
577  if(m_CheckSum) {
578  uint32_t onsum = BlStruct->onlineCheckSum();
579  uint32_t offsum = BlStruct->offlineCheckSum();
580  if(onsum!=offsum) {
581  msg(MSG::WARNING) << "Checksum error:" << endmsg;
582  msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
583  msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
584  continue;
585  }
586  }
587  if(m_febExchange) {
588  if (fId32 == m_febId1) {
590  fId32 = fId.get_identifier32().get_compact();
591  }
592  else if(fId32 == m_febId2) {
594  fId32 = fId.get_identifier32().get_compact();
595  }
596  }
597 
598  if (m_vFinalPreselection.size()) {
599  unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
600  if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
601  ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
602  continue;
603  }
604  }
605  int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
606  uint32_t idum=0;
607  while (BlStruct->getNextAccumulatedCalibDigit(fcNb,samplesSum,samples2Sum,idum,gain))
608  {
609  ispulsed_int=0;
610  bitShift=0;
611  if (fcNb>=NthisFebChannel)continue;
612  if (samplesSum.size()==0) continue; // Ignore missing cells
613  HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
614  calogain=(CaloGain::CaloGain)gain;
615  ntrigger=BlStruct->getNTrigger();
616  dac=BlStruct->getDAC();
617  delay=BlStruct->getDelay();
618  NStep=BlStruct->getNStep();
619  if(!NStep) NStep=1; // To be able to decode v6 code
620  StepIndex=BlStruct->getStepIndex();
621  // 08.08.2005 IWS get calib line
622  const std::vector<HWIdentifier>& calibChannelIDs = calibLineMapping.calibSlotLine(cId);
623  if (calibChannelIDs.size()==0) {
624  samplesSum.clear();
625  samples2Sum.clear();
626  continue;// connected channel
627  }
628  //GR: Loop over all the calib chans instead of just looking at the first one and set four bit isPulsed int
629  for(std::vector<HWIdentifier>::const_iterator csl_it=calibChannelIDs.begin(); csl_it!=calibChannelIDs.end();++csl_it){
630  uint32_t calibLine = m_onlineHelper->channel(*csl_it);
631  ispulsed=BlStruct->getPulsed(calibLine);
632  ispulsed_int=( ispulsed_int | ((uint16_t)ispulsed<<bitShift) );
633  bitShift++;
634  }
635 
636  dg=new LArAccumulatedCalibDigit(cId, calogain, samplesSum, samples2Sum, ntrigger, dac, delay,
637  (uint16_t)ispulsed_int, NStep, StepIndex);
638 
639  coll.push_back(dg);
640  } // End while
641  }//End do loop of FEBs
642  while (BlStruct->nextFEB()); //Get NextFeb
643 
644  return;
645 }
646 
648  const uint32_t* p, uint32_t n, LArAccumulatedDigitContainer& coll, CaloGain::CaloGain RequestedGain) const
649 { // Accumulated Digit pointer
650  LArAccumulatedDigit * dg=0 ;
651  CaloGain::CaloGain calogain;
652  uint32_t gain, ntrigger;
653  //int NStep=-1, StepIndex=-1;
654  int fcNb;
655  std::vector<uint64_t> sampleSum;
656  std::vector< uint64_t > sampleSquare;
657 
658  // for(int i=0;i<16;i++)
659  // std::cout << " - " << std::hex << p[i] << std::endl;
660 
661  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
662  if (!BlStruct) return;
663  do
664  {
665  // IWS 24.01.2006 protection against NULL events (null pointer to rawdata block)
666  if (!BlStruct->hasAccumBlock()) {
667  ATH_MSG_DEBUG("No Accum Data for this FEB - NULL event");
668  continue;
669  }
670  HWIdentifier fId(Identifier32(BlStruct->getFEBID()));
671  unsigned int fId32 = fId.get_identifier32().get_compact();
672  // RL 20.09.2006 protection against 0 FebId
673  if (!fId32) {
674  ATH_MSG_DEBUG("Bad FebID=0x" << std::hex << BlStruct->getFEBID() << " found for this FEB, skipping it!" << std::dec);
675  continue;
676  }
677  // RL 04.17.2008 skip check for some FEBs
678  int do_check=1;
679  std::vector<unsigned int>::const_iterator it_feb = m_IgnoreCheckFEBs.begin();
680  std::vector<unsigned int>::const_iterator it_feb_end = m_IgnoreCheckFEBs.end();
681  for(; it_feb!=it_feb_end;++it_feb)
682  if(fId==*it_feb) {
683  do_check=0;
684  break;
685  }
686  if(do_check) {
687  //WL 31.10.2007 //check RodStatus-word to catch corrupt events
688  if (BlStruct->getStatus() & m_StatusNMask) {
689  msg(MSG::WARNING) << "RodStatus&0x" << std::hex << m_StatusNMask << " indicates corrupt data for FEB "<< std::hex << fId32 << std::dec <<". Ignored." << endmsg;
690  continue;
691  }
692  }
693  // RL 05.11.2007 checksum
694  if(m_CheckSum) {
695  uint32_t onsum = BlStruct->onlineCheckSum();
696  uint32_t offsum = BlStruct->offlineCheckSum();
697  if(onsum!=offsum) {
698  msg(MSG::WARNING) << "Checksum error:" << endmsg;
699  msg(MSG::WARNING) << " online checksum = " << MSG::hex << onsum << endmsg;
700  msg(MSG::WARNING) << " offline checksum = " << MSG::hex << offsum << endmsg;
701  continue;
702  }
703  }
704  if(m_febExchange) {
705  if (fId32 == m_febId1) {
707  fId32 = fId.get_identifier32().get_compact();
708  }
709  else if(fId32 == m_febId2) {
711  fId32 = fId.get_identifier32().get_compact();
712  }
713  }
714 
715  if (m_vFinalPreselection.size()) {
716  unsigned int ftId=m_onlineHelper->feedthrough_Id(fId).get_identifier32().get_compact();
717  if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
718  ATH_MSG_DEBUG("Feedthrough with id " << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
719  continue;
720  }
721  }
722  int NthisFebChannel=m_onlineHelper->channelInSlotMax(fId);
723  ntrigger=BlStruct->getNTrigger();
724  //NStep=BlStruct->getNStep();
725  //if(!NStep) NStep=1; // To be able to decode v6 code
726  //StepIndex=BlStruct->getStepIndex();
727  while (BlStruct->getNextAccumulatedDigit(fcNb,sampleSum,sampleSquare,gain)) {
728  if (fcNb>=NthisFebChannel)continue;
729  if (sampleSquare.size()==0) continue; // Ignore missing cells
730  HWIdentifier cId = m_onlineHelper->channel_Id(fId,fcNb);
731  calogain=(CaloGain::CaloGain)gain;
732  dg=new LArAccumulatedDigit(cId,calogain,sampleSum,sampleSquare,ntrigger);
733  coll.push_back(dg);
734  } // End while
735  }//End do loop of FEBs
736  while (BlStruct->nextFEB()); //Get NextFeb
737 
738  return;
739 }
740 
742  const uint32_t* p, uint32_t n, LArFebHeaderContainer& coll,const CaloGain::CaloGain RequestedGain) const
743 {
744  LArFebHeader* larFebHeader;
745  //uint32_t NWtot=0;
746  HWIdentifier FEBID;
747 
748  // for(int i=0;i<16;i++)
749  // std::cout << " - " << std::hex << p[i] << std::endl;
750 
751  LArRodBlockStructure* BlStruct=prepareBlockStructure(robFrag, p, n, RequestedGain);
752  if (!BlStruct) return;
753 
754  do{
755  //Read first FEB. The header of this feb is combined with the ROD-Header
756  //NWtot=BlStruct->getNumberOfWords();
757  //if(NWtot<=4) continue;
758 
759  FEBID=HWIdentifier(Identifier32(BlStruct->getFEBID()));
760  unsigned int FEBID32 = FEBID.get_identifier32().get_compact();
761  if (!m_onlineHelper->isValidId(FEBID)) {
762  msg(MSG::WARNING) << "Invalid FEB identifer " << std:: hex << FEBID32 << std::dec << ". Skipping" << endmsg;
763  continue;
764  }
765 
766  if(m_febExchange) {
767  if (FEBID32 == m_febId1) {
769  FEBID32 = FEBID.get_identifier32().get_compact();
770  }
771  else if(FEBID32 == m_febId2) {
773  FEBID32 = FEBID.get_identifier32().get_compact();
774  }
775  }
776 
777  if (m_vFinalPreselection.size()) {
778  const unsigned int ftId=m_onlineHelper->feedthrough_Id(FEBID).get_identifier32().get_compact();
779  if (!std::binary_search(m_vFinalPreselection.begin(), m_vFinalPreselection.end(),ftId)) {
780  ATH_MSG_DEBUG("Feedthrough with id 0x" << std::hex << ftId << std::dec <<" not in preselection. Ignored.");
781  continue;
782  }
783  }
784 
785 
786 
787  larFebHeader=new LArFebHeader(FEBID);
788  //setROD header data
789 
790  larFebHeader->SetFormatVersion(robFrag.rod_version());
791  larFebHeader->SetSourceId(robFrag.rod_source_id());
792  larFebHeader->SetRunNumber(robFrag.rod_run_no());
793  larFebHeader->SetELVL1Id(robFrag.rod_lvl1_id());
794  larFebHeader->SetBCId(robFrag.rod_bc_id());
795  larFebHeader->SetLVL1TigType(robFrag.rod_lvl1_trigger_type());
796  larFebHeader->SetDetEventType(robFrag.rod_detev_type());
797 
798  //set DSP data
799  const unsigned nsample=BlStruct->getNumberOfSamples();
800  const uint32_t status= BlStruct->getStatus();
801  larFebHeader->SetDspCodeVersion(BlStruct->getDspCodeVersion());
802  larFebHeader->SetDspEventCounter(BlStruct->getDspEventCounter());
803  larFebHeader->SetRodResults1Size(BlStruct->getResults1Size());
804  larFebHeader->SetRodResults2Size(BlStruct->getResults2Size());
805  larFebHeader->SetRodRawDataSize(BlStruct->getRawDataSize());
806  larFebHeader->SetNbSweetCells1(BlStruct->getNbSweetCells1());
807  larFebHeader->SetNbSweetCells2(BlStruct->getNbSweetCells2());
808  larFebHeader->SetNbSamples(nsample);
809  larFebHeader->SetOnlineChecksum(BlStruct->onlineCheckSum());
810  larFebHeader->SetOfflineChecksum(BlStruct->offlineCheckSum());
811 
812  if(!BlStruct->hasControlWords()) {
813  larFebHeader->SetFebELVL1Id(robFrag.rod_lvl1_id());
814  larFebHeader->SetFebBCId(robFrag.rod_bc_id());
815  } else {
816  const uint16_t evtid = BlStruct->getCtrl1(0) & 0x1f;
817  const uint16_t bcid = BlStruct->getCtrl2(0) & 0x1fff;
818 
819  larFebHeader->SetFebELVL1Id(evtid);
820  larFebHeader->SetFebBCId(bcid);
821  for(int iadc=0;iadc<16;iadc++) {
822  larFebHeader->SetFebCtrl1(BlStruct->getCtrl1(iadc));
823  larFebHeader->SetFebCtrl2(BlStruct->getCtrl2(iadc));
824  larFebHeader->SetFebCtrl3(BlStruct->getCtrl3(iadc));
825  }
826  for(unsigned int i = 0; i<nsample; i++ ) {
827  larFebHeader->SetFebSCA(BlStruct->getRadd(0,i) & 0xff);
828  }
829  }
830  larFebHeader->SetRodStatus(status);
831  coll.push_back(larFebHeader);
832 
833  } while (BlStruct->nextFEB()); //Get NextFeb
834 }
835 
836 
838 LArRodDecoder::prepareBlockStructure1 (const uint16_t rodMinorVersion, const uint32_t robBlockType) const
839 {
840  const unsigned MAXMINOR = 12;
841  const unsigned MAXTYPE = 10;
842 
843  if (rodMinorVersion > MAXMINOR || robBlockType > MAXTYPE) {
844  msg(MSG::ERROR) << "Bad Rod block type " << robBlockType
845  << " / " << rodMinorVersion << endmsg;
846  return nullptr;
847  }
848  std::vector<std::unique_ptr<LArRodBlockStructure> >& blstructs =
849  *m_blstructs.get();
850  unsigned int index = robBlockType * (MAXMINOR+1) + rodMinorVersion;
851  if (blstructs.empty()) {
852  blstructs.resize ((MAXMINOR+1)*(MAXTYPE+1));
853  }
854  if (!blstructs[index]) {
855  blstructs[index] = makeBlockStructure (robBlockType, rodMinorVersion);
856  }
857  if (!blstructs[index]) {
858  msg(MSG::ERROR) << "Bad Rod block type " << robBlockType
859  << " / " << rodMinorVersion << endmsg;
860  return nullptr;
861  }
862 
863 #ifndef NDEBUG
864  ATH_MSG_DEBUG("Found version " << rodMinorVersion << " of Rod block type " << robBlockType);
865 #endif
866 
867  return blstructs[index].get();
868 }
869 
870 
873  const uint32_t* p, uint32_t n, const CaloGain::CaloGain RequestedGain) const
874 {
875 #ifndef NDEBUG
876  ATH_MSG_DEBUG("Prepare LArRodBlockStructure. Got a fragement of size " << n);
877 #endif
878 
879  //Get version and blocktype form header
880  eformat::helper::Version ver(robFrag.rod_version());
881  const uint16_t rodMinorVersion=ver.minor_version();
882  const uint32_t rodBlockType=robFrag.rod_detev_type()&0xff;
883  LArRodBlockStructure* BlStruct = prepareBlockStructure1 (rodMinorVersion, rodBlockType);
884  if (!BlStruct) {
885  return nullptr;
886  }
887 
888  //BlStruct->dumpFragment(v); // For testing purpose
889  if (!BlStruct->setFragment(p,n)) {
890  constexpr int maxMess = 100;
891  static std::atomic<int> nMess = 1;
892  int thismess = nMess++;
893  if (thismess <= maxMess) {
894  msg(MSG::ERROR) << "Could not set fragment (wrong number of samples in data ?) - container will not be filled" << endmsg;
895  if (thismess == maxMess)
896  msg(MSG::ERROR) << "This message will not be repeated" << endmsg;
897  }
898  return NULL;
899  }
900 #ifndef NDEBUG
901  ATH_MSG_VERBOSE("Set Fragment at address "<< &(p[0]) << " " << p[5]);
902 #endif
903 
904  BlStruct->setGain(RequestedGain); //Will be ignored if BlockStructure does not support fixed gains.
905  //FIXME: Very ugly hack! See explanation in LArRodDecoder.h
906  if (m_firstSample) {
907  BlStruct->setFirstSample(m_firstSample);
908  }
909  return BlStruct;
910 }
911 
912 
913 std::unique_ptr<LArRodBlockStructure>
914 LArRodDecoder::makeBlockStructure (unsigned int rodBlockType,
915  unsigned int rodMinorVersion) const
916 {
917  switch (rodBlockType) {
918  case 2:
919  // RodBlockType 2 = Transparent mode only
920  switch (rodMinorVersion) {
921  case 0: // Transparent mode v0 05.01.2004
922  case 1: // Transparent mode v0
923  case 2: // Transparent mode v0
924  case 3: // Transparent mode v0
925  case 4: // Transparent mode v0
926  return std::make_unique<LArRodBlockTransparentV0<LArRodBlockHeaderTransparentV0> >();
927  case 5: // Calibration (Transparent mode) v1 17.01.2006
928  return std::make_unique<LArRodBlockCalibrationV1>();
929  case 6: // Calibration (Transparent mode) v3 31.05.2006
930  case 7: // Calibration (Transparent mode) v3
931  case 8: // Calibration (Transparent mode) v3
932  case 9: // Calibration (Transparent mode) v3
933  case 10:// Calibration (Transparent mode) v3
934  case 11:// Calibration (Transparent mode) v3
935  case 12:// Calibration (Transparent mode) v3
936  return std::make_unique<LArRodBlockCalibrationV3>();
937  default:
938  break;
939  }
940  break;
941 
942  case 3:
943  // RodBlockType 3 = Test mode
944  return std::make_unique<LArRodBlockTransparentV0<LArRodBlockHeaderTransparentV0> >();
945 
946  case 4:
947  // RodBlockType 4 = Physics mode
948  switch (rodMinorVersion) {
949  case 0: // Physics mode v0 05.01.2004 first draft
950  return std::make_unique<LArRodBlockPhysicsV0>();
951  case 1: // Physics mode v1 19.08.2004 only small differences
952  return std::make_unique<LArRodBlockPhysicsV1>();
953  case 2: // Physics mode v2 05.10.2004 adapted to real DSP data
954  case 3: // Physics mode v2
955  case 4: // Physics mode v2
956  case 5: // Physics mode v2
957  case 6: // Physics mode v2
958  case 7: // Physics mode v2
959  case 8: // Physics mode v2
960  return std::make_unique<LArRodBlockPhysicsV2>();
961  case 9: // Physics mode v4 10.07.2007 for commissioning
962  return std::make_unique<LArRodBlockPhysicsV4>();
963  case 10: // Physics mode v5 16.06.2008 for LHC
964  case 11: // Physics mode v5 16.06.2008 for LHC
965  {
966  auto bl = std::make_unique<LArRodBlockPhysicsV5>();
967  if (m_requiredPhysicsNSamples > 0) {
968  bl->setRequiredNSamples(m_requiredPhysicsNSamples);
969  }
970  return bl;
971  }
972  case 12: // Physics mode v5 09.03.2011 for LHC
973  {
974  auto bl = std::make_unique<LArRodBlockPhysicsV6>();
975  if (m_requiredPhysicsNSamples > 0) {
976  bl->setRequiredNSamples(m_requiredPhysicsNSamples);
977  }
978  return bl;
979  }
980  default:
981  break;
982  }
983  break;
984 
985  case 5:
986  // RodBlockType 5 = Physics simulation mode
987  // Physics mode v3 11.04.2005 for simulation
988  return std::make_unique<LArRodBlockPhysicsV3>();
989 
990  case 6:
991  // RodBlockType 6 = Physics test mode
992  switch (rodMinorVersion) {
993  case 0: // Physics mode v0 05.01.2004 first draft
994  return std::make_unique<LArRodBlockPhysicsV0>();
995  case 1: // Physics mode v2 05.10.2004 adapted to real DSP data
996  case 2: // Physics mode v2
997  return std::make_unique<LArRodBlockPhysicsV2>();
998  default:
999  break;
1000  }
1001  break;
1002 
1003  case 7:
1004  // RodBlockType 7 = Calibration mode
1005  switch (rodMinorVersion) {
1006  case 0: // Calibration mode v0 05.01.2004
1007  return std::make_unique<LArRodBlockCalibrationV0<LArRodBlockHeaderCalibrationV0> >();
1008  case 1: // Calibration mode v1 17.01.2006
1009  case 2: // Calibration mode v1
1010  case 3: // Calibration mode v1
1011  case 4: // Calibration mode v1
1012  return std::make_unique<LArRodBlockCalibrationV1>();
1013  case 5: // Calibration mode v2 26.04.2006
1014  return std::make_unique<LArRodBlockCalibrationV2>();
1015  case 6: // Calibration mode v3 31.05.2006
1016  case 7: // Calibration mode v3
1017  case 8: // Calibration mode v3
1018  case 9: // Calibration mode v3
1019  case 10:// Calibration mode v3
1020  case 11:// Calibration mode v3
1021  case 12:// Calibration mode v3
1022  return std::make_unique<LArRodBlockCalibrationV3>();
1023  default:
1024  break;
1025  }
1026  break;
1027 
1028  case 10:
1029  // RodBlockType 10 = Accumulated mode (used for pre-processed pedestal runs)
1030  // Accumulated mode v3 10.06.2008
1031  return std::make_unique<LArRodBlockAccumulatedV3>();
1032 
1033  default:
1034  break;
1035  }
1036 
1037  return std::unique_ptr<LArRodBlockStructure>();
1038 }
LArRodBlockStructure
Definition: LArRodBlockStructure.h:48
LArRodBlockCalibrationV2.h
LArRodBlockStructure::getNbSweetCells1
virtual uint16_t getNbSweetCells1() const
Definition: LArRodBlockStructure.cxx:255
LArRodBlockStructure::getNumberOfSamples
virtual uint32_t getNumberOfSamples() const
Definition: LArRodBlockStructure.cxx:245
LArRodBlockStructure::getRadd
virtual uint32_t getRadd(uint32_t adc, uint32_t sample) const
Definition: LArRodBlockStructure.cxx:247
Identifier32
Definition: Identifier32.h:25
LArAccumulatedCalibDigit
Data class for calibration ADC samples preprocessed by the DSP.
Definition: LArAccumulatedCalibDigit.h:42
LArRodBlockStructure::hasAccumBlock
virtual uint32_t hasAccumBlock() const
Definition: LArRodBlockStructure.h:123
LArRodBlockStructure::hasPhysicsBlock
virtual uint32_t hasPhysicsBlock() const
Definition: LArRodBlockStructure.h:124
LArRodDecoder::LArRodDecoder
LArRodDecoder(const std::string &type, const std::string &name, const IInterface *parent)
Constructor Standard AlgTool constructor.
Definition: LArRodDecoder.cxx:40
LArRodDecoder::m_readtdc
bool m_readtdc
Definition: LArRodDecoder.h:222
LArRodDecoder::m_vFinalPreselection
std::vector< unsigned int > m_vFinalPreselection
Definition: LArRodDecoder.h:237
LArRodBlockStructure::getStepIndex
virtual uint16_t getStepIndex() const
Definition: LArRodBlockStructure.h:486
LArRodBlockStructure::setGain
virtual int setGain(const int GainValue)
Definition: LArRodBlockStructure.cxx:224
checkCoolLatestUpdate.dg
dg
Definition: checkCoolLatestUpdate.py:9
LArRodBlockStructure::getNbSweetCells2
virtual uint16_t getNbSweetCells2() const
Definition: LArRodBlockStructure.cxx:256
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
LArAccumulatedDigitContainer
Container class for LArAccumulatedDigit.
Definition: LArAccumulatedDigitContainer.h:22
LArRodDecoder::m_onlineHelper
const LArOnlineID * m_onlineHelper
Definition: LArRodDecoder.h:239
LArRodBlockStructure::getNextAccumulatedDigit
virtual int getNextAccumulatedDigit(int &channelNumber, std::vector< uint64_t > &SamplesSum, std::vector< uint64_t > &corr2Sum, uint32_t &gain)
Definition: LArRodBlockStructure.cxx:100
LArRodDecoder::m_CheckSum
bool m_CheckSum
Definition: LArRodDecoder.h:249
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
LArRodDecoder::m_evt
SG::ReadHandleKey< xAOD::EventInfo > m_evt
Definition: LArRodDecoder.h:220
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
LArRodDecoder::m_LArCellCorrNames
std::vector< std::string > m_LArCellCorrNames
Definition: LArRodDecoder.h:240
LArRodDecoder.h
LArRodDecoder::m_febExchange
bool m_febExchange
Definition: LArRodDecoder.h:223
initialize
void initialize()
Definition: run_EoverP.cxx:894
LArCalibLineMapping::calibSlotLine
const std::vector< HWIdentifier > & calibSlotLine(const HWIdentifier id) const
Definition: LArCalibLineMapping.cxx:15
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
LArRodBlockStructure::getRawDataSize
virtual uint16_t getRawDataSize() const
Definition: LArRodBlockStructure.cxx:254
skel.it
it
Definition: skel.GENtoEVGEN.py:396
CaloCellCorrection
Definition: CaloCellCorrection.h:51
LArCalibParams
Definition: LArCalibParams.h:28
LArRodBlockStructure::getNStep
virtual uint16_t getNStep() const
Definition: LArRodBlockStructure.h:491
Identifier::get_identifier32
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
LArRodBlockPhysicsV1.h
LArRodDecoder::m_StatusNMask
uint32_t m_StatusNMask
Definition: LArRodDecoder.h:238
LArRodBlockPhysicsV0.h
LArRodDecoder::interfaceID
static const InterfaceID & interfaceID()
Definition: LArRodDecoder.cxx:71
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
LArFebHeader::SetFormatVersion
void SetFormatVersion(const uint32_t formatVersion)
set the format version
Definition: LArFebHeader.h:122
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
LArRodDecoder::m_IgnoreCheckFEBs
std::vector< unsigned int > m_IgnoreCheckFEBs
Definition: LArRodDecoder.h:241
HWIdentifier
Definition: HWIdentifier.h:13
LArRodBlockPhysicsV2.h
LArRodBlockStructure::hasRawDataBlock
virtual uint32_t hasRawDataBlock() const
Definition: LArRodBlockStructure.h:125
LArFebHeader::SetELVL1Id
void SetELVL1Id(const uint16_t elvl1Id)
set the EventID
Definition: LArFebHeader.h:134
LArRodBlockStructure::getNextEnergy
virtual int getNextEnergy(int &channelNumber, int32_t &energy, int32_t &time, int32_t &quality, uint32_t &gain)
Definition: LArRodBlockStructure.h:456
LArRodDecoder::m_MultiDSPMode
bool m_MultiDSPMode
Definition: LArRodDecoder.h:248
Identifier32::get_compact
value_type get_compact() const
Get the compact id.
Definition: Identifier32.h:44
LArRodDecoder::m_vPosNegPreselection
std::vector< int > m_vPosNegPreselection
Definition: LArRodDecoder.h:236
LArRodBlockStructure::getCtrl2
virtual uint16_t getCtrl2(uint32_t adc) const
Definition: LArRodBlockStructure.cxx:249
LArRodBlockPhysicsV5.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
LArFebHeader::SetLVL1TigType
void SetLVL1TigType(const uint32_t lvl1ttype)
set the Level1 trigger type ID
Definition: LArFebHeader.h:162
LArRodBlockStructure::offlineCheckSum
virtual uint32_t offlineCheckSum() const
Definition: LArRodBlockStructure.cxx:163
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
LArRodBlockStructure::getDspCodeVersion
virtual uint32_t getDspCodeVersion() const
Definition: LArRodBlockStructure.cxx:258
LArRodBlockPhysicsV4.h
LArFebHeader::SetRodRawDataSize
void SetRodRawDataSize(const uint16_t size)
Definition: LArFebHeader.h:146
LArRodDecoder::m_vFTPreselection
std::vector< int > m_vFTPreselection
Definition: LArRodDecoder.h:234
LArRodDecoder::m_delayScale
double m_delayScale
Definition: LArRodDecoder.h:244
LArRodDecoder::m_StatusMask
uint32_t m_StatusMask
Definition: LArRodDecoder.h:238
LArRodDecoder::m_febId1
unsigned int m_febId1
Definition: LArRodDecoder.h:224
LArFebHeader::SetBCId
void SetBCId(const uint16_t bcid)
set the Bunch Crossing ID
Definition: LArFebHeader.h:138
LArCalibDigitContainer::setDelayScale
void setDelayScale(const double scale)
set delay scale
Definition: LArCalibDigitContainer.h:30
Pythia8_A14_NNPDF23LO_Var1Down_Common.ver
ver
Definition: Pythia8_A14_NNPDF23LO_Var1Down_Common.py:26
LArCalibDigitContainer
Container class for LArCalibDigit.
Definition: LArCalibDigitContainer.h:19
LArRodBlockPhysicsV6.h
LArRodDecoder::makeBlockStructure
std::unique_ptr< LArRodBlockStructure > makeBlockStructure(unsigned int rodBlockType, unsigned int rodMinorVersion) const
Definition: LArRodDecoder.cxx:914
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:1963
LArAccumulatedDigit
Data class for ADC samples and autocorr preprocessed by the DSP.
Definition: LArAccumulatedDigit.h:32
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
LArOnOffIdMapping.h
LArRodBlockStructure::getDspEventCounter
virtual int32_t getDspEventCounter() const
Definition: LArRodBlockStructure.cxx:264
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
LArFebHeader::SetFebELVL1Id
void SetFebELVL1Id(const uint16_t elvl1Id)
set the FEB Event ID
Definition: LArFebHeader.h:178
LArDigit
Liquid Argon digit base class.
Definition: LArDigit.h:25
LArRodBlockAccumulatedV3.h
eformat::ROBFragment
Definition: L1CaloBsDecoderUtil.h:12
lumiFormat.i
int i
Definition: lumiFormat.py:85
LArRawChannel
Liquid Argon ROD output object base class.
Definition: LArRawChannel.h:40
ReadCellNoiseFromCool.chan
chan
Definition: ReadCellNoiseFromCool.py:52
LArOnlineID_Base::channelInSlotMax
int channelInSlotMax(const HWIdentifier Id) const
Return the Maximum channel number of a given feb slot.
Definition: LArOnlineID_Base.cxx:287
beamspotman.n
n
Definition: beamspotman.py:731
LArRodBlockPhysicsV3.h
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
LArRodBlockStructure::canSetCalibration
virtual bool canSetCalibration()
Definition: LArRodBlockStructure.h:99
LArFebHeader::SetRunNumber
void SetRunNumber(const uint32_t runNumber)
set the run number
Definition: LArFebHeader.h:130
LArCalibParams::isPulsed
bool isPulsed(const unsigned event, const HWIdentifier calibLineID) const
Definition: LArCalibParams.cxx:151
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:1565
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
LArRodDecoder::~LArRodDecoder
virtual ~LArRodDecoder()
Destructor.
Definition: LArRodDecoder.cxx:67
LArRodBlockStructure::hasControlWords
virtual uint32_t hasControlWords() const
Definition: LArRodBlockStructure.h:126
LArRodBlockStructure::getFEBID
uint32_t getFEBID() const
Definition: LArRodBlockStructure.h:297
delay
double delay(std::size_t d)
Definition: JetTrigTimerTest.cxx:14
LArFebHeader::SetDspCodeVersion
void SetDspCodeVersion(const uint32_t codeVersion)
set the version of the DSP code
Definition: LArFebHeader.h:170
LArRodDecoder::m_febId2
unsigned int m_febId2
Definition: LArRodDecoder.h:224
LArFebHeader::SetRodResults2Size
void SetRodResults2Size(const uint16_t size)
Definition: LArFebHeader.h:144
LArFebHeader::SetOnlineChecksum
void SetOnlineChecksum(const uint32_t checksum)
Definition: LArFebHeader.h:156
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:1329
LArRodDecoder::m_vBEPreselection
std::vector< int > m_vBEPreselection
Definition: LArRodDecoder.h:235
LArFebHeader::SetDspEventCounter
void SetDspEventCounter(const uint32_t eventCounter)
set the Event number counted by the DSP code
Definition: LArFebHeader.h:174
integrator_ascii2db.dac
dac
Definition: integrator_ascii2db.py:126
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
LArCalibParams::DAC
unsigned DAC(const unsigned event, const HWIdentifier calibLineID) const
Definition: LArCalibParams.cxx:131
LArRodBlockStructure::nextFEB
bool nextFEB()
Definition: LArRodBlockStructure.h:497
LArRodDecoder::fillCollection
void fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, LArRawChannelContainer &coll, const CaloGain::CaloGain gain) const
Definition: LArRodDecoder.cxx:228
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
LArCalibDigit
Base class for LArDigits taken during calibration runs.
Definition: LArCalibDigit.h:29
LArRodBlockTransparentV0.h
LArFebHeader::SetSourceId
void SetSourceId(const uint32_t sourceID)
set the source Id
Definition: LArFebHeader.h:126
AtlCoolConsole.tool
tool
Definition: AtlCoolConsole.py:453
LArCalibParams::Delay
unsigned Delay(const unsigned event, const HWIdentifier calibLineID) const
Definition: LArCalibParams.cxx:112
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
LArRodDecoder::m_LArCellEthreshold
float m_LArCellEthreshold
Definition: LArRodDecoder.h:221
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
LArRodBlockStructure::getResults2Size
virtual uint16_t getResults2Size() const
Definition: LArRodBlockStructure.cxx:253
CaloGain::CaloGain
CaloGain
Definition: CaloGain.h:11
LArFebHeader::SetRodResults1Size
void SetRodResults1Size(const uint16_t size)
set the ROD block sizes
Definition: LArFebHeader.h:142
LArFebHeader::SetFebCtrl2
void SetFebCtrl2(const uint16_t ctrl2)
set the FEB Control Word #2
Definition: LArFebHeader.h:190
LArNewCalib_Delay_OFC_Cali.FT
FT
Definition: LArNewCalib_Delay_OFC_Cali.py:124
LArRodBlockStructure.h
DeMoScan.index
string index
Definition: DeMoScan.py:364
LArCalibParams.h
LArRodDecoder::prepareBlockStructure
LArRodBlockStructure * prepareBlockStructure(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, const uint32_t *p, uint32_t n, const CaloGain::CaloGain RequestedGain) const
Definition: LArRodDecoder.cxx:872
LArFebHeader::SetNbSamples
void SetNbSamples(const uint16_t n)
Definition: LArFebHeader.h:154
LArFebHeader::SetFebSCA
void SetFebSCA(const uint16_t sca)
set the SCA's
Definition: LArFebHeader.h:202
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
LArRodBlockStructure::getNextRawData
virtual int getNextRawData(int &channelNumber, std::vector< short > &samples, uint32_t &gain)
Definition: LArRodBlockStructure.cxx:88
LArRodBlockStructure::getCtrl3
virtual uint16_t getCtrl3(uint32_t adc) const
Definition: LArRodBlockStructure.cxx:250
LArRodBlockStructure::getStatus
virtual uint32_t getStatus() const
Definition: LArRodBlockStructure.cxx:251
LArFebHeader::SetFebCtrl3
void SetFebCtrl3(const uint16_t ctrl3)
set the FEB Control Word #3
Definition: LArFebHeader.h:194
LArRodBlockStructure::getCtrl1
virtual uint16_t getCtrl1(uint32_t adc) const
Definition: LArRodBlockStructure.cxx:248
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
LArFebHeader::SetNbSweetCells2
void SetNbSweetCells2(const uint16_t n)
Definition: LArFebHeader.h:152
LArRodBlockStructure::setFragment
bool setFragment(const uint32_t *p, uint32_t n)
Definition: LArRodBlockStructure.h:252
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
LArRodBlockStructure::getDelay
virtual uint16_t getDelay() const
Definition: LArRodBlockStructure.h:474
LArRodBlockStructure::hasCalibBlock
virtual uint32_t hasCalibBlock() const
Definition: LArRodBlockStructure.h:122
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
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
LArRodBlockStructure::onlineCheckSum
virtual uint32_t onlineCheckSum() const
Definition: LArRodBlockStructure.cxx:155
merge.status
status
Definition: merge.py:17
LArRodDecoder::m_requiredPhysicsNSamples
unsigned short m_requiredPhysicsNSamples
Definition: LArRodDecoder.h:250
LArRodBlockStructure::getPulsed
virtual bool getPulsed(unsigned channelNumber) const
Definition: LArRodBlockStructure.h:462
ATLAS_NOT_THREAD_SAFE
StatusCode LArRodDecoder::initialize ATLAS_NOT_THREAD_SAFE()
Install fatal handler with default options.
Definition: LArRodDecoder.cxx:75
LArFebHeader::SetFebBCId
void SetFebBCId(const uint16_t bcid)
set the FEB Bunch Crossing ID
Definition: LArFebHeader.h:182
AthAlgTool
Definition: AthAlgTool.h:26
LArFebHeader::SetFebCtrl1
void SetFebCtrl1(const uint16_t ctrl1)
set the FEB Control Word #1
Definition: LArFebHeader.h:186
LArRodDecoder::prepareBlockStructure1
LArRodBlockStructure * prepareBlockStructure1(const uint16_t rodMinorVersion, const uint32_t robBlockType) const
Definition: LArRodDecoder.cxx:838
LArRodDecoder::m_firstSample
int m_firstSample
Definition: LArRodDecoder.h:226
LArCalibLineMapping.h
LArFebHeader::SetDetEventType
void SetDetEventType(const uint32_t detEvType)
set the Detector event type ID
Definition: LArFebHeader.h:166
LArAccumulatedCalibDigitContainer
Container class for LArAccumulatedCalibDigit.
Definition: LArAccumulatedCalibDigitContainer.h:25
LArRodBlockStructure::getResults1Size
virtual uint16_t getResults1Size() const
Definition: LArRodBlockStructure.cxx:252
LArFebHeader::SetRodStatus
void SetRodStatus(const uint32_t status)
set the ROD Status
Definition: LArFebHeader.h:198
LArFebHeader::SetNbSweetCells1
void SetNbSweetCells1(const uint16_t n)
set the number of samples and cells above thresholds
Definition: LArFebHeader.h:150
LArRodBlockCalibrationV1.h
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
LArOnOffIdMapping::isOnlineConnected
bool isOnlineConnected(const HWIdentifier &sid) const
Test whether a HWIdentifier is connected of not (inline)
Definition: LArOnOffIdMapping.h:121
LArRodBlockCalibrationV0.h
LArFebHeader::SetOfflineChecksum
void SetOfflineChecksum(const uint32_t checksum)
Definition: LArFebHeader.h:158
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:1400
LArRawChannelContainer
Container for LArRawChannel (IDC using LArRawChannelCollection)
Definition: LArRawChannelContainer.h:26
LArRodBlockStructure::setFirstSample
void setFirstSample(const int rearrangeFirstSample)
Definition: LArRodBlockStructure.h:168
LArOnOffIdMapping
Definition: LArOnOffIdMapping.h:20
LArRodBlockCalibrationV3.h