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/L1TRawToDigi/interface/OmtfCscPacker.h"

#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "DataFormats/L1TMuon/interface/OMTF/OmtfCscDataWord64.h"
#include "DataFormats/CSCDigi/interface/CSCConstants.h"

namespace omtf {

  void CscPacker::init() { theCsc2Omtf = mapCscDet2EleIndex(); }

  void CscPacker::pack(const CSCCorrelatedLCTDigiCollection* prod, FedAmcRawsMap& raws) {
    const CSCCorrelatedLCTDigiCollection& cscDigis = *prod;
    for (const auto& chDigis : cscDigis) {
      CSCDetId chamberId = CSCDetId(chDigis.first).chamberId();
      for (auto digi = chDigis.second.first; digi != chDigis.second.second; digi++) {
        CscDataWord64 data;
        data.hitNum_ = digi->getTrknmb();
        data.vp_ = digi->isValid();
        data.bxNum_ = digi->getBX() - (CSCConstants::LCT_CENTRAL_BX - 3);
        data.halfStrip_ = digi->getStrip();
        data.clctPattern_ = digi->getPattern();
        data.keyWG_ = digi->getKeyWG();
        data.lr_ = digi->getBend();
        data.quality_ = digi->getQuality();
        auto im = theCsc2Omtf.find(chamberId);
        if (im != theCsc2Omtf.end()) {
          std::vector<EleIndex> links = {im->second.first, im->second.second};
          for (const auto& link : links) {
            unsigned int fed = link.fed();
            if (fed == 0)
              continue;
            data.station_ = chamberId.station() - 1;
            data.linkNum_ = link.link();
            data.cscID_ = chamberId.chamber() - (link.amc() - 1) * 6;
            unsigned int amc = link.amc() * 2 - 1;
            raws[std::make_pair(fed, amc)].push_back(data.rawData);
            LogTrace("") << "ADDED RAW: fed: " << fed << " amc: " << amc << " CSC DATA: " << data << std::endl;
          }
        }
      }
    }
  }

}  // namespace omtf