CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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_.

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 818 of file HcalUnpacker.cc.

References HcalHTRData::check(), FEDRawData::data(), DetId::det(), 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(), sourceIdOffset_, HcalDCCHeader::SPIGOT_COUNT, DetId::subdetId(), unknownIds_, and HcalHTRData::unpackHistogram().

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

818  {
819 
820  // get the DCC header
821  const HcalDCCHeader* dccHeader=(const HcalDCCHeader*)(raw.data());
822  int dccid=dccHeader->getSourceId()-sourceIdOffset_;
823 
824  // check the summary status
825 
826  // walk through the HTR data...
827  HcalHTRData htr;
828  for (int spigot=0; spigot<HcalDCCHeader::SPIGOT_COUNT; spigot++) {
829  if (!dccHeader->getSpigotPresent(spigot)) continue;
830 
831  int retval=dccHeader->getSpigotData(spigot,htr,raw.size());
832  // check
833  if (retval || !htr.check()) {
834  edm::LogWarning("Invalid Data") << "Invalid HTR data observed on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
835  continue;
836  }
837  if (!htr.isHistogramEvent()) {
838  edm::LogWarning("Invalid Data") << "Non-histogram data passed to histogram unpacker on spigot " << spigot << " of DCC with source id " << dccHeader->getSourceId();
839  continue;
840  }
841 
842  unsigned int smid=htr.getSubmodule();
843  int htr_tb=smid&0x1;
844  int htr_slot=(smid>>1)&0x1F;
845  int htr_cr=(smid>>6)&0x1F;
846 
847  // find out the fibers
848  int f[2],fc;
849  htr.getHistogramFibers(f[0],f[1]);
850 
851  for (int nf=0; nf<2; nf++) {
852  if (f[nf]<0 || (nf==1 && f[0]==f[1])) continue; // skip if invalid or the same
853  for (fc=0; fc<=2; fc++) {
854  HcalElectronicsId eid(fc,f[nf],spigot,dccid);
855  eid.setHTR(htr_cr,htr_slot,htr_tb);
856  DetId did=emap.lookup(eid);
857 
858  if (did.null() || did.det()!=DetId::Hcal || did.subdetId()==0) {
859  if (unknownIds_.find(eid)==unknownIds_.end()) {
860  edm::LogWarning("HCAL") << "HcalHistogramUnpacker: No match found for electronics id :" << eid;
861  unknownIds_.insert(eid);
862  }
863  continue;
864  }
865  histoDigis.push_back(HcalHistogramDigi(HcalDetId(did))); // add it!
866  HcalHistogramDigi& digi=histoDigis.back();
867 
868  // unpack the four capids
869  for (int capid=0; capid<4; capid++)
870  htr.unpackHistogram(f[nf],fc,capid,digi.getArray(capid));
871 
872  }
873  }
874  }
875 }
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 &quot;PRESENT&quot; 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(), FEDRawData::size(), unpackUTCA(), and unpackVME().

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 877 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 unpackUTCA().

877  {
878  const hcal::AMC13Header* amc13=(const hcal::AMC13Header*)(raw.data());
879  int namc=amc13->NAMC();
880  //Find AMC corresponding to uMNio slot
881  for (int iamc=0; iamc<namc; iamc++) {
882  if (amc13->AMCSlot(iamc) == slot) namc = iamc;
883  }
884  if (namc==amc13->NAMC()) {
885  return;
886  }
887  const uint16_t* data = (const uint16_t*)(amc13->AMCPayload(namc));
888  size_t nwords = amc13->AMCSize(namc) * ( sizeof(uint64_t) / sizeof(uint16_t) );
889  *(colls.umnio) = HcalUMNioDigi(data, nwords);
890 
891 }
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 554 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(), endSample_, HcalUHTRData::const_iterator::flavor(), HcalUnpacker::Collections::hbheCont, DetId::Hcal, HcalBarrel, HcalCalibration, HcalEmpty, HcalEndcap, HcalForward, HcalOther, HcalOuter, HcalUnpacker::Collections::hfCont, HcalUnpacker::Collections::hoCont, i, HcalUHTRData::const_iterator::isHeader(), j, 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(), startSample_, HcalOtherDetId::subdet(), HcalZDCDetId::SubdetectorId, DetId::subdetId(), HcalUnpacker::Collections::tpCont, HcalTrigTowerDetId::Undefined, unknownIds_, unknownIdsTrig_, unpackUMNio(), HcalUHTRData::const_iterator::value(), and HcalUnpacker::Collections::zdcCont.

