File indexing completed on 2024-04-06 12:18:37
0001 #ifndef HLTMuonL2ToL1TMap_h
0002 #define HLTMuonL2ToL1TMap_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include "DataFormats/TrackReco/interface/Track.h"
0014 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0015 #include "DataFormats/MuonSeed/interface/L2MuonTrajectorySeedCollection.h"
0016 #include "DataFormats/Common/interface/AssociationMap.h"
0017 #include "DataFormats/Common/interface/OneToMany.h"
0018 #include "DataFormats/Common/interface/Handle.h"
0019 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
0020 #include "DataFormats/L1Trigger/interface/Muon.h"
0021
0022 #include "FWCore/Framework/interface/Event.h"
0023 #include "FWCore/Utilities/interface/EDGetToken.h"
0024
0025 typedef edm::AssociationMap<edm::OneToMany<std::vector<L2MuonTrajectorySeed>, std::vector<L2MuonTrajectorySeed> > >
0026 SeedMap;
0027
0028 class HLTMuonL2ToL1TMap {
0029 public:
0030
0031 explicit HLTMuonL2ToL1TMap(const edm::EDGetTokenT<trigger::TriggerFilterObjectWithRefs>& previousCandToken,
0032 const edm::EDGetTokenT<SeedMap> seedMapToken,
0033 const edm::Event& iEvent) {
0034
0035 edm::Handle<trigger::TriggerFilterObjectWithRefs> previousLevelCands;
0036 iEvent.getByToken(previousCandToken, previousLevelCands);
0037 previousLevelCands->getObjects(trigger::TriggerL1Mu, firedL1Muons_);
0038
0039
0040 iEvent.getByToken(seedMapToken, seedMapHandle_);
0041 }
0042
0043 ~HLTMuonL2ToL1TMap() {}
0044
0045
0046 bool isTriggeredByL1(reco::TrackRef& l2muon) {
0047 bool isTriggered = false;
0048 const edm::RefVector<L2MuonTrajectorySeedCollection>& seeds =
0049 (*seedMapHandle_)[l2muon->seedRef().castTo<edm::Ref<L2MuonTrajectorySeedCollection> >()];
0050 for (size_t i = 0; i < seeds.size(); i++) {
0051 if (find(firedL1Muons_.begin(), firedL1Muons_.end(), seeds[i]->l1tParticle()) != firedL1Muons_.end()) {
0052 isTriggered = true;
0053 break;
0054 }
0055 }
0056 return isTriggered;
0057 }
0058
0059
0060 std::string getL1Keys(reco::TrackRef& l2muon) {
0061 std::ostringstream ss;
0062 const edm::RefVector<L2MuonTrajectorySeedCollection>& seeds =
0063 (*seedMapHandle_)[l2muon->seedRef().castTo<edm::Ref<L2MuonTrajectorySeedCollection> >()];
0064 for (size_t i = 0; i < seeds.size(); i++) {
0065 ss << seeds[i]->l1tParticle().key() << " ";
0066 }
0067 return ss.str();
0068 }
0069
0070 private:
0071
0072 std::vector<l1t::MuonRef> firedL1Muons_;
0073
0074
0075 edm::Handle<SeedMap> seedMapHandle_;
0076 };
0077
0078 #endif