CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
HcalUnpacker Class Reference

#include <HcalUnpacker.h>

Classes

struct  Collections
 

Public Member Functions

 HcalUnpacker (int sourceIdOffset, int beg, int end)
 for normal data More...
 
 HcalUnpacker (int sourceIdOffset)
 For histograms, no begin and end. More...
 
void setExpectedOrbitMessageTime (int time)
 
void setMode (int mode)
 
void unpack (const FEDRawData &raw, const HcalElectronicsMap &emap, std::vector< HcalHistogramDigi > &histoDigis)
 
void unpack (const FEDRawData &raw, const HcalElectronicsMap &emap, Collections &conts, HcalUnpackerReport &report, bool silent=false)
 

Private Member Functions

void unpackUMNio (const FEDRawData &raw, int slot, Collections &colls)
 
void unpackUTCA (const FEDRawData &raw, const HcalElectronicsMap &emap, Collections &conts, HcalUnpackerReport &report, bool silent=false)
 
void unpackVME (const FEDRawData &raw, const HcalElectronicsMap &emap, Collections &conts, HcalUnpackerReport &report, bool silent=false)
 

Private Attributes

int endSample_
 last sample from fed raw data to copy (if present) More...
 
int expectedOrbitMessageTime_
 Expected orbit bunch time (needed to evaluate time differences) More...
 
int mode_
 
int sourceIdOffset_
 number to subtract from the source id to get the dcc id More...
 
int startSample_
 first sample from fed raw data to copy More...
 
std::set< HcalElectronicsIdunknownIds_
 
std::set< HcalElectronicsIdunknownIdsTrig_
 Recorded to limit number of times a log message is generated. More...
 

Detailed Description

Definition at line 21 of file HcalUnpacker.h.

Constructor & Destructor Documentation

HcalUnpacker::HcalUnpacker ( int  sourceIdOffset,
int  beg,
int  end 
)
inline

for normal data

Definition at line 42 of file HcalUnpacker.h.

42 : sourceIdOffset_(sourceIdOffset), startSample_(beg), endSample_(end), expectedOrbitMessageTime_(-1), mode_(0) { }
int sourceIdOffset_
number to subtract from the source id to get the dcc id
Definition: HcalUnpacker.h:55
int endSample_
last sample from fed raw data to copy (if present)
Definition: HcalUnpacker.h:57
int startSample_
first sample from fed raw data to copy
Definition: HcalUnpacker.h:56
int expectedOrbitMessageTime_
Expected orbit bunch time (needed to evaluate time differences)
Definition: HcalUnpacker.h:58
#define end
Definition: vmac.h:37
HcalUnpacker::HcalUnpacker ( int  sourceIdOffset)
inline

For histograms, no begin and end.

Definition at line 44 of file HcalUnpacker.h.

44 : sourceIdOffset_(sourceIdOffset), startSample_(-1), endSample_(-1), expectedOrbitMessageTime_(-1), mode_(0) { }
int sourceIdOffset_
number to subtract from the source id to get the dcc id
Definition: HcalUnpacker.h:55
int endSample_
last sample from fed raw data to copy (if present)
Definition: HcalUnpacker.h:57
int startSample_
first sample from fed raw data to copy
Definition: HcalUnpacker.h:56
int expectedOrbitMessageTime_
Expected orbit bunch time (needed to evaluate time differences)
Definition: HcalUnpacker.h:58

Member Function Documentation

void HcalUnpacker::setExpectedOrbitMessageTime ( int  time)
inline

Definition at line 45 of file HcalUnpacker.h.

References expectedOrbitMessageTime_, edmIntegrityCheck::report, ntuplemaker::time, and unpack().

Referenced by HcalRawToDigi::HcalRawToDigi().

int expectedOrbitMessageTime_
Expected orbit bunch time (needed to evaluate time differences)
Definition: HcalUnpacker.h:58
void HcalUnpacker::setMode ( int  mode)
inline
void HcalUnpacker::unpack ( const FEDRawData raw,
const HcalElectronicsMap emap,
std::vector< HcalHistogramDigi > &  histoDigis 
)

Definition at line 816 of file HcalUnpacker.cc.

References HcalHTRData::check(), FEDRawData::data(), DetId::det(), runTauDisplay::eid, f, benchmark_cfg::fc, HcalHistogramDigi::getArray(), HcalHTRData::getHistogramFibers(), HcalDCCHeader::getSourceId(), HcalDCCHeader::getSpigotData(), HcalDCCHeader::getSpigotPresent(), HcalHTRData::getSubmodule(), DetId::Hcal, HcalHTRData::isHistogramEvent(), HcalElectronicsMap::lookup(), DetId::null(), HcalElectronicsId::setHTR(), FEDRawData::size(), HcalDCCHeader::SPIGOT_COUNT, DetId::subdetId(), and HcalHTRData::unpackHistogram().

Referenced by HcalHistogramRawToDigi::produce(), HcalRawToDigi::produce(), and setExpectedOrbitMessageTime().

