Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#include "EventFilter/EcalRawToDigi/interface/DCCEESRPBlock.h"
#include "EventFilter/EcalRawToDigi/interface/DCCDataBlockPrototype.h"
#include "EventFilter/EcalRawToDigi/interface/DCCDataUnpacker.h"
#include "EventFilter/EcalRawToDigi/interface/EcalElectronicsMapper.h"

DCCEESRPBlock::DCCEESRPBlock(DCCDataUnpacker *u, EcalElectronicsMapper *m, DCCEventBlock *e, bool unpack)
    : DCCSRPBlock(u, m, e, unpack) {}

void DCCEESRPBlock::updateCollectors() {
  // Set SR flag digis
  eeSrFlagsDigis_ = unpacker_->eeSrFlagsCollection();
}

void DCCEESRPBlock::addSRFlagToCollection() {
  // Point to SR flags
  data_++;
  const uint16_t *my16Bitp_ = reinterpret_cast<const uint16_t *>(data_);

  for (unsigned int n = 0; n < expNumbSrFlags_; ++n) {
    if (n != 0 && n % 4 == 0)
      my16Bitp_++;

    unsigned short srFlag = (*my16Bitp_ >> ((n - (n / 4) * 4) * 3)) & SRP_SRFLAG_MASK;
    srFlags_[n] = srFlag;
    if (unpackInternalData_) {
      std::vector<EcalSrFlag *> srs = mapper_->getSrFlagPointer(n + 1);
      for (size_t i = 0; i < srs.size(); ++i) {
        srs[i]->setValue(srFlag);
        (*eeSrFlagsDigis_)->push_back(*((EESrFlag *)srs[i]));
      }
    }
  }
}

bool DCCEESRPBlock::checkSrpIdAndNumbSRFlags() {
  expNumbSrFlags_ = 36;  //to be corrected

  int dccId = mapper_->getActiveDCC() - 600;
  if (dccId == SECTOR_EEM_CCU_JUMP || dccId == SECTOR_EEP_CCU_JUMP)
    expNumbSrFlags_ = 41;

  //todo :  checks to be implemented...
  return true;
}