File indexing completed on 2024-04-06 12:10:52
0001 #define EDM_ML_DEBUG 1
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004
0005 #include "EventFilter/L1TRawToDigi/plugins/UnpackerFactory.h"
0006
0007 #include "L1Trigger/L1TCalorimeter/interface/CaloTools.h"
0008
0009 #include "CaloCollections.h"
0010 #include "MPUnpacker.h"
0011
0012 namespace l1t {
0013 namespace stage2 {
0014 bool MPUnpacker::unpack(const Block& block, UnpackerCollections* coll) {
0015 LogDebug("L1T") << "Block ID = " << block.header().getID() << " size = " << block.header().getSize()
0016 << " AMC = " << block.amc().getAMCNumber();
0017
0018
0019 unsigned int amc = block.amc().getAMCNumber();
0020 unsigned int bxid = block.amc().getBX();
0021 LogDebug("L1T") << "Unpacking AMC " << amc << " for BX " << bxid;
0022
0023 auto res1_ = static_cast<CaloCollections*>(coll)->getMPJets();
0024 auto res2_ = static_cast<CaloCollections*>(coll)->getMPEtSums();
0025 auto res3_ = static_cast<CaloCollections*>(coll)->getMPEGammas();
0026 auto res4_ = static_cast<CaloCollections*>(coll)->getMPTaus();
0027
0028 res1_->setBXRange(0, 0);
0029 res2_->setBXRange(0, 0);
0030 res3_->setBXRange(0, 0);
0031 res4_->setBXRange(0, 0);
0032
0033
0034 int unsigned fet = 0;
0035 int unsigned fht = 1;
0036 int unsigned fjet = 6;
0037 int unsigned feg = 2;
0038 int unsigned ftau = 4;
0039
0040
0041
0042
0043
0044 uint32_t raw_data = block.payload()[fet];
0045
0046 l1t::EtSum et = l1t::EtSum();
0047
0048 et.setHwPt(static_cast<int32_t>(uint32_t(raw_data & 0xFFFFFF) << 16) >> 16);
0049
0050 switch (block.header().getID()) {
0051 case 123:
0052 et.setType(l1t::EtSum::kTotalEt);
0053 break;
0054 case 121:
0055 et.setType(l1t::EtSum::kTotalEtx);
0056 break;
0057 case 127:
0058 et.setType(l1t::EtSum::kTotalEty);
0059 break;
0060 case 125:
0061 et.setType(l1t::EtSum::kTotalEt);
0062 break;
0063 case 131:
0064 et.setType(l1t::EtSum::kTotalEtx);
0065 break;
0066 case 129:
0067 et.setType(l1t::EtSum::kTotalEty);
0068 break;
0069 default:
0070 break;
0071 }
0072
0073 LogDebug("L1T") << "ET/METx/METy: pT " << et.hwPt();
0074
0075 res2_->push_back(0, et);
0076
0077
0078
0079 raw_data = block.payload()[fht];
0080
0081 l1t::EtSum ht = l1t::EtSum();
0082
0083
0084 ht.setHwPt(static_cast<int32_t>(uint32_t(raw_data & 0xFFFFFF) << 16) >> 16);
0085 switch (block.header().getID()) {
0086 case 123:
0087 ht.setType(l1t::EtSum::kTotalHt);
0088 break;
0089 case 121:
0090 ht.setType(l1t::EtSum::kTotalHtx);
0091 break;
0092 case 127:
0093 ht.setType(l1t::EtSum::kTotalHty);
0094 break;
0095 case 125:
0096 ht.setType(l1t::EtSum::kTotalHt);
0097 break;
0098 case 131:
0099 ht.setType(l1t::EtSum::kTotalHtx);
0100 break;
0101 case 129:
0102 ht.setType(l1t::EtSum::kTotalHty);
0103 break;
0104 default:
0105 break;
0106 }
0107
0108 LogDebug("L1T") << "HT/MHTx/MHTy: pT " << ht.hwPt();
0109
0110 res2_->push_back(0, ht);
0111
0112
0113 for (unsigned nJet = 0; nJet < 2; nJet++) {
0114 raw_data = block.payload()[fjet + nJet];
0115
0116 if (raw_data == 0)
0117 continue;
0118
0119 l1t::Jet jet = l1t::Jet();
0120
0121 int etasign = 1;
0122 if ((block.header().getID() == 125) || (block.header().getID() == 131) || (block.header().getID() == 129)) {
0123 etasign = -1;
0124 }
0125
0126 LogDebug("L1") << "block ID=" << block.header().getID() << " etasign=" << etasign;
0127
0128 int mpEta = etasign * (raw_data & 0x3F);
0129 jet.setHwEta(CaloTools::caloEta(mpEta));
0130 jet.setHwPhi((raw_data >> 6) & 0x7F);
0131 jet.setHwPt((raw_data >> 13) & 0xFFFF);
0132
0133 LogDebug("L1T") << "Jet: eta " << jet.hwEta() << " phi " << jet.hwPhi() << " pT " << jet.hwPt() << " qual "
0134 << jet.hwQual();
0135
0136 jet.setP4(l1t::CaloTools::p4MP(&jet));
0137 res1_->push_back(0, jet);
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172 }
0173
0174
0175
0176
0177
0178 for (unsigned nEG = 0; nEG < 2; nEG++) {
0179 raw_data = block.payload()[feg + nEG];
0180
0181 if (raw_data == 0)
0182 continue;
0183
0184 l1t::EGamma eg = l1t::EGamma();
0185
0186 int etasign = 1;
0187 if ((block.header().getID() == 125) || (block.header().getID() == 131) || (block.header().getID() == 129)) {
0188 etasign = -1;
0189 }
0190
0191 LogDebug("L1") << "block ID=" << block.header().getID() << " etasign=" << etasign;
0192
0193 eg.setHwEta(etasign * ((raw_data >> 4) & 0x3F));
0194 eg.setHwPhi((raw_data >> 10) & 0x7F);
0195 eg.setHwPt((raw_data >> 21) & 0x3FF);
0196 eg.setHwQual(((raw_data >> 3) & 0x1) + (((raw_data >> 1) & 0x1) << 2));
0197 eg.setHwIso(raw_data & 0x1);
0198
0199 LogDebug("L1T") << "Egamma: eta " << eg.hwEta() << " phi " << eg.hwPhi() << " pT " << eg.hwPt() << " qual "
0200 << eg.hwQual();
0201
0202 eg.setP4(l1t::CaloTools::p4MP(&eg));
0203 res3_->push_back(0, eg);
0204 }
0205
0206
0207
0208
0209
0210 for (unsigned nTau = 0; nTau < 2; nTau++) {
0211 raw_data = block.payload()[ftau + nTau];
0212
0213 if (raw_data == 0)
0214 continue;
0215
0216 l1t::Tau tau = l1t::Tau();
0217
0218 int etasign = 1;
0219 if ((block.header().getID() == 125) || (block.header().getID() == 131) || (block.header().getID() == 129)) {
0220 etasign = -1;
0221 }
0222
0223 LogDebug("L1") << "block ID=" << block.header().getID() << " etasign=" << etasign;
0224
0225 tau.setHwEta(etasign * ((raw_data >> 4) & 0x3F));
0226 tau.setHwPhi((raw_data >> 10) & 0x7F);
0227 tau.setHwPt((raw_data >> 21) & 0x3FF);
0228 tau.setHwQual(((raw_data >> 3) & 0x1) + (((raw_data >> 1) & 0x1) << 2));
0229 tau.setHwIso(raw_data & 0x1);
0230
0231
0232
0233
0234
0235
0236
0237 LogDebug("L1T") << "Tau: eta " << tau.hwEta() << " phi " << tau.hwPhi() << " pT " << tau.hwPt() << " qual "
0238 << tau.hwQual();
0239
0240 tau.setP4(l1t::CaloTools::p4MP(&tau));
0241 res4_->push_back(0, tau);
0242 }
0243
0244 return true;
0245 }
0246 }
0247 }
0248
0249 DEFINE_L1T_UNPACKER(l1t::stage2::MPUnpacker);