816  {
817 
818  // get the DCC header
819  const HcalDCCHeader* dccHeader=(const HcalDCCHeader*)(raw.data());
820  int dccid=dccHeader->getSourceId()-sourceIdOffset_;
821 
822  // check the summary status
823 
824  // walk through the HTR data...
825  HcalHTRData htr;
826  for (int spigot=0; spigot<HcalDCCHeader::SPIGOT_COUNT; spigot++) {
827  if (!dccHeader->getSpigotPresent(spigot)) continue;
828 
829  int retval=dccHeader->getSpigotData(spigot,htr,raw.size());
830  // check
831  if (retval || !htr.check()) {
832  edm::LogWarning("Invalid Data") << "Invalid HTR data observed on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
833  continue;
834  }
835  if (!htr.isHistogramEvent()) {
836  edm::LogWarning("Invalid Data") << "Non-histogram data passed to histogram unpacker on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
837  continue;
838  }
839 
840  unsigned int smid=htr.getSubmodule();
841  int htr_tb=smid&0x1;
842  int htr_slot=(smid>>1)&0x1F;
843  int htr_cr=(smid>>6)&0x1F;
844 
845  // find out the fibers
846  int f[2],fc;
847  htr.getHistogramFibers(f[0],f[1]);
848 
849  for (int nf=0; nf<2; nf++) {
850  if (f[nf]<0 || (nf==1 && f[0]==f[1])) continue; // skip if invalid or the same
851  for (fc=0; fc<=2; fc++) {
852  HcalElectronicsId eid(fc,f[nf],spigot,dccid);
853  eid.setHTR(htr_cr,htr_slot,htr_tb);
854  DetId did=emap.lookup(eid);
855 
856  if (did.null() || did.det()!=DetId::Hcal || did.subdetId()==0) {
857  if (unknownIds_.find(eid)==unknownIds_.end()) {
858  edm::LogWarning("HCAL") << "HcalHistogramUnpacker: No match found for electronics id :" << eid;
859  unknownIds_.insert(eid);
860  }
861  continue;
862  }
863  histoDigis.push_back(HcalHistogramDigi(HcalDetId(did))); // add it!
864  HcalHistogramDigi& digi=histoDigis.back();
865 
866  // unpack the four capids
867  for (int capid=0; capid<4; capid++)
868  htr.unpackHistogram(f[nf],fc,capid,digi.getArray(capid));
869 
870  }
871  }
872  }
873 }
std::set< HcalElectronicsId > unknownIds_
Definition: HcalUnpacker.h:60
int sourceIdOffset_
number to subtract from the source id to get the dcc id
Definition: HcalUnpacker.h:55
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event...
Definition: HcalHTRData.cc:62
void getHistogramFibers(int &a, int &b) const
Get the fiber numbers for the data present in this event (only in histogram mode!) ...
Definition: HcalHTRData.cc:413
int getSpigotData(int nspigot, HcalHTRData &decodeTool, int validSize) const
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
bool unpackHistogram(int fiber, int fiberchan, int capid, unsigned short *histogram) const
Unpack special histogramming mode data.
Definition: HcalHTRData.cc:441
double f[11][100]
bool getSpigotPresent(unsigned int nspigot) const
Read the "PRESENT" bit for this spigot.
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
int getSourceId() const
Definition: HcalDCCHeader.h:32
Definition: DetId.h:18
bool null() const
is this a null id ?
Definition: DetId.h:45
static const int SPIGOT_COUNT
Definition: HcalDCCHeader.h:19
uint16_t * getArray(int capid)
get the array for the specified capid
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
unsigned int getSubmodule() const
Get the HTR submodule number.
Definition: HcalHTRData.cc:331
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
Definition: HcalHTRData.cc:385
void HcalUnpacker::unpack ( const FEDRawData raw,
const HcalElectronicsMap emap,
Collections conts,
HcalUnpackerReport report,
bool  silent = false 
)

Definition at line 174 of file HcalUnpacker.cc.

References HcalDCCHeader::BOEshouldBeZeroAlways(), FEDRawData::data(), and FEDRawData::size().

175  {
176 
177  if (raw.size()<16) {
178  if (!silent) edm::LogWarning("Invalid Data") << "Empty/invalid data, size = " << raw.size();
179  return;
180  }
181 
182  // get the DCC header
183  const HcalDCCHeader* dccHeader=(const HcalDCCHeader*)(raw.data());
184 
185  if (dccHeader->BOEshouldBeZeroAlways()==0) // also includes uTCA before the common AMC13XG firmware
186  unpackVME(raw,emap,colls,report,silent);
187  else unpackUTCA(raw,emap,colls,report,silent);
188 }
void unpackUTCA(const FEDRawData &raw, const HcalElectronicsMap &emap, Collections &conts, HcalUnpackerReport &report, bool silent=false)
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
void unpackVME(const FEDRawData &raw, const HcalElectronicsMap &emap, Collections &conts, HcalUnpackerReport &report, bool silent=false)
short BOEshouldBeZeroAlways() const
Definition: HcalDCCHeader.h:50
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
void HcalUnpacker::unpackUMNio ( const FEDRawData raw,
int  slot,
Collections colls 
)
private

Definition at line 875 of file HcalUnpacker.cc.

References hcal::AMC13Header::AMCPayload(), hcal::AMC13Header::AMCSize(), hcal::AMC13Header::AMCSlot(), FEDRawData::data(), data, hcal::AMC13Header::NAMC(), and HcalUnpacker::Collections::umnio.

Referenced by setMode().

875  {
876  const hcal::AMC13Header* amc13=(const hcal::AMC13Header*)(raw.data());
877  int namc=amc13->NAMC();
878  //Find AMC corresponding to uMNio slot
879  for (int iamc=0; iamc<namc; iamc++) {
880  if (amc13->AMCSlot(iamc) == slot) namc = iamc;
881  }
882  if (namc==amc13->NAMC()) {
883  return;
884  }
885  const uint16_t* data = (const uint16_t*)(amc13->AMCPayload(namc));
886  size_t nwords = amc13->AMCSize(namc) * ( sizeof(uint64_t) / sizeof(uint16_t) );
887  *(colls.umnio) = HcalUMNioDigi(data, nwords);
888 
889 }
int AMCSize(int i) const
Definition: AMC13Header.h:37
unsigned long long uint64_t
Definition: Time.h:15
int NAMC() const
Definition: AMC13Header.h:25
int AMCSlot(int i) const
Definition: AMC13Header.h:33
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const uint64_t * AMCPayload(int i) const
Definition: AMC13Header.cc:4
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
void HcalUnpacker::unpackUTCA ( const FEDRawData raw,
const HcalElectronicsMap emap,
Collections conts,
HcalUnpackerReport report,
bool  silent = false 
)
private

Definition at line 550 of file HcalUnpacker.cc.

References HcalDataFrameContainer< Digi >::addDataFrame(), hcal::AMC13Header::AMCCRCOk(), hcal::AMC13Header::AMCDataPresent(), hcal::AMC13Header::AMCEnabled(), hcal::AMC13Header::AMCId(), hcal::AMC13Header::AMCPayload(), hcal::AMC13Header::AMCSegmented(), hcal::AMC13Header::AMCSize(), hcal::AMC13Header::AMCSlot(), HcalUnpacker::Collections::calibCont, DetId::Calo, HcalUHTRData::const_iterator::channelid(), HcalUnpackerReport::countSpigotFormatError(), HcalUnpackerReport::countUnmappedDigi(), HcalUnpackerReport::countUnmappedTPDigi(), gather_cfg::cout, FEDRawData::data(), DetId::det(), runTauDisplay::eid, HcalUHTRData::const_iterator::flavor(), HcalUnpacker::Collections::hbheCont, DetId::Hcal, HcalBarrel, HcalCalibration, HcalEmpty, HcalEndcap, HcalForward, HcalOther, HcalOuter, HcalUnpacker::Collections::hfCont, HcalUnpacker::Collections::hoCont, mps_fire::i, hcalTTPDigis_cfi::id, HcalUHTRData::const_iterator::isHeader(), HcalElectronicsMap::lookup(), HcalElectronicsMap::lookupTrigger(), hcal::AMC13Header::NAMC(), DetId::null(), HcalUnpacker::Collections::qie10, HcalUnpacker::Collections::qie10ZDC, HcalUnpacker::Collections::qie11, HcalUHTRData::const_iterator::raw(), HcalDataFrameContainer< Digi >::samples(), HcalUHTRData::const_iterator::soi(), hcal::AMC13Header::sourceId(), HcalOtherDetId::subdet(), HcalZDCDetId::SubdetectorId, DetId::subdetId(), HcalUnpacker::Collections::tpCont, HcalTrigTowerDetId::Undefined, HcalUHTRData::const_iterator::value(), and HcalUnpacker::Collections::zdcCont.

