File indexing completed on 2024-07-03 04:18:03
0001 #ifndef L1Trigger_Phase2L1GT_L1GTEvaluationInterface_h
0002 #define L1Trigger_Phase2L1GT_L1GTEvaluationInterface_h
0003
0004 #include "DataFormats/L1Trigger/interface/P2GTCandidate.h"
0005
0006 #include <ap_int.h>
0007
0008 #include <array>
0009 #include <cstddef>
0010 #include <cstdint>
0011
0012
0013
0014
0015 namespace l1t {
0016
0017 template <typename A, typename... Args>
0018 A l1t_pack_int(const Args&... args) {
0019 A result = 0;
0020 std::size_t shift = 0;
0021 (
0022 [&result, &shift](const auto& arg) {
0023 result(shift + arg.width - 1, shift) = arg;
0024 shift += arg.width;
0025 }(args),
0026 ...);
0027
0028 return result;
0029 }
0030
0031 struct L1TGT_BaseInterface {
0032 virtual std::size_t packed_width() const = 0;
0033 virtual P2GTCandidate to_GTObject() const = 0;
0034 virtual ~L1TGT_BaseInterface() {}
0035 };
0036
0037 template <std::size_t N>
0038 struct L1TGT_Interface : public L1TGT_BaseInterface {
0039 virtual ap_uint<N> pack() const = 0;
0040
0041 static constexpr std::size_t WIDTH = N;
0042
0043 std::size_t packed_width() const override { return WIDTH; }
0044 };
0045
0046 template <std::size_t N>
0047 struct L1TGT_Common3Vector : public L1TGT_Interface<N> {
0048 ap_uint<1> valid;
0049 ap_uint<16> pT;
0050 ap_int<13> phi;
0051 ap_int<14> eta;
0052
0053 L1TGT_Common3Vector(int valid = 0, int pT = 0, int phi = 0, int eta = 0)
0054 : valid(valid), pT(pT), phi(phi), eta(eta){};
0055
0056 virtual ap_uint<44> pack_common() const { return l1t_pack_int<ap_uint<44>>(valid, pT, phi, eta); }
0057
0058 ap_uint<N> pack() const override { return pack_common(); }
0059
0060 static L1TGT_Common3Vector from_GTObject(const P2GTCandidate& gtObject) {
0061 return L1TGT_Common3Vector(1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta());
0062 }
0063
0064 P2GTCandidate to_GTObject() const override {
0065 P2GTCandidate gt_object;
0066 gt_object.setHwPT(pT);
0067 gt_object.setHwPhi(phi);
0068 gt_object.setHwEta(eta);
0069
0070 return gt_object;
0071 }
0072 };
0073
0074 struct L1TGT_CommonSum : public L1TGT_Interface<64> {
0075 ap_uint<1> valid;
0076 ap_uint<16> pT;
0077 ap_int<13> phi;
0078 ap_uint<16> scalarSumPT;
0079
0080 L1TGT_CommonSum(int valid = 0, int pT = 0, int phi = 0, int scalarSumPT = 0)
0081 : valid(valid), pT(pT), phi{phi}, scalarSumPT(scalarSumPT) {}
0082
0083 ap_uint<46> pack_common() const { return l1t_pack_int<ap_uint<46>>(valid, pT, phi, scalarSumPT); }
0084
0085 ap_uint<64> pack() const override { return pack_common(); }
0086
0087 static L1TGT_CommonSum from_GTObject(const P2GTCandidate& gtObject) {
0088 return L1TGT_CommonSum(1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwScalarSumPT());
0089 }
0090
0091 P2GTCandidate to_GTObject() const override {
0092 P2GTCandidate gt_object;
0093 gt_object.setHwPT(pT);
0094 gt_object.setHwPhi(phi);
0095 gt_object.setHwScalarSumPT(scalarSumPT);
0096
0097 return gt_object;
0098 }
0099 };
0100
0101
0102
0103 struct L1TGT_GCT_EgammaNonIsolated6p6 : public L1TGT_Common3Vector<64> {
0104 using L1TGT_Common3Vector::L1TGT_Common3Vector;
0105 };
0106
0107 struct L1TGT_GCT_EgammaIsolated6p6 : public L1TGT_Common3Vector<64> {
0108 using L1TGT_Common3Vector::L1TGT_Common3Vector;
0109 };
0110
0111 struct L1TGT_GCT_jet6p6 : public L1TGT_Common3Vector<64> {
0112 using L1TGT_Common3Vector::L1TGT_Common3Vector;
0113 };
0114
0115 struct L1TGT_GCT_tau6p6 : public L1TGT_Common3Vector<64> {
0116 ap_uint<10> seed_pT;
0117
0118 L1TGT_GCT_tau6p6(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int seed_pT = 0)
0119 : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT) {}
0120
0121 ap_uint<WIDTH> pack() const override {
0122 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT);
0123 }
0124
0125 static L1TGT_GCT_tau6p6 from_GTObject(const P2GTCandidate& gtObject) {
0126 return L1TGT_GCT_tau6p6(1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta(), gtObject.hwSeed_pT());
0127 }
0128
0129 P2GTCandidate to_GTObject() const override {
0130 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0131 gt_object.setHwSeed_pT(seed_pT);
0132
0133 return gt_object;
0134 }
0135 };
0136
0137 struct L1TGT_GCT_Sum2 : public L1TGT_CommonSum {
0138 using L1TGT_CommonSum::L1TGT_CommonSum;
0139 };
0140
0141
0142
0143 struct L1TGT_GMT_PromptDisplacedMuon : public L1TGT_Common3Vector<64> {
0144 ap_uint<5> z0;
0145 ap_int<7> d0;
0146 ap_uint<1> charge;
0147 ap_uint<4> qualityScore;
0148
0149 L1TGT_GMT_PromptDisplacedMuon(int valid = 0,
0150 int pT = 0,
0151 int phi = 0,
0152 int eta = 0,
0153 int z0 = 0,
0154 int d0 = 0,
0155 int charge = 0,
0156 int qualityScore = 0)
0157 : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), d0(d0), charge(charge), qualityScore(qualityScore) {}
0158
0159 ap_uint<WIDTH> pack() const override {
0160 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, d0, charge, qualityScore);
0161 }
0162
0163 static L1TGT_GMT_PromptDisplacedMuon from_GTObject(const P2GTCandidate& gtObject) {
0164 return L1TGT_GMT_PromptDisplacedMuon(1,
0165 gtObject.hwPT(),
0166 gtObject.hwPhi(),
0167 gtObject.hwEta(),
0168 gtObject.hwZ0() >> 12,
0169 gtObject.hwD0() >> 5,
0170 gtObject.hwCharge(),
0171 gtObject.hwQualityScore());
0172 }
0173
0174 P2GTCandidate to_GTObject() const override {
0175 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0176 gt_object.setHwZ0(static_cast<int>(z0) << 12);
0177 gt_object.setHwD0(static_cast<int>(d0) << 5);
0178 gt_object.setHwCharge(charge);
0179 gt_object.setHwQualityScore(qualityScore);
0180
0181 return gt_object;
0182 }
0183 };
0184
0185 struct L1TGT_GMT_TrackMatchedmuon : public L1TGT_Common3Vector<96> {
0186 ap_int<10> z0;
0187 ap_int<10> d0;
0188 ap_uint<1> charge;
0189 ap_uint<6> qualityFlags;
0190 ap_uint<6> isolationPT;
0191 ap_uint<4> beta;
0192
0193 L1TGT_GMT_TrackMatchedmuon(int valid = 0,
0194 int pT = 0,
0195 int phi = 0,
0196 int eta = 0,
0197 int z0 = 0,
0198 int d0 = 0,
0199 int charge = 0,
0200 int qualityFlags = 0,
0201 int isolationPT = 0,
0202 int beta = 0)
0203 : L1TGT_Common3Vector(valid, pT, phi, eta),
0204 z0(z0),
0205 d0(d0),
0206 charge(charge),
0207 qualityFlags(qualityFlags),
0208 isolationPT(isolationPT),
0209 beta(beta) {}
0210
0211 ap_uint<WIDTH> pack() const override {
0212 return l1t_pack_int<ap_uint<WIDTH>>(
0213 L1TGT_Common3Vector::pack_common(), z0, d0, charge, qualityFlags, isolationPT, beta);
0214 }
0215
0216 static L1TGT_GMT_TrackMatchedmuon from_GTObject(const P2GTCandidate& gtObject) {
0217 return L1TGT_GMT_TrackMatchedmuon(1,
0218 gtObject.hwPT(),
0219 gtObject.hwPhi(),
0220 gtObject.hwEta(),
0221 gtObject.hwZ0() >> 7,
0222 gtObject.hwD0() >> 2,
0223 gtObject.hwCharge(),
0224 gtObject.hwQualityFlags(),
0225 gtObject.hwIsolationPT(),
0226 gtObject.hwBeta());
0227 }
0228
0229 P2GTCandidate to_GTObject() const override {
0230 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0231 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0232 gt_object.setHwD0(static_cast<int>(d0) << 2);
0233 gt_object.setHwCharge(charge);
0234 gt_object.setHwQualityFlags(static_cast<int>(qualityFlags));
0235 gt_object.setHwIsolationPT(static_cast<int>(isolationPT));
0236 gt_object.setHwBeta(beta);
0237
0238 return gt_object;
0239 }
0240 };
0241
0242 struct L1TGT_GMT_TopoObject : public L1TGT_Interface<64> {
0243 ap_uint<1> valid;
0244 ap_uint<8> pT;
0245 ap_int<8> eta;
0246 ap_int<8> phi;
0247 ap_uint<8> mass;
0248 ap_uint<6> qualityFlags;
0249
0250
0251
0252 L1TGT_GMT_TopoObject(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int mass = 0, int qualityFlags = 0)
0253 : valid(valid), pT(pT), eta(eta), phi(phi), mass(mass), qualityFlags(qualityFlags) {}
0254
0255 ap_uint<WIDTH> pack() const override {
0256 return l1t_pack_int<ap_uint<WIDTH>>(valid, pT, eta, phi, mass, qualityFlags);
0257 }
0258
0259 static L1TGT_GMT_TopoObject from_GTObject(const P2GTCandidate& gtObject) {
0260 return L1TGT_GMT_TopoObject(1,
0261 gtObject.hwPT() / 5,
0262 gtObject.hwPhi() >> 5,
0263 gtObject.hwEta() >> 5,
0264 gtObject.hwMass(),
0265 gtObject.hwQualityFlags());
0266 }
0267
0268 P2GTCandidate to_GTObject() const override {
0269 P2GTCandidate gt_object;
0270 gt_object.setHwPT(static_cast<int>(pT) * 5);
0271 gt_object.setHwPhi(static_cast<int>(phi) << 5);
0272 gt_object.setHwEta(static_cast<int>(eta) << 5);
0273 gt_object.setHwMass(mass);
0274 gt_object.setHwQualityFlags(qualityFlags);
0275
0276 return gt_object;
0277 }
0278 };
0279
0280
0281
0282 struct L1TGT_GTT_PromptJet : public L1TGT_Common3Vector<128> {
0283 ap_int<10> z0;
0284 ap_uint<5> number_of_tracks;
0285
0286
0287 L1TGT_GTT_PromptJet(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0, int number_of_tracks = 0)
0288 : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), number_of_tracks(number_of_tracks) {}
0289
0290 ap_uint<WIDTH> pack() const override {
0291 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, number_of_tracks);
0292 }
0293
0294 static L1TGT_GTT_PromptJet from_GTObject(const P2GTCandidate& gtObject) {
0295 return L1TGT_GTT_PromptJet(
0296 1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta(), gtObject.hwZ0() >> 7, gtObject.hwNumber_of_tracks());
0297 }
0298
0299 P2GTCandidate to_GTObject() const override {
0300 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0301 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0302 gt_object.setHwNumber_of_tracks(number_of_tracks);
0303
0304 return gt_object;
0305 }
0306 };
0307
0308 struct L1TGT_GTT_DisplacedJet : public L1TGT_Common3Vector<128> {
0309 ap_int<10> z0;
0310 ap_uint<5> number_of_tracks;
0311
0312 ap_int<12> d0;
0313
0314 L1TGT_GTT_DisplacedJet(
0315 int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0, int number_of_tracks = 0, int d0 = 0)
0316 : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), number_of_tracks(number_of_tracks), d0(d0) {}
0317
0318 ap_uint<WIDTH> pack() const override {
0319 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, number_of_tracks, ap_uint<5>(0), d0);
0320 }
0321
0322 static L1TGT_GTT_DisplacedJet from_GTObject(const P2GTCandidate& gtObject) {
0323 return L1TGT_GTT_DisplacedJet(1,
0324 gtObject.hwPT(),
0325 gtObject.hwPhi(),
0326 gtObject.hwEta(),
0327 gtObject.hwZ0() >> 7,
0328 gtObject.hwNumber_of_tracks(),
0329 gtObject.hwD0());
0330 }
0331
0332 P2GTCandidate to_GTObject() const override {
0333 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0334 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0335 gt_object.setHwNumber_of_tracks(number_of_tracks);
0336 gt_object.setHwD0(d0);
0337
0338 return gt_object;
0339 }
0340 };
0341
0342 struct L1TGT_GTT_Sum : public L1TGT_CommonSum {
0343 using L1TGT_CommonSum::L1TGT_CommonSum;
0344 };
0345
0346 struct L1TGT_GTT_HadronicTau : public L1TGT_Common3Vector<96> {
0347 ap_uint<10> seed_pT;
0348 ap_int<10> seed_z0;
0349 ap_uint<1> charge;
0350 ap_uint<2> type;
0351
0352 L1TGT_GTT_HadronicTau(int valid = 0,
0353 int pT = 0,
0354 int phi = 0,
0355 int eta = 0,
0356 int seed_pT = 0,
0357 int seed_z0 = 0,
0358 int charge = 0,
0359 int type = 0)
0360 : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT), seed_z0(seed_z0), charge(charge), type(type) {}
0361
0362 ap_uint<WIDTH> pack() const override {
0363 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT, seed_z0, charge, type);
0364 }
0365
0366 static L1TGT_GTT_HadronicTau from_GTObject(const P2GTCandidate& gtObject) {
0367 return L1TGT_GTT_HadronicTau(1,
0368 gtObject.hwPT(),
0369 gtObject.hwPhi(),
0370 gtObject.hwEta(),
0371 gtObject.hwSeed_pT(),
0372 gtObject.hwSeed_z0(),
0373 gtObject.hwCharge(),
0374 gtObject.hwType());
0375 }
0376
0377 P2GTCandidate to_GTObject() const override {
0378 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0379 gt_object.setHwSeed_pT(seed_pT);
0380 gt_object.setHwSeed_z0(seed_z0);
0381 gt_object.setHwCharge(charge);
0382 gt_object.setHwType(type);
0383
0384 return gt_object;
0385 }
0386 };
0387
0388 struct L1TGT_GTT_LightMeson : public L1TGT_Common3Vector<96> {
0389 ap_int<10> z0;
0390
0391
0392
0393
0394 L1TGT_GTT_LightMeson(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0)
0395 : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0) {}
0396
0397 ap_uint<WIDTH> pack() const override {
0398 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0);
0399 }
0400
0401 static L1TGT_GTT_LightMeson from_GTObject(const P2GTCandidate& gtObject) {
0402 return L1TGT_GTT_LightMeson(1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta(), gtObject.hwZ0() >> 7);
0403 }
0404
0405 P2GTCandidate to_GTObject() const override {
0406 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0407 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0408
0409 return gt_object;
0410 }
0411 };
0412
0413 struct L1TGT_GTT_Track : public L1TGT_Interface<96> {
0414
0415
0416 L1TGT_GTT_Track(){};
0417
0418 ap_uint<WIDTH> pack() const override { return ap_uint<WIDTH>(0); }
0419
0420 static L1TGT_GTT_Track from_GTObject(const P2GTCandidate& gtObject) { return L1TGT_GTT_Track(); }
0421
0422 P2GTCandidate to_GTObject() const override { return P2GTCandidate(); }
0423 };
0424
0425 struct L1TGT_GTT_PrimaryVert : public L1TGT_Interface<64> {
0426 ap_uint<1> valid;
0427 ap_int<15> z0;
0428 ap_uint<8> number_of_tracks_in_pv;
0429 ap_uint<12> sum_pT_pv;
0430 ap_uint<3> qualityScore;
0431 ap_uint<10> number_of_tracks_not_in_pv;
0432
0433
0434 L1TGT_GTT_PrimaryVert(int valid = 0,
0435 int z0 = 0,
0436 int number_of_tracks_in_pv = 0,
0437 int sum_pT_pv = 0,
0438 int qualityScore = 0,
0439 int number_of_tracks_not_in_pv = 0)
0440 : valid(valid),
0441 z0(z0),
0442 number_of_tracks_in_pv(number_of_tracks_in_pv),
0443 sum_pT_pv(sum_pT_pv),
0444 qualityScore(qualityScore),
0445 number_of_tracks_not_in_pv(number_of_tracks_not_in_pv) {}
0446
0447 ap_uint<WIDTH> pack() const override {
0448 return l1t_pack_int<ap_uint<WIDTH>>(
0449 valid, z0, number_of_tracks_in_pv, sum_pT_pv, qualityScore, number_of_tracks_not_in_pv);
0450 }
0451
0452 static L1TGT_GTT_PrimaryVert from_GTObject(const P2GTCandidate& gtObject) {
0453 return L1TGT_GTT_PrimaryVert(1,
0454 gtObject.hwZ0() / 5,
0455 gtObject.hwNumber_of_tracks_in_pv(),
0456 gtObject.hwSum_pT_pv(),
0457 gtObject.hwQualityScore(),
0458 gtObject.hwNumber_of_tracks_not_in_pv());
0459 }
0460
0461 P2GTCandidate to_GTObject() const override {
0462 P2GTCandidate gt_object;
0463 gt_object.setHwZ0(static_cast<int>(z0) * 5);
0464 gt_object.setHwNumber_of_tracks_in_pv(number_of_tracks_in_pv);
0465 gt_object.setHwSum_pT_pv(sum_pT_pv);
0466 gt_object.setHwQualityScore(qualityScore);
0467 gt_object.setHwNumber_of_tracks_not_in_pv(number_of_tracks_not_in_pv);
0468
0469 return gt_object;
0470 }
0471 };
0472
0473
0474
0475 struct L1TGT_CL2_Jet : public L1TGT_Common3Vector<128> {
0476 ap_int<10> z0;
0477
0478 L1TGT_CL2_Jet(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0)
0479 : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0) {}
0480
0481 ap_uint<WIDTH> pack() const override {
0482 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0);
0483 }
0484
0485 static L1TGT_CL2_Jet from_GTObject(const P2GTCandidate& gtObject) {
0486 return L1TGT_CL2_Jet(1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta(), gtObject.hwZ0() >> 7);
0487 }
0488
0489 P2GTCandidate to_GTObject() const override {
0490 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0491 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0492
0493 return gt_object;
0494 }
0495 };
0496
0497 struct L1TGT_CL2_Sum : public L1TGT_CommonSum {
0498 using L1TGT_CommonSum::L1TGT_CommonSum;
0499 };
0500
0501 struct L1TGT_CL2_Tau : public L1TGT_Common3Vector<96> {
0502 ap_uint<10> seed_pT;
0503 ap_int<10> seed_z0;
0504 ap_uint<1> charge;
0505 ap_uint<2> type;
0506
0507
0508
0509
0510 L1TGT_CL2_Tau(int valid = 0,
0511 int pT = 0,
0512 int phi = 0,
0513 int eta = 0,
0514 int seed_pT = 0,
0515 int seed_z0 = 0,
0516 int charge = 0,
0517 int type = 0)
0518 : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT), seed_z0(seed_z0), charge(charge), type(type) {}
0519
0520 ap_uint<WIDTH> pack() const override {
0521 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT, seed_z0, charge, type);
0522 }
0523
0524 static L1TGT_CL2_Tau from_GTObject(const P2GTCandidate& gtObject) {
0525 return L1TGT_CL2_Tau(1,
0526 gtObject.hwPT(),
0527 gtObject.hwPhi(),
0528 gtObject.hwEta(),
0529 gtObject.hwSeed_pT(),
0530 gtObject.hwSeed_z0(),
0531 gtObject.hwCharge(),
0532 gtObject.hwType());
0533 }
0534
0535 P2GTCandidate to_GTObject() const override {
0536 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0537 gt_object.setHwSeed_pT(seed_pT);
0538 gt_object.setHwSeed_z0(seed_z0);
0539 gt_object.setHwCharge(charge);
0540 gt_object.setHwType(type);
0541
0542 return gt_object;
0543 }
0544 };
0545
0546 struct L1TGT_CL2_Electron : public L1TGT_Common3Vector<96> {
0547 ap_uint<4> qualityFlags;
0548 ap_uint<11> isolationPT;
0549 ap_uint<1> charge;
0550 ap_int<10> z0;
0551
0552 L1TGT_CL2_Electron(int valid = 0,
0553 int pT = 0,
0554 int phi = 0,
0555 int eta = 0,
0556 int qualityFlags = 0,
0557 int isolationPT = 0,
0558 int charge = 0,
0559 int z0 = 0)
0560 : L1TGT_Common3Vector(valid, pT, phi, eta),
0561 qualityFlags(qualityFlags),
0562 isolationPT(isolationPT),
0563 charge(charge),
0564 z0(z0) {}
0565
0566 ap_uint<WIDTH> pack() const override {
0567 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), qualityFlags, isolationPT, charge, z0);
0568 }
0569
0570 static L1TGT_CL2_Electron from_GTObject(const P2GTCandidate& gtObject) {
0571 return L1TGT_CL2_Electron(1,
0572 gtObject.hwPT(),
0573 gtObject.hwPhi(),
0574 gtObject.hwEta(),
0575 gtObject.hwQualityFlags(),
0576 gtObject.hwIsolationPT(),
0577 gtObject.hwCharge(),
0578 gtObject.hwZ0() >> 7);
0579 }
0580
0581 P2GTCandidate to_GTObject() const override {
0582 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0583 gt_object.setHwQualityFlags(qualityFlags);
0584 gt_object.setHwIsolationPT(isolationPT);
0585 gt_object.setHwCharge(charge);
0586 gt_object.setHwZ0(static_cast<int>(z0) << 7);
0587
0588 return gt_object;
0589 }
0590 };
0591
0592 struct L1TGT_CL2_Photon : public L1TGT_Common3Vector<96> {
0593 ap_uint<4> qualityFlags;
0594 ap_uint<11> isolationPT;
0595
0596 L1TGT_CL2_Photon(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int qualityFlags = 0, int isolationPT = 0)
0597 : L1TGT_Common3Vector(valid, pT, phi, eta), qualityFlags(qualityFlags), isolationPT(isolationPT) {}
0598
0599 ap_uint<WIDTH> pack() const override {
0600 return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), qualityFlags, isolationPT);
0601 }
0602
0603 static L1TGT_CL2_Photon from_GTObject(const P2GTCandidate& gtObject) {
0604 return L1TGT_CL2_Photon(
0605 1, gtObject.hwPT(), gtObject.hwPhi(), gtObject.hwEta(), gtObject.hwQualityFlags(), gtObject.hwIsolationPT());
0606 }
0607
0608 P2GTCandidate to_GTObject() const override {
0609 P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0610 gt_object.setHwQualityFlags(qualityFlags);
0611 gt_object.setHwIsolationPT(isolationPT);
0612
0613 return gt_object;
0614 }
0615 };
0616 }
0617
0618 #endif