|
5 | 5 | #include "DataFormats/L1Trigger/interface/L1Candidate.h" |
6 | 6 | #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" |
7 | 7 | #include "DataFormats/Common/interface/Ptr.h" |
| 8 | +#include "DataFormats/L1TParticleFlow/interface/jets.h" |
| 9 | +#include "DataFormats/L1TParticleFlow/interface/gt_datatypes.h" |
8 | 10 |
|
9 | 11 | namespace l1t { |
10 | 12 |
|
@@ -38,13 +40,24 @@ namespace l1t { |
38 | 40 | edm::Ptr<l1t::PFCandidate> daughterPtr(size_type i) const { return constituents_[i]; } |
39 | 41 |
|
40 | 42 | // Get and set the encodedJet_ bits. The Jet is encoded in 128 bits as a 2-element array of uint64_t |
41 | | - std::array<uint64_t, 2> encodedJet() { return encodedJet_; } |
42 | | - void setEncodedJet(std::array<uint64_t, 2> jet) { encodedJet_ = jet; } |
| 43 | + // We store encodings both for Correlator internal usage and for Global Trigger |
| 44 | + enum class HWEncoding { CT, GT }; |
| 45 | + typedef std::array<uint64_t, 2> PackedJet; |
| 46 | + const PackedJet& encodedJet(const HWEncoding encoding = HWEncoding::GT) const { |
| 47 | + return encodedJet_[static_cast<int>(encoding)]; |
| 48 | + } |
| 49 | + void setEncodedJet(const HWEncoding encoding, const PackedJet jet) { |
| 50 | + encodedJet_[static_cast<int>(encoding)] = jet; |
| 51 | + } |
| 52 | + |
| 53 | + // Accessors to HW objects with ap_* types from encoded words |
| 54 | + l1gt::Jet getHWJetGT() const { return l1gt::Jet::unpack(encodedJet(HWEncoding::GT)); } |
| 55 | + l1ct::Jet getHWJetCT() const { return l1ct::Jet::unpack(encodedJet(HWEncoding::CT)); } |
43 | 56 |
|
44 | 57 | private: |
45 | 58 | float rawPt_; |
46 | 59 | Constituents constituents_; |
47 | | - std::array<uint64_t, 2> encodedJet_ = {{0, 0}}; |
| 60 | + std::array<PackedJet, 2> encodedJet_ = {{{{0, 0}}, {{0, 0}}}}; |
48 | 61 | }; |
49 | 62 |
|
50 | 63 | typedef std::vector<l1t::PFJet> PFJetCollection; |
|
0 commit comments