File indexing completed on 2023-10-25 09:45:38
0001 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0002 #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h"
0003
0004 #include "L1Trigger/L1TCalorimeter/interface/CaloTools.h"
0005
0006 #include "L1TObjectCollections.h"
0007
0008
0009 #include "ZDCUnpacker.h"
0010 #include "GTSetup.h"
0011
0012 namespace l1t {
0013 namespace stage2 {
0014 ZDCUnpacker::ZDCUnpacker() : EtSumZDCCopy_(0) {}
0015
0016 bool ZDCUnpacker::unpack(const Block& block, UnpackerCollections* coll) {
0017 using namespace l1t::stage2;
0018 uint32_t zdc_mask = 0x3FF;
0019 LogDebug("L1T") << "Block ID = " << block.header().getID() << " size = " << block.header().getSize();
0020
0021 int nBX = int(ceil(block.header().getSize() / zdc::nOutputFramePerBX));
0022
0023
0024
0025 int firstBX = (nBX / 2) - nBX + 1;
0026 int lastBX = nBX / 2;
0027
0028 auto res_ = static_cast<L1TObjectCollections*>(coll)->getZDCSums(EtSumZDCCopy_);
0029 res_->setBXRange(firstBX, lastBX);
0030
0031 LogDebug("L1T") << "nBX = " << nBX << " first BX = " << firstBX << " lastBX = " << lastBX;
0032
0033
0034 for (int bx = firstBX; bx <= lastBX; bx++) {
0035
0036 int iFrame = (bx - firstBX) * zdc::nOutputFramePerBX;
0037
0038 uint32_t raw_data = block.payload().at(iFrame + 1);
0039
0040 l1t::EtSum zdcm{l1t::EtSum::kZDCM};
0041 zdcm.setHwPt(raw_data & zdc_mask);
0042 zdcm.setP4(l1t::CaloTools::p4Demux(&zdcm));
0043
0044 LogDebug("L1T") << "ZDC -: pT " << zdcm.hwPt() << " bx " << bx;
0045
0046 res_->push_back(bx, zdcm);
0047
0048
0049 raw_data = block.payload().at(iFrame + 2);
0050
0051 l1t::EtSum zdcp{l1t::EtSum::kZDCP};
0052 zdcp.setHwPt(raw_data & zdc_mask);
0053 zdcp.setP4(l1t::CaloTools::p4Demux(&zdcp));
0054
0055 LogDebug("L1T") << "ZDC +: pT " << zdcp.hwPt() << " bx " << bx;
0056
0057 res_->push_back(bx, zdcp);
0058 }
0059
0060 return true;
0061 }
0062 }
0063 }
0064
0065 DEFINE_L1T_UNPACKER(l1t::stage2::ZDCUnpacker);