Referenced by unpack().

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

Referenced by unpack().

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=(HcalTriggerPrimitiveSample*)tp_first;
302  tp_end=(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=(HcalQIESample*)daq_first;
410  qie_end=(HcalQIESample*)(daq_last+1); // one beyond last..
411 
413  currFiberChan=0x3F; // invalid fiber+channel...
414  ncurr=0;
415  valid=false;
416 
417 
418  for (qie_work=qie_begin; qie_work!=qie_end; ) {
419  if (qie_work->raw()==0xFFFF) {
420  qie_work++;
421  continue; // filler word
422  }
423  // always at the beginning ...
424  currFiberChan=qie_work->fiberAndChan();
425 
426  // lookup the right channel
427  HcalElectronicsId eid(qie_work->fiberChan(),qie_work->fiber(),spigot,dccid);
428  eid.setHTR(htr_cr,htr_slot,htr_tb);
429  DetId did=emap.lookup(eid);
430 
431  if (!did.null()) {
432  if (did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) {
433  colls.zdcCont->push_back(ZDCDataFrame(HcalZDCDetId(did)));
434  qie_work=HcalUnpacker_impl::unpack<ZDCDataFrame>(qie_work, qie_end, colls.zdcCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
435  } else if (did.det()==DetId::Hcal) {
436  switch (((HcalSubdetector)did.subdetId())) {
437  case (HcalBarrel):
438  case (HcalEndcap): {
439  colls.hbheCont->push_back(HBHEDataFrame(HcalDetId(did)));
440  qie_work=HcalUnpacker_impl::unpack<HBHEDataFrame>(qie_work, qie_end, colls.hbheCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
441  } break;
442  case (HcalOuter): {
443  colls.hoCont->push_back(HODataFrame(HcalDetId(did)));
444  qie_work=HcalUnpacker_impl::unpack<HODataFrame>(qie_work, qie_end, colls.hoCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
445  } break;
446  case (HcalForward): {
447  colls.hfCont->push_back(HFDataFrame(HcalDetId(did)));
448  qie_work=HcalUnpacker_impl::unpack<HFDataFrame>(qie_work, qie_end, colls.hfCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
449  } break;
450  case (HcalOther) : {
451  HcalOtherDetId odid(did);
452  if (odid.subdet()==HcalCalibration) {
453  colls.calibCont->push_back(HcalCalibDataFrame(HcalCalibDetId(did)));
454  qie_work=HcalUnpacker_impl::unpack<HcalCalibDataFrame>(qie_work, qie_end, colls.calibCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
455  }
456  } break;
457  case (HcalEmpty):
458  default: {
459  for (int fiberC=qie_work->fiberAndChan();
460  qie_work!=qie_end && qie_work->fiberAndChan()==fiberC;
461  qie_work++);
462  }
463  break;
464  }
465  }
466  } else {
467  report.countUnmappedDigi(eid);
468  if (unknownIds_.find(eid)==unknownIds_.end()) {
469  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
470  unknownIds_.insert(eid);
471  }
472  for (int fiberC=qie_work->fiberAndChan();
473  qie_work!=qie_end && qie_work->fiberAndChan()==fiberC;
474  qie_work++);
475  }
476  }
477  } else {
478  // this is the branch for unpacking the compact data format with per-channel headers
479  const unsigned short* ptr_header=daq_first;
480  const unsigned short* ptr_end=daq_last+1;
481  int flavor, error_flags, capid0, channelid;
482 
483  while (ptr_header!=ptr_end) {
484  if (*ptr_header==0xFFFF) { // impossible filler word
485  ptr_header++;
486  continue;
487  }
488  // unpack the header word
489  bool isheader=HcalHTRData::unpack_per_channel_header(*ptr_header,flavor,error_flags,capid0,channelid);
490  if (!isheader) {
491  ptr_header++;
492  continue;
493  }
494 
495  int fiberchan=channelid&0x3;
496  int fiber=((channelid>>2)&0x7)+1;
497 
498  // lookup the right channel
499  HcalElectronicsId eid(fiberchan,fiber,spigot,dccid);
500  eid.setHTR(htr_cr,htr_slot,htr_tb);
501  DetId did=emap.lookup(eid);
502 
503  if (!did.null()) {
504  if (did.det()==DetId::Calo && did.subdetId()==HcalZDCDetId::SubdetectorId) {
505  colls.zdcCont->push_back(ZDCDataFrame(HcalZDCDetId(did)));
506  ptr_header=HcalUnpacker_impl::unpack_compact<ZDCDataFrame>(ptr_header, ptr_end, colls.zdcCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
507  } else if (did.det()==DetId::Hcal) {
508  switch (((HcalSubdetector)did.subdetId())) {
509  case (HcalBarrel):
510  case (HcalEndcap): {
511  colls.hbheCont->push_back(HBHEDataFrame(HcalDetId(did)));
512  ptr_header=HcalUnpacker_impl::unpack_compact<HBHEDataFrame>(ptr_header, ptr_end, colls.hbheCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
513  } break;
514  case (HcalOuter): {
515  colls.hoCont->push_back(HODataFrame(HcalDetId(did)));
516  ptr_header=HcalUnpacker_impl::unpack_compact<HODataFrame>(ptr_header, ptr_end, colls.hoCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
517  } break;
518  case (HcalForward): {
519  colls.hfCont->push_back(HFDataFrame(HcalDetId(did)));
520  ptr_header=HcalUnpacker_impl::unpack_compact<HFDataFrame>(ptr_header, ptr_end, colls.hfCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
521  } break;
522  case (HcalOther) : {
523  HcalOtherDetId odid(did);
524  if (odid.subdet()==HcalCalibration) {
525  colls.calibCont->push_back(HcalCalibDataFrame(HcalCalibDetId(did)));
526  ptr_header=HcalUnpacker_impl::unpack_compact<HcalCalibDataFrame>(ptr_header, ptr_end, colls.calibCont->back(), nps, eid, startSample_, endSample_, expectedOrbitMessageTime_, htr);
527  }
528  } break;
529  case (HcalEmpty):
530  default: {
531  for (ptr_header++;
532  ptr_header!=ptr_end && !HcalHTRData::is_channel_header(*ptr_header);
533  ptr_header++);
534  }
535  break;
536  }
537  }
538  } else {
539  report.countUnmappedDigi(eid);
540  if (unknownIds_.find(eid)==unknownIds_.end()) {
541  if (!silent) edm::LogWarning("HCAL") << "HcalUnpacker: No match found for electronics id :" << eid;
542  unknownIds_.insert(eid);
543  }
544  for (ptr_header++;
545  ptr_header!=ptr_end && !HcalHTRData::is_channel_header(*ptr_header);
546  ptr_header++);
547  }
548  }
549 
550  }
551  }
552 }
#define LogDebug(id)
int getSourceId() const
Definition: HcalDTCHeader.h:35
int i
Definition: DBlmapReader.cc:9
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 fiberAndChan() const
get the id channel
Definition: HcalQIESample.h:36
int fiberChan() const
get the fiber channel number
Definition: HcalQIESample.h:34
bool getSpigotCRCError(unsigned int nspigot) const
Read the &quot;CRC-Mismatch&quot; 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 &quot;PRESENT&quot; 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 &quot;PRESENT&quot; 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
void setHTR(int crate, int slot, int tb)
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&amp;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 &quot;CRC-Mismatch&quot; 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.

Referenced by unpackUTCA(), and unpackVME().

int HcalUnpacker::expectedOrbitMessageTime_
private

Expected orbit bunch time (needed to evaluate time differences)

Definition at line 58 of file HcalUnpacker.h.

Referenced by setExpectedOrbitMessageTime(), and unpackVME().

int HcalUnpacker::mode_
private

Definition at line 59 of file HcalUnpacker.h.

Referenced by setMode(), and unpackVME().

int HcalUnpacker::sourceIdOffset_
private

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

Definition at line 55 of file HcalUnpacker.h.

Referenced by unpack(), and unpackVME().

int HcalUnpacker::startSample_
private

first sample from fed raw data to copy

Definition at line 56 of file HcalUnpacker.h.

Referenced by unpackUTCA(), and unpackVME().

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

Definition at line 60 of file HcalUnpacker.h.

Referenced by unpack(), unpackUTCA(), and unpackVME().

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.

Referenced by unpackUTCA(), and unpackVME().