Referenced by setMode().

551  {
552 
553  const hcal::AMC13Header* amc13=(const hcal::AMC13Header*)(raw.data());
554 
555  // how many AMC in this packet
556  int namc=amc13->NAMC();
557  for (int iamc=0; iamc<namc; iamc++) {
558  // if not enabled, ignore
559  if (!amc13->AMCEnabled(iamc)) continue;
560 
561  if (!amc13->AMCDataPresent(iamc)) {
562  if (!silent)
563  edm::LogWarning("Invalid Data") << "Missing data observed on iamc " << iamc << " of AMC13 with source id " << amc13->sourceId();
564  report.countSpigotFormatError();
565  continue;
566  }
567  if (!amc13->AMCCRCOk(iamc)) {
568  if (!silent)
569  edm::LogWarning("Invalid Data") << "CRC Error on uHTR data observed on iamc " << iamc << " of AMC13 with source id " << amc13->sourceId();
570  report.countSpigotFormatError();
571  // continue;
572  }
573  // this unpacker cannot handle segmented data!
574  if (amc13->AMCSegmented(iamc)) {
575  if (!silent)
576  edm::LogWarning("Invalid Data") << "Unpacker cannot handle segmented data observed on iamc " << iamc << " of AMC13 with source id " << amc13->sourceId();
577  report.countSpigotFormatError();
578  continue;
579  }
580 
581  // ok, now we're work-able
582  int slot=amc13->AMCSlot(iamc);
583  int crate=amc13->AMCId(iamc)&0xFF;
584  // this is used only for the 1.6 Gbps link data
585  int nps=(amc13->AMCId(iamc)>>12)&0xF;
586 
587  HcalUHTRData uhtr(amc13->AMCPayload(iamc),amc13->AMCSize(iamc));
588  //Check to make sure uMNio is not unpacked here
589  if(uhtr.getFormatVersion() != 1) {
590  unpackUMNio(raw, slot, colls);
591  }
592 #ifdef DebugLog
593  //debug printouts
594  int nwords=uhtr.getRawLengthBytes()/2;
595  for (int iw=0; iw<nwords; iw++)
596  printf("%04d %04x\n",iw,uhtr.getRawData16()[iw]);
597 #endif
598 
599  //use uhtr presamples since amc header not properly packed in simulation
600  nps = uhtr.presamples();
601  HcalUHTRData::const_iterator i=uhtr.begin(), iend=uhtr.end();
602  while (i!=iend) {
603 #ifdef DebugLog
604  std::cout << "This data is flavored:" << i.flavor() << std::endl;
605 #endif
606 
607  if (!i.isHeader()) {
608  ++i;
609 #ifdef DebugLog
610  std::cout << "its not a header" << std::endl;
611 #endif
612  continue;
613  }
615  if (i.flavor() == 1 || i.flavor() == 0) {
616  int ifiber=((i.channelid()>>3)&0x1F);
617  int ichan=(i.channelid()&0x7);
618  HcalElectronicsId eid(crate,slot,ifiber,ichan, false);
619  DetId did=emap.lookup(eid);
620  // Count from current position to next header, or equal to end
621  const uint16_t* head_pos = i.raw();
622  int ns = 0;
623  for (++i; i != iend && !i.isHeader(); ++i) {
624  ns++;
625  }
626  // Check QEI11 container exists
627  if (colls.qie11 == 0) {
628  colls.qie11 = new QIE11DigiCollection(ns);
629  }
630  else if (colls.qie11->samples() != ns) {
631  // This is horrible
632  edm::LogError("Invalid Data") << "Collection has " << colls.qie11->samples() << " samples per digi, raw data has " << ns << "!";
633  return;
634  }
635 
636  // Insert data
638  if (!did.null()) { // unpack and store...
639  colls.qie11->addDataFrame(did, head_pos);
640  } else {
641  report.countUnmappedDigi(eid);
642  if (unknownIds_.find(eid)==unknownIds_.end()) {
643  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
644  unknownIds_.insert(eid);
645 #ifdef DebugLog
646  std::cout << "HcalUnpacker: No match found for electronics id :" << eid << std::endl;
647 #endif
648  }
649 #ifdef DebugLog
650  std::cout << "OH NO! detector id is null!" << std::endl;
651 #endif
652  }
653  } else if (i.flavor() == 2){
655 
656  int ifiber=((i.channelid()>>3)&0x1F);
657  int ichan=(i.channelid()&0x7);
658  HcalElectronicsId eid(crate,slot,ifiber,ichan, false);
659  DetId did=emap.lookup(eid);
660 
661  // Count from current position to next header, or equal to end
662  const uint16_t* head_pos = i.raw();
663  int ns = 0;
664  for (++i; i != iend && !i.isHeader(); ++i) {
665  ns++;
666  }
667 
668  // Check QEI10 container exists
669  if (colls.qie10ZDC == 0) {
670  colls.qie10ZDC = new QIE10DigiCollection(ns);
671  }
672  else if (colls.qie10ZDC->samples() != ns) {
673  // This is horrible
674  edm::LogError("Invalid Data") << "Collection has " << colls.qie10ZDC->samples() << " samples per digi, raw data has " << ns << "!";
675  return;
676  }
677 
678  if (colls.qie10 == 0) {
679  colls.qie10 = new QIE10DigiCollection(ns);
680  }
681  else if (colls.qie10->samples() != ns) {
682  // This is horrible
683  edm::LogError("Invalid Data") << "Collection has " << colls.qie10->samples() << " samples per digi, raw data has " << ns << "!";
684  return;
685  }
686 
687  // Insert data
689  if (!did.null() && did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) { // unpack and store...
690  colls.qie10ZDC->addDataFrame(did, head_pos);
691  }
692  else if (!did.null()) { // unpack and store...
693  colls.qie10->addDataFrame(did, head_pos);
694  } else {
695  report.countUnmappedDigi(eid);
696  if (unknownIds_.find(eid)==unknownIds_.end()) {
697  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
698  unknownIds_.insert(eid);
699 #ifdef DebugLog
700  std::cout << "HcalUnpacker: No match found for electronics id :" << eid << std::endl;
701 #endif
702  }
703 #ifdef DebugLog
704  std::cout << "OH NO! HcalUnpacker: No match found for electronics id :" << eid << std::endl;
705 #endif
706  }
707  }
708  else if (i.flavor()==0x5) { // Old-style digis
709  int ifiber=((i.channelid()>>2)&0x1F);
710  int ichan=(i.channelid()&0x3);
711  HcalElectronicsId eid(crate,slot,ifiber,ichan, false);
712  DetId did=emap.lookup(eid);
713 
714  if (!did.null()) { // unpack and store...
715  if (did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) {
716  colls.zdcCont->push_back(ZDCDataFrame(HcalZDCDetId(did)));
717  HcalUnpacker_impl::unpack_compact<ZDCDataFrame>(i,iend, colls.zdcCont->back(), nps, eid, startSample_, endSample_);
718  } else if (did.det()==DetId::Hcal) {
719  switch (((HcalSubdetector)did.subdetId())) {
720  case (HcalBarrel):
721  case (HcalEndcap): {
722  colls.hbheCont->push_back(HBHEDataFrame(HcalDetId(did)));
723  HcalUnpacker_impl::unpack_compact<HBHEDataFrame>(i, iend, colls.hbheCont->back(), nps, eid, startSample_, endSample_);
724  } break;
725  case (HcalOuter): {
726  colls.hoCont->push_back(HODataFrame(HcalDetId(did)));
727  HcalUnpacker_impl::unpack_compact<HODataFrame>(i, iend, colls.hoCont->back(), nps, eid, startSample_, endSample_);
728  } break;
729  case (HcalForward): {
730  colls.hfCont->push_back(HFDataFrame(HcalDetId(did)));
731  HcalUnpacker_impl::unpack_compact<HFDataFrame>(i, iend, colls.hfCont->back(), nps, eid, startSample_, endSample_);
732  } break;
733  case (HcalOther) : {
734  HcalOtherDetId odid(did);
735  if (odid.subdet()==HcalCalibration) {
736  colls.calibCont->push_back(HcalCalibDataFrame(HcalCalibDetId(did)));
737  HcalUnpacker_impl::unpack_compact<HcalCalibDataFrame>(i, iend, colls.calibCont->back(), nps, eid, startSample_, endSample_);
738  }
739  } break;
740  case (HcalEmpty):
741  default: {
742  for (++i;
743  i!=iend && !i.isHeader();
744  ++i);
745  }
746  break;
747  }
748  }
749  } else {
750  report.countUnmappedDigi(eid);
751  if (unknownIds_.find(eid)==unknownIds_.end()) {
752  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
753  unknownIds_.insert(eid);
754  }
755  for (++i;
756  i!=iend && !i.isHeader();
757  ++i);
758  }
759  } else if (i.flavor()==0x4) { // TP digis
760  int ilink=((i.channelid()>>4)&0xF);
761  int itower=(i.channelid()&0xF);
762  HcalElectronicsId eid(crate,slot,ilink,itower,true);
763  DetId did=emap.lookupTrigger(eid);
764 #ifdef DebugLog
765  std::cout << "Unpacking " << eid << " " << i.channelid() << std::endl;
766 #endif
767  if (did.null()) {
768  report.countUnmappedTPDigi(eid);
769  if (unknownIdsTrig_.find(eid)==unknownIdsTrig_.end()) {
770  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No trigger primitive match found for electronics id :" << eid;
771  unknownIdsTrig_.insert(eid);
772  }
773  // Skip it
774  for (++i; i!=iend && !i.isHeader(); ++i);
775  } else if (did==HcalTrigTowerDetId::Undefined ||
776  (did.det()==DetId::Hcal && did.subdetId()==0)) {
777  for (++i; i!=iend && !i.isHeader(); ++i);
778  } else {
779  HcalTrigTowerDetId id(did);
780 #ifdef DebugLog
781  std::cout << "Unpacking " << id << std::endl;
782 #endif
783  colls.tpCont->push_back(HcalTriggerPrimitiveDigi(id));
784  int j=0;
785  for (++i; i!=iend && !i.isHeader(); ++i) {
786  colls.tpCont->back().setSample(j,i.value());
787  if (i.soi()) colls.tpCont->back().setPresamples(j);
788  j++;
789  }
790  colls.tpCont->back().setSize(j);
791  }
792  } else {
793  // consume any not-understood channel data
794  for (++i;
795  i!=iend && !i.isHeader();
796  ++i);
797  }
798  }
799  }
800 }
std::set< HcalElectronicsId > unknownIds_
Definition: HcalUnpacker.h:60
int endSample_
last sample from fed raw data to copy (if present)
Definition: HcalUnpacker.h:57
int startSample_
first sample from fed raw data to copy
Definition: HcalUnpacker.h:56
int AMCSize(int i) const
Definition: AMC13Header.h:37
HcalDataFrameContainer< QIE10DataFrame > QIE10DigiCollection
bool AMCDataPresent(int i) const
Definition: AMC13Header.h:47
HcalSubdetector
Definition: HcalAssistant.h:31
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::set< HcalElectronicsId > unknownIdsTrig_
Recorded to limit number of times a log message is generated.
Definition: HcalUnpacker.h:60
HcalDataFrameContainer< QIE11DataFrame > QIE11DigiCollection
Definition: DetId.h:18
static const int SubdetectorId
Definition: HcalZDCDetId.h:25
int sourceId() const
Definition: AMC13Header.h:15
bool null() const
is this a null id ?
Definition: DetId.h:45
static const HcalTrigTowerDetId Undefined
bool AMCSegmented(int i) const
Definition: AMC13Header.h:41
int NAMC() const
Definition: AMC13Header.h:25
int AMCSlot(int i) const
Definition: AMC13Header.h:33
const uint64_t * AMCPayload(int i) const
Definition: AMC13Header.cc:4
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
bool AMCCRCOk(int i) const
Definition: AMC13Header.h:45
const DetId lookupTrigger(HcalElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
bool AMCEnabled(int i) const
Definition: AMC13Header.h:51
void unpackUMNio(const FEDRawData &raw, int slot, Collections &colls)
uint16_t AMCId(int i) const
Definition: AMC13Header.h:31
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
const uint16_t * raw() const
Definition: HcalUHTRData.h:66
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
void HcalUnpacker::unpackVME ( const FEDRawData raw,
const HcalElectronicsMap emap,
Collections conts,
HcalUnpackerReport report,
bool  silent = false 
)
private

work through the samples

branch point between 2006-2011 data format and 2012+ data format

work through the samples

Definition at line 195 of file HcalUnpacker.cc.

References HcalUnpacker::Collections::calibCont, DetId::Calo, HcalHTRData::check(), HOUnrolledTP::checked, HcalUnpackerReport::countBusySpigot(), HcalUnpackerReport::countEmptyEventSpigot(), HcalUnpackerReport::countOFWSpigot(), HcalUnpackerReport::countSpigotFormatError(), HcalUnpackerReport::countUnmappedDigi(), HcalUnpackerReport::countUnmappedTPDigi(), FEDRawData::data(), HcalHTRData::dataPointers(), DetId::det(), runTauDisplay::eid, benchmark_cfg::fc, HcalQIESample::fiber(), HcalQIESample::fiberAndChan(), HcalQIESample::fiberChan(), HcalHTRData::FORMAT_VERSION_COMPACT_DATA, HcalDCCHeader::getDCCDataFormatVersion(), HcalHTRData::getFirmwareFlavor(), HcalHTRData::getFormatVersion(), HcalHTRData::getNPS(), HcalDTCHeader::getSlotCRCError(), HcalDTCHeader::getSlotData(), HcalDTCHeader::getSlotPresent(), HcalDCCHeader::getSourceId(), HcalDTCHeader::getSourceId(), HcalDCCHeader::getSpigotCRCError(), HcalDCCHeader::getSpigotData(), HcalDCCHeader::getSpigotPresent(), HcalHTRData::getSubmodule(), HcalUnpacker::Collections::hbheCont, DetId::Hcal, HcalBarrel, HcalCalibration, HcalEmpty, HcalEndcap, HcalForward, HcalOther, HcalOuter, HcalUnpacker::Collections::hfCont, HcalUnpacker::Collections::hoCont, mps_fire::i, hcalTTPDigis_cfi::id, HcalDetId::ieta(), HOUnrolledTP::ieta, HcalDetId::iphi(), HOUnrolledTP::iphi, HcalHTRData::is_channel_header(), HcalHTRData::isBusy(), HcalHTRData::isEmptyEvent(), HcalHTRData::isHistogramEvent(), HcalHTRData::isOverflowWarning(), isTPGSOI(), HcalHTRData::isUnsuppressed(), linear(), LogDebug, HcalElectronicsMap::lookup(), HcalElectronicsMap::lookupTrigger(), HcalDTCHeader::MAXIMUM_SLOT, DetId::null(), HcalTriggerPrimitiveSample::raw(), HcalQIESample::raw(), hcalTTPDigis_cfi::samples, HOUnrolledTP::samples, HOUnrolledTP::setbit(), HcalElectronicsId::setHTR(), FEDRawData::size(), slb(), slbAndChan(), slbChan(), HOUnrolledTP::soi, HcalDCCHeader::SPIGOT_COUNT, HcalOtherDetId::subdet(), HcalZDCDetId::SubdetectorId, DetId::subdetId(), HcalUnpacker::Collections::tpCont, HcalUnpacker::Collections::tphoCont, HcalUnpacker::Collections::ttp, HcalTrigTowerDetId::Undefined, HcalTTPUnpacker::unpack(), HcalHTRData::unpack_per_channel_header(), HOUnrolledTP::valid, HcalHTRData::wasMarkAndPassZSTP(), and HcalUnpacker::Collections::zdcCont.

Referenced by setMode().

196  {
197 
198  // get the DCC header
199  const HcalDCCHeader* dccHeader=(const HcalDCCHeader*)(raw.data());
200  const HcalDTCHeader* dtcHeader=(const HcalDTCHeader*)(raw.data());
201  bool is_VME_DCC=(dccHeader->getDCCDataFormatVersion()<0x10) || ((mode_&0x1)==0);
202 
203  int dccid=(is_VME_DCC)?(dccHeader->getSourceId()-sourceIdOffset_):(dtcHeader->getSourceId()-sourceIdOffset_);
204 
205  // check the summary status
206 
207  // walk through the HTR data. For the uTCA, use spigot=slot+1
208  HcalHTRData htr;
209  const unsigned short* daq_first, *daq_last, *tp_first, *tp_last;
210  const HcalQIESample* qie_begin, *qie_end, *qie_work;
211  const HcalTriggerPrimitiveSample *tp_begin, *tp_end, *tp_work;
212  for (int spigot=0; spigot<HcalDCCHeader::SPIGOT_COUNT; spigot++) {
213 
214  if (is_VME_DCC) {
215  if (!dccHeader->getSpigotPresent(spigot)) continue;
216 
217  int retval=dccHeader->getSpigotData(spigot,htr,raw.size());
218  if (retval!=0) {
219  if (retval==-1) {
220  if (!silent) edm::LogWarning("Invalid Data") << "Invalid HTR data (data beyond payload size) observed on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
221  report.countSpigotFormatError();
222  }
223  continue;
224  }
225  // check
226  if (dccHeader->getSpigotCRCError(spigot)) {
227  if (!silent)
228  edm::LogWarning("Invalid Data") << "CRC Error on HTR data observed on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
229  report.countSpigotFormatError();
230  continue;
231  }
232  } else { // is_uTCA (!is_VME_DCC)
233  int slot=spigot+1;
234  if (slot>HcalDTCHeader::MAXIMUM_SLOT) continue;
235 
236  if (!dtcHeader->getSlotPresent(slot)) continue;
237 
238  int retval=dtcHeader->getSlotData(slot,htr,raw.size());
239  if (retval!=0) {
240  if (retval==-1) {
241  if (!silent) edm::LogWarning("Invalid Data") << "Invalid uHTR data (data beyond payload size) observed on slot " << slot << " of DTC with source id " << dtcHeader->getSourceId();
242  report.countSpigotFormatError();
243  }
244  continue;
245  }
246  // check
247  if (dtcHeader->getSlotCRCError(slot)) {
248  if (!silent)
249  edm::LogWarning("Invalid Data") << "CRC Error on uHTR data observed on slot " << slot << " of DTC with source id " << dtcHeader->getSourceId();
250  report.countSpigotFormatError();
251  continue;
252  }
253  }
254 
255 
256  // check for EE
257  if (htr.isEmptyEvent()) {
258  report.countEmptyEventSpigot();
259  }
260  if (htr.isOverflowWarning()) {
261  report.countOFWSpigot();
262  }
263  if (htr.isBusy()) {
264  report.countBusySpigot();
265  }
266  if (!htr.check()) {
267  if (!silent)
268  edm::LogWarning("Invalid Data") << "Invalid HTR data observed on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
269  report.countSpigotFormatError();
270  continue;
271  }
272  if (htr.isHistogramEvent()) {
273  if (!silent) edm::LogWarning("Invalid Data") << "Histogram data passed to non-histogram unpacker on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
274  continue;
275  }
276  if ((htr.getFirmwareFlavor()&0xE0)==0x80) { // some kind of TTP data
277  if (colls.ttp!=0) {
278  HcalTTPUnpacker ttpUnpack;
279  colls.ttp->push_back(HcalTTPDigi());
280  ttpUnpack.unpack(htr,colls.ttp->back());
281  } else {
282  LogDebug("HcalTechTrigProcessor") << "Skipping data on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId() << " which is from the TechTrigProcessor (use separate unpacker!)";
283  }
284  continue;
285  }
286  if (htr.getFirmwareFlavor()>=0x80) {
287  if (!silent) edm::LogWarning("HcalUnpacker") << "Skipping data on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId() << " which is of unknown flavor " << htr.getFirmwareFlavor();
288  continue;
289  }
290 
291  // calculate "real" number of presamples
292  int nps=htr.getNPS()-startSample_;
293 
294  // get pointers
295  htr.dataPointers(&daq_first,&daq_last,&tp_first,&tp_last);
296  unsigned int smid=htr.getSubmodule();
297  int htr_tb=smid&0x1;
298  int htr_slot=(smid>>1)&0x1F;
299  int htr_cr=(smid>>6)&0x1F;
300 
301  tp_begin=(const HcalTriggerPrimitiveSample*)tp_first;
302  tp_end=(const HcalTriggerPrimitiveSample*)(tp_last+1); // one beyond last..
303 
305  int currFiberChan=0x3F; // invalid fiber+channel...
306  int ncurr=0;
307  bool valid=false;
308 
309  bool tpgSOIbitInUse=htr.getFormatVersion()>=3; // version 3 and later
310  bool isHOtpg=htr.getFormatVersion()>=3 && htr.getFirmwareFlavor()==0; // HO is flavor zero
311  int npre=0;
312  /*
313  Unpack the trigger primitives
314  */
315  if (isHOtpg) {
316  HOUnrolledTP unrolled[24];
317  for (tp_work=tp_begin; tp_work!=tp_end; tp_work++) {
318  if (tp_work->raw()==0xFFFF) continue; // filler word
319  int sector=slbChan(tp_work->raw());
320  if (sector>2) continue;
321 
322  for (int ibit=0; ibit<8; ibit++) {
323  int linear=sector*8+ibit;
324  if (!unrolled[linear].checked) {
325  unrolled[linear].checked=true;
326  int fiber=(linear/3)+1;
327  int fc=(linear%3);
328  // electronics id (use precision match for HO TP)
329  HcalElectronicsId eid(fc,fiber,spigot,dccid);
330  eid.setHTR(htr_cr,htr_slot,htr_tb);
331  DetId did=emap.lookup(eid);
332  if (!did.null()) {
333  if (did.det()==DetId::Hcal && ((HcalSubdetector)did.subdetId())==HcalOuter ) {
334  HcalDetId hid(did);
335  unrolled[linear].valid=true;
336  unrolled[linear].ieta=hid.ieta();
337  unrolled[linear].iphi=hid.iphi();
338  }
339  } else {
340  report.countUnmappedTPDigi(eid);
341  }
342  }
343  if (unrolled[linear].valid) {
344  if (isTPGSOI(*tp_work)) unrolled[linear].soi=unrolled[linear].samples;
345  if (tp_work->raw()&(1<<ibit)) unrolled[linear].setbit(unrolled[linear].samples);
346  unrolled[linear].samples++;
347  }
348  }
349  }
350  for (int i=0; i<24; i++) {
351  if (unrolled[i].valid)
352  colls.tphoCont->push_back(HOTriggerPrimitiveDigi(
353  unrolled[i].ieta,
354  unrolled[i].iphi,
355  unrolled[i].samples,
356  unrolled[i].soi,
357  unrolled[i].databits));
358  }
359  } else { // regular TPs (not HO)
360  for (tp_work=tp_begin; tp_work!=tp_end; tp_work++) {
361  if (tp_work->raw()==0xFFFF) continue; // filler word
362  if (slbAndChan(tp_work->raw())!=currFiberChan) { // start new set
363  npre=0;
364  currFiberChan=slbAndChan(tp_work->raw());
365  // lookup the right channel
366  HcalElectronicsId eid(slbChan(tp_work->raw()),slb(tp_work->raw()),spigot,dccid,htr_cr,htr_slot,htr_tb);
367  DetId did=emap.lookupTrigger(eid);
368  if (did.null()) {
369  report.countUnmappedTPDigi(eid);
370  if (unknownIdsTrig_.find(eid)==unknownIdsTrig_.end()) {
371  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No trigger primitive match found for electronics id :" << eid;
372  unknownIdsTrig_.insert(eid);
373  }
374  valid=false;
375  continue;
376  } else if (did==HcalTrigTowerDetId::Undefined ||
377  (did.det()==DetId::Hcal && did.subdetId()==0)) {
378  // known to be unmapped
379  valid=false;
380  continue;
381  }
382  HcalTrigTowerDetId id(did);
383  colls.tpCont->push_back(HcalTriggerPrimitiveDigi(id));
384  // set the various bits
385  if (!tpgSOIbitInUse) colls.tpCont->back().setPresamples(nps);
386  colls.tpCont->back().setZSInfo(htr.isUnsuppressed(),htr.wasMarkAndPassZSTP(slb(tp_work->raw()),slbChan(tp_work->raw())));
387 
388  // no hits recorded for current
389  ncurr=0;
390  valid=true;
391  }
392  // add the word (if within settings or recent firmware [recent firmware ignores startSample/endSample])
393  if (valid && ((tpgSOIbitInUse && ncurr<10) || (ncurr>=startSample_ && ncurr<=endSample_))) {
394  colls.tpCont->back().setSample(colls.tpCont->back().size(),*tp_work);
395  colls.tpCont->back().setSize(colls.tpCont->back().size()+1);
396  }
397  // set presamples,if SOI
398  if (valid && tpgSOIbitInUse && isTPGSOI(*tp_work)) {
399  colls.tpCont->back().setPresamples(ncurr);
400  }
401  ncurr++;
402  npre++;
403  }
404  }
405 
408 
409  qie_begin=(const HcalQIESample*)daq_first;
410  qie_end=(const HcalQIESample*)(daq_last+1); // one beyond last..
411 
413 
414 
415  for (qie_work=qie_begin; qie_work!=qie_end; ) {
416  if (qie_work->raw()==0xFFFF) {
417  qie_work++;
418  continue; // filler word
419  }
420  // always at the beginning ...
421 
422  // lookup the right channel
423  HcalElectronicsId eid(qie_work->fiberChan(),qie_work->fiber(),spigot,dccid);
424  eid.setHTR(htr_cr,htr_slot,htr_tb);
425  DetId did=emap.lookup(eid);
426 
427  if (!did.null()) {
428  if (did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) {
429  colls.zdcCont->push_back(ZDCDataFrame(HcalZDCDetId(did)));
430  qie_work=HcalUnpacker_impl::unpack<ZDCDataFrame>(qie_work, qie_end, colls.zdcCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
431  } else if (did.det()==DetId::Hcal) {
432  switch (((HcalSubdetector)did.subdetId())) {
433  case (HcalBarrel):
434  case (HcalEndcap): {
435  colls.hbheCont->push_back(HBHEDataFrame(HcalDetId(did)));
436  qie_work=HcalUnpacker_impl::unpack<HBHEDataFrame>(qie_work, qie_end, colls.hbheCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
437  } break;
438  case (HcalOuter): {
439  colls.hoCont->push_back(HODataFrame(HcalDetId(did)));
440  qie_work=HcalUnpacker_impl::unpack<HODataFrame>(qie_work, qie_end, colls.hoCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
441  } break;
442  case (HcalForward): {
443  colls.hfCont->push_back(HFDataFrame(HcalDetId(did)));
444  qie_work=HcalUnpacker_impl::unpack<HFDataFrame>(qie_work, qie_end, colls.hfCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
445  } break;
446  case (HcalOther) : {
447  HcalOtherDetId odid(did);
448  if (odid.subdet()==HcalCalibration) {
449  colls.calibCont->push_back(HcalCalibDataFrame(HcalCalibDetId(did)));
450  qie_work=HcalUnpacker_impl::unpack<HcalCalibDataFrame>(qie_work, qie_end, colls.calibCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
451  }
452  } break;
453  case (HcalEmpty):
454  default: {
455  for (int fiberC=qie_work->fiberAndChan();
456  qie_work!=qie_end && qie_work->fiberAndChan()==fiberC;
457  qie_work++);
458  }
459  break;
460  }
461  }
462  } else {
463  report.countUnmappedDigi(eid);
464  if (unknownIds_.find(eid)==unknownIds_.end()) {
465  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
466  unknownIds_.insert(eid);
467  }
468  for (int fiberC=qie_work->fiberAndChan();
469  qie_work!=qie_end && qie_work->fiberAndChan()==fiberC;
470  qie_work++);
471  }
472  }
473  } else {
474  // this is the branch for unpacking the compact data format with per-channel headers
475  const unsigned short* ptr_header=daq_first;
476  const unsigned short* ptr_end=daq_last+1;
477  int flavor, error_flags, capid0, channelid;
478 
479  while (ptr_header!=ptr_end) {
480  if (*ptr_header==0xFFFF) { // impossible filler word
481  ptr_header++;
482  continue;
483  }
484  // unpack the header word
485  bool isheader=HcalHTRData::unpack_per_channel_header(*ptr_header,flavor,error_flags,capid0,channelid);
486  if (!isheader) {
487  ptr_header++;
488  continue;
489  }
490 
491  int fiberchan=channelid&0x3;
492  int fiber=((channelid>>2)&0x7)+1;
493 
494  // lookup the right channel
495  HcalElectronicsId eid(fiberchan,fiber,spigot,dccid);
496  eid.setHTR(htr_cr,htr_slot,htr_tb);
497  DetId did=emap.lookup(eid);
498 
499  if (!did.null()) {
500  if (did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) {
501  colls.zdcCont->push_back(ZDCDataFrame(HcalZDCDetId(did)));
502  ptr_header=HcalUnpacker_impl::unpack_compact<ZDCDataFrame>(ptr_header, ptr_end, colls.zdcCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
503  } else if (did.det()==DetId::Hcal) {
504  switch (((HcalSubdetector)did.subdetId())) {
505  case (HcalBarrel):
506  case (HcalEndcap): {
507  colls.hbheCont->push_back(HBHEDataFrame(HcalDetId(did)));
508  ptr_header=HcalUnpacker_impl::unpack_compact<HBHEDataFrame>(ptr_header, ptr_end, colls.hbheCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
509  } break;
510  case (HcalOuter): {
511  colls.hoCont->push_back(HODataFrame(HcalDetId(did)));
512  ptr_header=HcalUnpacker_impl::unpack_compact<HODataFrame>(ptr_header, ptr_end, colls.hoCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
513  } break;
514  case (HcalForward): {
515  colls.hfCont->push_back(HFDataFrame(HcalDetId(did)));
516  ptr_header=HcalUnpacker_impl::unpack_compact<HFDataFrame>(ptr_header, ptr_end, colls.hfCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
517  } break;
518  case (HcalOther) : {
519  HcalOtherDetId odid(did);
520  if (odid.subdet()==HcalCalibration) {
521  colls.calibCont->push_back(HcalCalibDataFrame(HcalCalibDetId(did)));
522  ptr_header=HcalUnpacker_impl::unpack_compact<HcalCalibDataFrame>(ptr_header, ptr_end, colls.calibCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
523  }
524  } break;
525  case (HcalEmpty):
526  default: {
527  for (ptr_header++;
528  ptr_header!=ptr_end && !HcalHTRData::is_channel_header(*ptr_header);
529  ptr_header++);
530  }
531  break;
532  }
533  }
534  } else {
535  report.countUnmappedDigi(eid);
536  if (unknownIds_.find(eid)==unknownIds_.end()) {
537  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
538  unknownIds_.insert(eid);
539  }
540  for (ptr_header++;
541  ptr_header!=ptr_end && !HcalHTRData::is_channel_header(*ptr_header);
542  ptr_header++);
543  }
544  }
545 
546  }
547  }
548 }
#define LogDebug(id)
int getSourceId() const
Definition: HcalDTCHeader.h:35
std::set< HcalElectronicsId > unknownIds_
Definition: HcalUnpacker.h:60
int sourceIdOffset_
number to subtract from the source id to get the dcc id
Definition: HcalUnpacker.h:55
int endSample_
last sample from fed raw data to copy (if present)
Definition: HcalUnpacker.h:57
int startSample_
first sample from fed raw data to copy
Definition: HcalUnpacker.h:56
uint16_t raw() const
get the raw word
Definition: HcalQIESample.h:20
bool check() const
Check for a good event Requires a minimum length, matching wordcount and length, not an empty event...
Definition: HcalHTRData.cc:62
static int slbAndChan(uint16_t theSample)
int fiberChan() const
get the fiber channel number
Definition: HcalQIESample.h:34
bool getSpigotCRCError(unsigned int nspigot) const
Read the "CRC-Mismatch" bit for this spigot.
static bool isTPGSOI(const HcalTriggerPrimitiveSample &s)
static bool unpack_per_channel_header(unsigned short, int &flav, int &error_flags, int &capid0, int &channelid)
Unpack a per-channel header word (compact format)
Definition: HcalHTRData.cc:433
int getSpigotData(int nspigot, HcalHTRData &decodeTool, int validSize) const
int getFormatVersion() const
Get the version number of this event.
Definition: HcalHTRData.h:33
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
bool isUnsuppressed() const
Is this event an unsuppresed event?
Definition: HcalHTRData.cc:353
bool isOverflowWarning() const
Definition: HcalHTRData.cc:109
static bool is_channel_header(unsigned short value)
check top bit to see if this is a compact format channel header word
Definition: HcalHTRData.h:90
int expectedOrbitMessageTime_
Expected orbit bunch time (needed to evaluate time differences)
Definition: HcalUnpacker.h:58
bool isEmptyEvent() const
Definition: HcalHTRData.cc:100
HcalSubdetector
Definition: HcalAssistant.h:31
uint16_t raw() const
get the raw word
int fiber() const
get the fiber number
Definition: HcalQIESample.h:32
bool getSpigotPresent(unsigned int nspigot) const
Read the "PRESENT" bit for this spigot.
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
bool getSlotPresent(unsigned int nslot) const
Read the "PRESENT" bit for this slot.
Definition: HcalDTCHeader.h:80
std::set< HcalElectronicsId > unknownIdsTrig_
Recorded to limit number of times a log message is generated.
Definition: HcalUnpacker.h:60
int getSourceId() const
Definition: HcalDCCHeader.h:32
Definition: DetId.h:18
static const int SubdetectorId
Definition: HcalZDCDetId.h:25
static int slb(uint16_t theSample)
void dataPointers(const unsigned short **daq_first, const unsigned short **daq_last, const unsigned short **tp_first, const unsigned short **tp_last) const
Obtain the starting and ending pointers for external unpacking of the data.
Definition: HcalHTRData.cc:153
bool unpack(const HcalHTRData &data, HcalTTPDigi &digi)
bool null() const
is this a null id ?
Definition: DetId.h:45
void setbit(int i)
int getNPS() const
Get the number of presamples in daq data.
Definition: HcalHTRData.cc:400
static const HcalTrigTowerDetId Undefined
static const int FORMAT_VERSION_COMPACT_DATA
Definition: HcalHTRData.h:20
int getFirmwareFlavor() const
Get the HTR firmware flavor.
Definition: HcalHTRData.cc:409
static const int SPIGOT_COUNT
Definition: HcalDCCHeader.h:19
int getSlotData(int nslot, HcalHTRData &decodeTool, int validSize) const
bool wasMarkAndPassZSTP(int slb, int slbchan) const
Was this channel passed as part of Mark&Pass ZS?
Definition: HcalHTRData.cc:364
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
const DetId lookupTrigger(HcalElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
short getDCCDataFormatVersion() const
Definition: HcalDCCHeader.h:57
unsigned int getSubmodule() const
Get the HTR submodule number.
Definition: HcalHTRData.cc:331
bool isBusy() const
Definition: HcalHTRData.cc:117
float linear(float x)
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
Readout chain identification for Hcal.
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
bool isHistogramEvent() const
Is this event a histogram event? (do not call standard unpack in this case!!!!!)
Definition: HcalHTRData.cc:385
static const int MAXIMUM_SLOT
Definition: HcalDTCHeader.h:22
bool getSlotCRCError(unsigned int nslot) const
Read the "CRC-Mismatch" bit for this slot.
Definition: HcalDTCHeader.h:84
static int slbChan(uint16_t theSample)

Member Data Documentation

int HcalUnpacker::endSample_
private

last sample from fed raw data to copy (if present)

Definition at line 57 of file HcalUnpacker.h.

int HcalUnpacker::expectedOrbitMessageTime_
private

Expected orbit bunch time (needed to evaluate time differences)

Definition at line 58 of file HcalUnpacker.h.

Referenced by setExpectedOrbitMessageTime().

int HcalUnpacker::mode_
private

Definition at line 59 of file HcalUnpacker.h.

Referenced by setMode().

int HcalUnpacker::sourceIdOffset_
private

number to subtract from the source id to get the dcc id

Definition at line 55 of file HcalUnpacker.h.

int HcalUnpacker::startSample_
private

first sample from fed raw data to copy

Definition at line 56 of file HcalUnpacker.h.

std::set<HcalElectronicsId> HcalUnpacker::unknownIds_
private

Definition at line 60 of file HcalUnpacker.h.

std::set<HcalElectronicsId> HcalUnpacker::unknownIdsTrig_
private

Recorded to limit number of times a log message is generated.

Definition at line 60 of file HcalUnpacker.h.