Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:23

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  *  Source: CMS level-1 trigger interface specification: Global trigger
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   template <typename A, typename... Args>
0032   A l1t_unpack_int(const A& packed, Args&&... args) {
0033     A temp = packed;
0034     (
0035         [&temp](auto&& arg) {
0036           arg = temp(arg.width - 1, 0);
0037           temp >>= arg.width;
0038         }(std::forward<Args>(args)),
0039         ...);
0040     return temp;
0041   }
0042 
0043   struct L1TGT_BaseInterface {
0044     virtual std::size_t packed_width() const = 0;
0045     virtual P2GTCandidate to_GTObject() const = 0;
0046     virtual ~L1TGT_BaseInterface() {}
0047   };
0048 
0049   template <std::size_t N>
0050   struct L1TGT_Interface : public L1TGT_BaseInterface {
0051     virtual ap_uint<N> pack() const = 0;
0052     virtual ap_uint<N> unpack(const ap_uint<N>&) = 0;
0053 
0054     static constexpr std::size_t WIDTH = N;
0055 
0056     std::size_t packed_width() const override { return WIDTH; }
0057   };
0058 
0059   template <std::size_t N>
0060   struct L1TGT_Common3Vector : public L1TGT_Interface<N> {
0061     ap_uint<1> valid;
0062     ap_uint<16> pT;
0063     ap_int<13> phi;
0064     ap_int<14> eta;
0065 
0066     L1TGT_Common3Vector(int valid = 0, int pT = 0, int phi = 0, int eta = 0)
0067         : valid(valid), pT(pT), phi(phi), eta(eta){};
0068 
0069     virtual ap_uint<44> pack_common() const { return l1t_pack_int<ap_uint<44>>(valid, pT, phi, eta); }
0070 
0071     ap_uint<N> pack() const override { return pack_common(); }
0072 
0073     ap_uint<N> unpack(const ap_uint<N>& packed) override { return l1t_unpack_int(packed, valid, pT, phi, eta); }
0074 
0075     P2GTCandidate to_GTObject() const override {
0076       P2GTCandidate gt_object;
0077       gt_object.setHwPT(pT);
0078       gt_object.setHwPhi(phi);
0079       gt_object.setHwEta(eta);
0080 
0081       return gt_object;
0082     }
0083   };
0084 
0085   template <std::size_t N>
0086   struct L1TGT_CommonSum : public L1TGT_Interface<N> {
0087     ap_uint<1> valid;
0088     ap_uint<16> pT;
0089     ap_int<13> phi;
0090     ap_uint<16> scalar_sum_pT;
0091 
0092     L1TGT_CommonSum(int valid = 0, int pT = 0, int phi = 0, int scalar_sum_pT = 0)
0093         : valid(valid), pT(pT), phi{phi}, scalar_sum_pT(scalar_sum_pT) {}
0094 
0095     ap_uint<46> pack_common() const { return l1t_pack_int<ap_uint<46>>(valid, pT, phi, scalar_sum_pT); }
0096 
0097     ap_uint<N> pack() const override { return pack_common(); }
0098 
0099     ap_uint<N> unpack(const ap_uint<N>& packed) override {
0100       return l1t_unpack_int(packed, valid, pT, phi, scalar_sum_pT);
0101     }
0102 
0103     P2GTCandidate to_GTObject() const override {
0104       P2GTCandidate gt_object;
0105       gt_object.setHwPT(pT);
0106       gt_object.setHwPhi(phi);
0107       gt_object.setHwSca_sum(scalar_sum_pT);
0108 
0109       return gt_object;
0110     }
0111   };
0112 
0113   // Global Calorimeter Trigger
0114 
0115   struct L1TGT_GCT_EgammaNonIsolated6p6 : public L1TGT_Common3Vector<64> {
0116     using L1TGT_Common3Vector::L1TGT_Common3Vector;
0117   };
0118 
0119   struct L1TGT_GCT_EgammaIsolated6p6 : public L1TGT_Common3Vector<64> {
0120     using L1TGT_Common3Vector::L1TGT_Common3Vector;
0121   };
0122 
0123   struct L1TGT_GCT_jet6p6 : public L1TGT_Common3Vector<64> {
0124     using L1TGT_Common3Vector::L1TGT_Common3Vector;
0125   };
0126 
0127   struct L1TGT_GCT_tau6p6 : public L1TGT_Common3Vector<64> {
0128     ap_uint<10> seed_pT;
0129 
0130     L1TGT_GCT_tau6p6(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int seed_pT = 0)
0131         : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT) {}
0132 
0133     ap_uint<WIDTH> pack() const override {
0134       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT);
0135     }
0136 
0137     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0138       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), seed_pT);
0139     }
0140 
0141     P2GTCandidate to_GTObject() const override {
0142       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0143       gt_object.setHwSeed_pT(seed_pT);
0144 
0145       return gt_object;
0146     }
0147   };
0148 
0149   struct L1TGT_GCT_Sum2 : public L1TGT_CommonSum<64> {
0150     using L1TGT_CommonSum::L1TGT_CommonSum;
0151   };
0152 
0153   // Global Muon Trigger
0154 
0155   struct L1TGT_GMT_PromptDisplacedMuon : public L1TGT_Common3Vector<64> {
0156     ap_uint<5> z0;
0157     ap_int<7> d0;
0158     ap_uint<1> charge;
0159     ap_uint<4> qual;
0160 
0161     L1TGT_GMT_PromptDisplacedMuon(
0162         int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0, int d0 = 0, int charge = 0, int qual = 0)
0163         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), d0(d0), charge(charge), qual(qual) {}
0164 
0165     ap_uint<WIDTH> pack() const override {
0166       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, d0, charge, qual);
0167     }
0168 
0169     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0170       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), z0, d0, charge, qual);
0171     }
0172 
0173     P2GTCandidate to_GTObject() const override {
0174       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0175       gt_object.setHwZ0(static_cast<int>(z0) << 5);
0176       gt_object.setHwD0(static_cast<int>(d0) << 5);
0177       gt_object.setHwCharge(charge);
0178       gt_object.setHwQual(qual);
0179 
0180       return gt_object;
0181     }
0182   };
0183 
0184   struct L1TGT_GMT_TrackMatchedmuon : public L1TGT_Common3Vector<96> {
0185     ap_int<10> z0;
0186     ap_int<10> d0;
0187     ap_uint<1> charge;
0188     ap_uint<8> qual;
0189     ap_uint<4> iso;
0190     ap_uint<4> beta;
0191 
0192     L1TGT_GMT_TrackMatchedmuon(int valid = 0,
0193                                int pT = 0,
0194                                int phi = 0,
0195                                int eta = 0,
0196                                int z0 = 0,
0197                                int d0 = 0,
0198                                int charge = 0,
0199                                int qual = 0,
0200                                int iso = 0,
0201                                int beta = 0)
0202         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), d0(d0), charge(charge), qual(qual), iso(iso), beta(beta) {}
0203 
0204     ap_uint<WIDTH> pack() const override {
0205       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, d0, charge, qual, iso, beta);
0206     }
0207 
0208     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0209       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), z0, d0, charge, qual, iso, beta);
0210     }
0211 
0212     P2GTCandidate to_GTObject() const override {
0213       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0214       gt_object.setHwZ0(z0);
0215       gt_object.setHwD0(static_cast<int>(d0) << 2);
0216       gt_object.setHwCharge(charge);
0217       gt_object.setHwQual(qual);
0218       gt_object.setHwIso(static_cast<int>(iso) << 7);
0219       gt_object.setHwBeta(beta);
0220 
0221       return gt_object;
0222     }
0223   };
0224 
0225   struct L1TGT_GMT_TopoObject : public L1TGT_Interface<64> {
0226     ap_uint<1> valid;
0227     ap_uint<8> pT;  // TODO
0228     ap_int<8> eta;
0229     ap_int<8> phi;
0230     ap_uint<8> mass;
0231     ap_uint<6> qual;
0232     // ap_uint<16> /* Index of 3 prongs */;
0233     // ap_uint<3> /* Some other quality */;
0234 
0235     L1TGT_GMT_TopoObject(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int mass = 0, int qual = 0)
0236         : valid(valid), pT(pT), eta(eta), phi(phi), mass(mass), qual(qual) {}
0237 
0238     ap_uint<WIDTH> pack() const override { return l1t_pack_int<ap_uint<WIDTH>>(valid, pT, eta, phi, mass, qual); }
0239 
0240     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0241       return l1t_unpack_int(packed, valid, pT, eta, phi, mass, qual);
0242     }
0243 
0244     P2GTCandidate to_GTObject() const override {
0245       P2GTCandidate gt_object;
0246       gt_object.setHwPT(static_cast<int>(pT) * 5);  // TODO
0247       gt_object.setHwPhi(static_cast<int>(phi) << 5);
0248       gt_object.setHwEta(static_cast<int>(eta) << 5);
0249       gt_object.setHwMass(mass);
0250       gt_object.setHwQual(qual);
0251 
0252       return gt_object;
0253     }
0254   };
0255 
0256   // Global Track Trigger
0257 
0258   struct L1TGT_GTT_PromptJet : public L1TGT_Common3Vector<128> {
0259     ap_int<10> z0;
0260     ap_uint<5> number_of_tracks;
0261     // ap_uint<5> /* unassigned */;
0262 
0263     L1TGT_GTT_PromptJet(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0, int number_of_tracks = 0)
0264         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), number_of_tracks(number_of_tracks) {}
0265 
0266     ap_uint<WIDTH> pack() const override {
0267       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, number_of_tracks);
0268     }
0269 
0270     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0271       return l1t_unpack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::unpack(packed), z0, number_of_tracks);
0272     }
0273 
0274     P2GTCandidate to_GTObject() const override {
0275       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0276       gt_object.setHwZ0(z0);
0277       gt_object.setHwNumber_of_tracks(number_of_tracks);
0278 
0279       return gt_object;
0280     }
0281   };
0282 
0283   struct L1TGT_GTT_DisplacedJet : public L1TGT_Common3Vector<128> {
0284     ap_int<10> z0;
0285     ap_uint<5> number_of_tracks;
0286     // ap_uint<5> /* unassigned */;
0287     ap_int<12> d0;
0288 
0289     L1TGT_GTT_DisplacedJet(
0290         int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0, int number_of_tracks = 0, int d0 = 0)
0291         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0), number_of_tracks(number_of_tracks), d0(d0) {}
0292 
0293     ap_uint<WIDTH> pack() const override {
0294       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0, number_of_tracks, ap_uint<5>(0), d0);
0295     }
0296 
0297     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0298       return l1t_unpack_int<ap_uint<WIDTH>>(
0299           L1TGT_Common3Vector::unpack(packed), z0, number_of_tracks, ap_uint<5>(0), d0);
0300     }
0301 
0302     P2GTCandidate to_GTObject() const override {
0303       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0304       gt_object.setHwZ0(z0);
0305       gt_object.setHwNumber_of_tracks(number_of_tracks);
0306       gt_object.setHwD0(d0);
0307 
0308       return gt_object;
0309     }
0310   };
0311 
0312   struct L1TGT_GTT_Sum : public L1TGT_CommonSum<64> {
0313     using L1TGT_CommonSum::L1TGT_CommonSum;
0314   };
0315 
0316   struct L1TGT_GTT_HadronicTau : public L1TGT_Common3Vector<96> {
0317     ap_uint<10> seed_pT;
0318     ap_int<10> seed_z0;
0319     ap_uint<1> charge;
0320     ap_uint<2> type;
0321 
0322     L1TGT_GTT_HadronicTau(int valid = 0,
0323                           int pT = 0,
0324                           int phi = 0,
0325                           int eta = 0,
0326                           int seed_pT = 0,
0327                           int seed_z0 = 0,
0328                           int charge = 0,
0329                           int type = 0)
0330         : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT), seed_z0(seed_z0), charge(charge), type(type) {}
0331 
0332     ap_uint<WIDTH> pack() const override {
0333       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT, seed_z0, charge, type);
0334     }
0335 
0336     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0337       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), seed_pT, seed_z0, charge, type);
0338     }
0339 
0340     P2GTCandidate to_GTObject() const override {
0341       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0342       gt_object.setHwSeed_pT(seed_pT);
0343       gt_object.setHwSeed_z0(seed_z0);
0344       gt_object.setHwCharge(charge);
0345       gt_object.setHwType(type);
0346 
0347       return gt_object;
0348     }
0349   };
0350 
0351   struct L1TGT_GTT_LightMeson : public L1TGT_Common3Vector<96> {
0352     ap_int<10> z0;
0353     //ap_uint<10> /* candidate mass */;
0354     //ap_uint<2> /* candidate type */;
0355     //ap_uint<3> /* nbr of tracks */;
0356 
0357     L1TGT_GTT_LightMeson(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0)
0358         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0) {}
0359 
0360     ap_uint<WIDTH> pack() const override {
0361       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0);
0362     }
0363 
0364     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0365       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), z0);
0366     }
0367 
0368     P2GTCandidate to_GTObject() const override {
0369       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0370       gt_object.setHwZ0(z0);
0371 
0372       return gt_object;
0373     }
0374   };
0375 
0376   struct L1TGT_GTT_PrimaryVert : public L1TGT_Interface<64> {
0377     ap_uint<1> valid;
0378     ap_int<15> z0;
0379     ap_uint<8> number_of_tracks_in_pv;
0380     ap_uint<12> sum_pT_pv;
0381     ap_uint<3> qual;
0382     ap_uint<10> number_of_tracks_not_in_pv;
0383     // ap_uint<15> /* unassigned */;
0384 
0385     L1TGT_GTT_PrimaryVert(int valid = 0,
0386                           int z0 = 0,
0387                           int number_of_tracks_in_pv = 0,
0388                           int sum_pT_pv = 0,
0389                           int qual = 0,
0390                           int number_of_tracks_not_in_pv = 0)
0391         : valid(valid),
0392           z0(z0),
0393           number_of_tracks_in_pv(number_of_tracks_in_pv),
0394           sum_pT_pv(sum_pT_pv),
0395           qual(qual),
0396           number_of_tracks_not_in_pv(number_of_tracks_not_in_pv) {}
0397 
0398     ap_uint<WIDTH> pack() const override {
0399       return l1t_pack_int<ap_uint<WIDTH>>(
0400           valid, z0 /*, number_of_tracks_in_pv, sum_pT_pv, qual, number_of_tracks_not_in_pv */);  // TODO: Maybe later
0401     }
0402 
0403     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0404       return l1t_unpack_int(packed, valid, z0, number_of_tracks_in_pv, sum_pT_pv, qual, number_of_tracks_not_in_pv);
0405     }
0406 
0407     P2GTCandidate to_GTObject() const override {
0408       P2GTCandidate gt_object;
0409       gt_object.setHwZ0(z0);
0410       gt_object.setHwNumber_of_tracks_in_pv(number_of_tracks_in_pv);
0411       gt_object.setHwSum_pT_pv(sum_pT_pv);
0412       gt_object.setHwQual(qual);
0413       gt_object.setHwNumber_of_tracks_not_in_pv(number_of_tracks_not_in_pv);
0414 
0415       return gt_object;
0416     }
0417   };
0418 
0419   // Correlator Layer-2
0420 
0421   struct L1TGT_CL2_Jet : public L1TGT_Common3Vector<128> {
0422     ap_int<10> z0;
0423 
0424     L1TGT_CL2_Jet(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int z0 = 0)
0425         : L1TGT_Common3Vector(valid, pT, phi, eta), z0(z0) {}
0426 
0427     ap_uint<WIDTH> pack() const override {
0428       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), z0);
0429     }
0430 
0431     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0432       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), z0);
0433     }
0434 
0435     P2GTCandidate to_GTObject() const override {
0436       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0437       gt_object.setHwZ0(z0);
0438 
0439       return gt_object;
0440     }
0441   };
0442 
0443   struct L1TGT_CL2_Sum : public L1TGT_CommonSum<64> {
0444     using L1TGT_CommonSum::L1TGT_CommonSum;
0445   };
0446 
0447   struct L1TGT_CL2_Tau : public L1TGT_Common3Vector<96> {
0448     ap_uint<10> seed_pT;
0449     ap_int<10> seed_z0;
0450     ap_uint<1> charge;
0451     ap_uint<2> type;
0452     //ap_uint<10> /* MVA Id / Isol */;
0453     //ap_uint<2> /* Id vs Mu */;
0454     //ap_uint<2> /* Id vs Mu */;
0455 
0456     L1TGT_CL2_Tau(int valid = 0,
0457                   int pT = 0,
0458                   int phi = 0,
0459                   int eta = 0,
0460                   int seed_pT = 0,
0461                   int seed_z0 = 0,
0462                   int charge = 0,
0463                   int type = 0)
0464         : L1TGT_Common3Vector(valid, pT, phi, eta), seed_pT(seed_pT), seed_z0(seed_z0), charge(charge), type(type) {}
0465 
0466     ap_uint<WIDTH> pack() const override {
0467       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), seed_pT, seed_z0, charge, type);
0468     }
0469 
0470     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0471       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), seed_pT, seed_z0, charge, type);
0472     }
0473 
0474     P2GTCandidate to_GTObject() const override {
0475       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0476       gt_object.setHwSeed_pT(seed_pT);
0477       gt_object.setHwSeed_z0(seed_z0);
0478       gt_object.setHwCharge(charge);
0479       gt_object.setHwType(type);
0480 
0481       return gt_object;
0482     }
0483   };
0484 
0485   struct L1TGT_CL2_Electron : public L1TGT_Common3Vector<96> {
0486     ap_uint<4> qual;
0487     ap_uint<11> iso;
0488     ap_uint<1> charge;
0489     ap_int<10> z0;
0490 
0491     L1TGT_CL2_Electron(
0492         int valid = 0, int pT = 0, int phi = 0, int eta = 0, int qual = 0, int iso = 0, int charge = 0, int z0 = 0)
0493         : L1TGT_Common3Vector(valid, pT, phi, eta), qual(qual), iso(iso), charge(charge), z0(z0) {}
0494 
0495     ap_uint<WIDTH> pack() const override {
0496       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), qual, iso, charge, z0);
0497     }
0498 
0499     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0500       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), qual, iso, charge, z0);
0501     }
0502 
0503     P2GTCandidate to_GTObject() const override {
0504       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0505       gt_object.setHwQual(qual);
0506       gt_object.setHwIso(iso);
0507       gt_object.setHwCharge(charge);
0508       gt_object.setHwZ0(z0);
0509 
0510       return gt_object;
0511     }
0512   };
0513 
0514   struct L1TGT_CL2_Photon : public L1TGT_Common3Vector<96> {
0515     ap_uint<4> qual;
0516     ap_uint<11> iso;
0517 
0518     L1TGT_CL2_Photon(int valid = 0, int pT = 0, int phi = 0, int eta = 0, int qual = 0, int iso = 0)
0519         : L1TGT_Common3Vector(valid, pT, phi, eta), qual(qual), iso(iso) {}
0520 
0521     ap_uint<WIDTH> pack() const override {
0522       return l1t_pack_int<ap_uint<WIDTH>>(L1TGT_Common3Vector::pack_common(), qual, iso);
0523     }
0524 
0525     ap_uint<WIDTH> unpack(const ap_uint<WIDTH>& packed) override {
0526       return l1t_unpack_int(L1TGT_Common3Vector::unpack(packed), qual, iso);
0527     }
0528 
0529     P2GTCandidate to_GTObject() const override {
0530       P2GTCandidate gt_object(L1TGT_Common3Vector::to_GTObject());
0531       gt_object.setHwQual(qual);
0532       gt_object.setHwIso(iso);
0533 
0534       return gt_object;
0535     }
0536   };
0537 }  // namespace l1t
0538 
0539 #endif  // L1Trigger_Phase2L1GT_L1GTEvaluationInterface_h