File indexing completed on 2024-04-06 12:25:20
0001 #ifndef RecoHI_HiTracking_HIMuonTrackingRegionProducer_H
0002 #define RecoHI_HiTracking_HIMuonTrackingRegionProducer_H
0003
0004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0005 #include "FWCore/Framework/interface/ConsumesCollector.h"
0006
0007 #include "RecoTracker/TkTrackingRegions/interface/TrackingRegionProducer.h"
0008 #include "RecoTracker/TkTrackingRegions/interface/RectangularEtaPhiTrackingRegion.h"
0009 #include "RecoMuon/GlobalTrackingTools/interface/MuonTrackingRegionBuilder.h"
0010
0011 #include "DataFormats/TrackReco/interface/Track.h"
0012 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0013
0014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016
0017 class HIMuonTrackingRegionProducer : public TrackingRegionProducer {
0018 public:
0019 HIMuonTrackingRegionProducer(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC) {
0020
0021 theMuonSource = cfg.getParameter<edm::InputTag>("MuonSrc");
0022 theMuonSourceToken = iC.consumes<reco::TrackCollection>(theMuonSource);
0023
0024
0025 edm::ParameterSet regionBuilderPSet = cfg.getParameter<edm::ParameterSet>("MuonTrackingRegionBuilder");
0026 theRegionBuilder = new MuonTrackingRegionBuilder(regionBuilderPSet, iC);
0027
0028
0029 edm::ParameterSet servicePSet = cfg.getParameter<edm::ParameterSet>("ServiceParameters");
0030 }
0031
0032 ~HIMuonTrackingRegionProducer() override {}
0033
0034 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0035 edm::ParameterSetDescription desc;
0036
0037 desc.add<edm::InputTag>("MuonSrc", edm::InputTag(""));
0038
0039 edm::ParameterSetDescription descRegion;
0040 MuonTrackingRegionBuilder::fillDescriptionsOffline(descRegion);
0041 desc.add("MuonTrackingRegionBuilder", descRegion);
0042
0043 edm::ParameterSetDescription descService;
0044 descService.setAllowAnything();
0045 desc.add<edm::ParameterSetDescription>("ServiceParameters", descService);
0046
0047 descriptions.add("HiTrackingRegionEDProducer", desc);
0048 }
0049
0050 std::vector<std::unique_ptr<TrackingRegion> > regions(const edm::Event& ev,
0051 const edm::EventSetup& es) const override {
0052
0053 std::vector<std::unique_ptr<TrackingRegion> > result;
0054
0055
0056 theRegionBuilder->setEvent(ev, es);
0057
0058
0059 edm::Handle<reco::TrackCollection> muonH;
0060 ev.getByToken(theMuonSourceToken, muonH);
0061
0062
0063
0064 unsigned int nMuons = muonH->size();
0065
0066
0067
0068
0069
0070 for (unsigned int imu = 0; imu < nMuons; imu++) {
0071 reco::TrackRef muRef(muonH, imu);
0072
0073 result.push_back(theRegionBuilder->region(muRef));
0074 }
0075
0076 return result;
0077 }
0078
0079 private:
0080 edm::InputTag theMuonSource;
0081 edm::EDGetTokenT<reco::TrackCollection> theMuonSourceToken;
0082 MuonTrackingRegionBuilder* theRegionBuilder;
0083 };
0084
0085 #endif