File indexing completed on 2025-01-09 23:33:53
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "FWCore/Framework/interface/ConsumesCollector.h"
0013 #include "FWCore/Framework/interface/Event.h"
0014 #include "FWCore/Framework/interface/EventSetup.h"
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016 #include "DataFormats/Common/interface/Handle.h"
0017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0018
0019 #include "RecoMuon/L3MuonProducer/plugins/L3MuonProducer.h"
0020
0021
0022 #include "RecoMuon/L3TrackFinder/interface/L3MuonTrajectoryBuilder.h"
0023 #include "RecoMuon/TrackingTools/interface/MuonTrackFinder.h"
0024 #include "RecoMuon/TrackingTools/interface/MuonTrackLoader.h"
0025 #include "RecoMuon/TrackingTools/interface/MuonServiceProxy.h"
0026 #include "RecoMuon/GlobalTrackingTools/interface/MuonTrackingRegionBuilder.h"
0027
0028 using namespace edm;
0029 using namespace std;
0030
0031
0032
0033
0034 L3MuonProducer::L3MuonProducer(const ParameterSet& parameterSet) {
0035 LogTrace("L3MuonProducer") << "constructor called" << endl;
0036
0037
0038 ParameterSet trajectoryBuilderParameters = parameterSet.getParameter<ParameterSet>("L3TrajBuilderParameters");
0039
0040
0041 theL2CollectionLabel = parameterSet.getParameter<InputTag>("MuonCollectionLabel");
0042 l2MuonToken_ = consumes<reco::TrackCollection>(theL2CollectionLabel);
0043 l2MuonTrajToken_ = consumes<std::vector<Trajectory>>(theL2CollectionLabel.label());
0044 l2AssoMapToken_ = consumes<TrajTrackAssociationCollection>(theL2CollectionLabel.label());
0045 updatedL2AssoMapToken_ = consumes<reco::TrackToTrackMap>(theL2CollectionLabel.label());
0046
0047
0048 ParameterSet serviceParameters = parameterSet.getParameter<ParameterSet>("ServiceParameters");
0049
0050
0051 ParameterSet trackLoaderParameters = parameterSet.getParameter<ParameterSet>("TrackLoaderParameters");
0052
0053
0054 theService = std::make_unique<MuonServiceProxy>(serviceParameters, consumesCollector());
0055 ConsumesCollector iC = consumesCollector();
0056
0057
0058 auto mtl = std::make_unique<MuonTrackLoader>(trackLoaderParameters, iC, theService.get());
0059 auto l3mtb = std::make_unique<L3MuonTrajectoryBuilder>(trajectoryBuilderParameters, theService.get(), iC);
0060 theTrackFinder = std::make_unique<MuonTrackFinder>(std::move(l3mtb), std::move(mtl), iC);
0061
0062 theL2SeededTkLabel =
0063 trackLoaderParameters.getUntrackedParameter<std::string>("MuonSeededTracksInstance", std::string());
0064
0065 produces<TrackingRecHitCollection>(theL2SeededTkLabel);
0066 produces<reco::TrackExtraCollection>(theL2SeededTkLabel);
0067
0068
0069
0070 produces<reco::TrackCollection>(theL2SeededTkLabel);
0071 produces<vector<Trajectory>>(theL2SeededTkLabel);
0072 produces<TrajTrackAssociationCollection>(theL2SeededTkLabel);
0073
0074 produces<TrackingRecHitCollection>();
0075 produces<reco::TrackExtraCollection>();
0076
0077
0078
0079 produces<reco::TrackCollection>();
0080 produces<vector<Trajectory>>();
0081 produces<TrajTrackAssociationCollection>();
0082
0083 produces<reco::MuonTrackLinksCollection>();
0084 }
0085
0086
0087
0088
0089 L3MuonProducer::~L3MuonProducer() { LogTrace("L3MuonProducer") << "destructor called" << endl; }
0090
0091
0092
0093
0094 void L3MuonProducer::produce(Event& event, const EventSetup& eventSetup) {
0095 const string metname = "Muon|RecoMuon|L3MuonProducer";
0096 LogTrace(metname) << endl << endl << endl;
0097 LogTrace(metname) << "L3 Muon Reconstruction started" << endl;
0098
0099 typedef vector<Trajectory> TrajColl;
0100
0101
0102 theService->update(eventSetup);
0103
0104
0105 LogTrace(metname) << "Taking the L2 Muons " << theL2CollectionLabel << endl;
0106
0107 Handle<reco::TrackCollection> L2Muons;
0108 event.getByToken(l2MuonToken_, L2Muons);
0109
0110 Handle<vector<Trajectory>> L2MuonsTraj;
0111 vector<MuonTrajectoryBuilder::TrackCand> L2TrackCands;
0112
0113 event.getByToken(l2MuonTrajToken_, L2MuonsTraj);
0114
0115 edm::Handle<TrajTrackAssociationCollection> L2AssoMap;
0116 event.getByToken(l2AssoMapToken_, L2AssoMap);
0117
0118 edm::Handle<reco::TrackToTrackMap> updatedL2AssoMap;
0119 event.getByToken(updatedL2AssoMapToken_, updatedL2AssoMap);
0120
0121 for (TrajTrackAssociationCollection::const_iterator it = L2AssoMap->begin(); it != L2AssoMap->end(); ++it) {
0122 const Ref<vector<Trajectory>> traj = it->key;
0123 const reco::TrackRef tkRegular = it->val;
0124 reco::TrackRef tkUpdated;
0125 reco::TrackToTrackMap::const_iterator iEnd;
0126 reco::TrackToTrackMap::const_iterator iii;
0127 if (theL2CollectionLabel.instance() == "UpdatedAtVtx") {
0128 iEnd = updatedL2AssoMap->end();
0129 iii = updatedL2AssoMap->find(it->val);
0130 if (iii != iEnd)
0131 tkUpdated = (*updatedL2AssoMap)[it->val];
0132 }
0133
0134 const reco::TrackRef tk = (tkUpdated.isNonnull()) ? tkUpdated : tkRegular;
0135
0136 MuonTrajectoryBuilder::TrackCand L2Cand = MuonTrajectoryBuilder::TrackCand((Trajectory*)nullptr, tk);
0137 if (traj->isValid())
0138 L2Cand.first = &*traj;
0139 L2TrackCands.push_back(L2Cand);
0140 }
0141
0142 theTrackFinder->reconstruct(L2TrackCands, event, eventSetup);
0143
0144 LogTrace(metname) << "Event loaded"
0145 << "================================" << endl
0146 << endl;
0147 }
0148
0149 void L3MuonProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0150 edm::ParameterSetDescription desc;
0151 {
0152 edm::ParameterSetDescription psd0;
0153 psd0.addUntracked<std::vector<std::string>>("Propagators",
0154 {
0155 "hltESPSmartPropagatorAny",
0156 "SteppingHelixPropagatorAny",
0157 "hltESPSmartPropagator",
0158 "hltESPSteppingHelixPropagatorOpposite",
0159 });
0160 psd0.add<bool>("RPCLayers", true);
0161 psd0.addUntracked<bool>("UseMuonNavigation", true);
0162 desc.add<edm::ParameterSetDescription>("ServiceParameters", psd0);
0163 }
0164 desc.add<edm::InputTag>("MuonCollectionLabel", edm::InputTag("hltL2Muons", "UpdatedAtVtx"));
0165 {
0166 edm::ParameterSetDescription psd0;
0167 psd0.addUntracked<bool>("PutTkTrackIntoEvent", false);
0168 psd0.add<std::string>("TTRHBuilder", "hltESPTTRHBWithTrackAngle");
0169 psd0.add<edm::InputTag>("beamSpot", edm::InputTag("hltOnlineBeamSpot"));
0170 psd0.addUntracked<bool>("SmoothTkTrack", false);
0171 psd0.addUntracked<std::string>("MuonSeededTracksInstance", "L2Seeded");
0172 psd0.add<std::string>("Smoother", "hltESPKFTrajectorySmootherForMuonTrackLoader");
0173 {
0174 edm::ParameterSetDescription psd1;
0175 psd1.add<double>("MaxChi2", 1000000.0);
0176 psd1.add<std::string>("Propagator", "hltESPSteppingHelixPropagatorOpposite");
0177 psd1.add<std::vector<double>>("BeamSpotPositionErrors",
0178 {
0179 0.1,
0180 0.1,
0181 5.3,
0182 });
0183 psd0.add<edm::ParameterSetDescription>("MuonUpdatorAtVertexParameters", psd1);
0184 }
0185 psd0.add<bool>("VertexConstraint", false);
0186 psd0.add<bool>("DoSmoothing", false);
0187 desc.add<edm::ParameterSetDescription>("TrackLoaderParameters", psd0);
0188 }
0189 {
0190 edm::ParameterSetDescription psd0;
0191 psd0.add<double>("ScaleTECyFactor", -1.0);
0192 psd0.add<edm::InputTag>("tkTrajVertex", edm::InputTag("hltPixelVertices"));
0193 psd0.add<bool>("tkTrajUseVertex", false);
0194 {
0195 edm::ParameterSetDescription psd1;
0196 psd1.add<int>("TrackerSkipSection", -1);
0197 psd1.add<bool>("DoPredictionsOnly", false);
0198 psd1.add<bool>("PropDirForCosmics", false);
0199 psd1.add<int>("HitThreshold", 1);
0200 psd1.add<int>("MuonHitsOption", 1);
0201 psd1.add<bool>("RefitFlag", true);
0202 psd1.add<std::string>("Fitter", "hltESPL3MuKFTrajectoryFitter");
0203 psd1.add<int>("SkipStation", -1);
0204 psd1.add<std::string>("TrackerRecHitBuilder", "hltESPTTRHBWithTrackAngle");
0205 psd1.add<double>("Chi2CutRPC", 1.0);
0206 psd1.add<std::string>("MuonRecHitBuilder", "hltESPMuonTransientTrackingRecHitBuilder");
0207 psd1.add<std::string>("RefitDirection", "insideOut");
0208 psd1.add<edm::InputTag>("CSCRecSegmentLabel", edm::InputTag("hltCscSegments"));
0209 psd1.add<edm::InputTag>("GEMRecHitLabel", edm::InputTag("gemRecHits"));
0210 psd1.add<edm::InputTag>("ME0RecHitLabel", edm::InputTag("me0Segments"));
0211 psd1.add<std::vector<int>>("DYTthrs",
0212 {
0213 30,
0214 15,
0215 });
0216 psd1.add<int>("DYTselector", 1);
0217 psd1.add<bool>("DYTupdator", false);
0218 psd1.add<bool>("DYTuseAPE", false);
0219 psd1.add<bool>("DYTuseThrsParametrization", true);
0220 {
0221 edm::ParameterSetDescription psd2;
0222 psd2.add<std::vector<double>>("eta0p8", {1, -0.919853, 0.990742});
0223 psd2.add<std::vector<double>>("eta1p2", {1, -0.897354, 0.987738});
0224 psd2.add<std::vector<double>>("eta2p0", {1, -0.986855, 0.998516});
0225 psd2.add<std::vector<double>>("eta2p2", {1, -0.940342, 0.992955});
0226 psd2.add<std::vector<double>>("eta2p4", {1, -0.947633, 0.993762});
0227 psd1.add<edm::ParameterSetDescription>("DYTthrsParameters", psd2);
0228 }
0229 psd1.add<double>("Chi2CutCSC", 150.0);
0230 psd1.add<double>("Chi2CutDT", 10.0);
0231 psd1.add<double>("Chi2CutGEM", 1.0);
0232 psd1.add<double>("Chi2CutME0", 1.0);
0233 psd1.add<bool>("RefitRPCHits", true);
0234 psd1.add<edm::InputTag>("DTRecSegmentLabel", edm::InputTag("hltDt4DSegments"));
0235 psd1.add<std::string>("Propagator", "hltESPSmartPropagatorAny");
0236 psd1.add<int>("TrackerSkipSystem", -1);
0237 psd0.add<edm::ParameterSetDescription>("GlbRefitterParameters", psd1);
0238 }
0239 psd0.add<double>("tkTrajMaxChi2", 9999.0);
0240 psd0.add<double>("ScaleTECxFactor", -1.0);
0241 psd0.add<std::string>("TrackerRecHitBuilder", "hltESPTTRHBWithTrackAngle");
0242 psd0.add<edm::InputTag>("tkTrajBeamSpot", edm::InputTag("hltOnlineBeamSpot"));
0243 psd0.add<std::string>("MuonRecHitBuilder", "hltESPMuonTransientTrackingRecHitBuilder");
0244 psd0.add<double>("tkTrajMaxDXYBeamSpot", 9999.0);
0245 psd0.add<std::string>("TrackerPropagator", "SteppingHelixPropagatorAny");
0246 {
0247 edm::ParameterSetDescription psd1;
0248 psd1.add<bool>("precise", true);
0249 psd1.add<bool>("Eta_fixed", true);
0250 psd1.add<double>("Eta_min", 0.1);
0251 psd1.add<bool>("Z_fixed", false);
0252 psd1.add<edm::InputTag>("MeasurementTrackerName", edm::InputTag("hltESPMeasurementTracker"));
0253 psd1.add<int>("maxRegions", 2);
0254 psd1.add<double>("Pt_min", 3.0);
0255 psd1.add<double>("Rescale_Dz", 4.0);
0256 psd1.add<double>("PhiR_UpperLimit_Par1", 0.6);
0257 psd1.add<double>("PhiR_UpperLimit_Par2", 0.2);
0258 psd1.add<edm::InputTag>("vertexCollection", edm::InputTag("pixelVertices"));
0259 psd1.add<bool>("Phi_fixed", true);
0260 psd1.add<edm::InputTag>("input", edm::InputTag("hltL2Muons", "UpdatedAtVtx"));
0261 psd1.add<double>("DeltaR", 0.025);
0262 psd1.add<int>("OnDemand", -1);
0263 psd1.add<double>("DeltaZ", 24.2);
0264 psd1.add<double>("Rescale_phi", 3.0);
0265 psd1.add<double>("Rescale_eta", 3.0);
0266 psd1.add<double>("DeltaEta", 0.04);
0267 psd1.add<double>("DeltaPhi", 0.15);
0268 psd1.add<double>("Phi_min", 0.1);
0269 psd1.add<bool>("UseVertex", false);
0270 psd1.add<double>("EtaR_UpperLimit_Par1", 0.25);
0271 psd1.add<double>("EtaR_UpperLimit_Par2", 0.15);
0272 psd1.add<edm::InputTag>("beamSpot", edm::InputTag("hltOnlineBeamSpot"));
0273 psd1.add<bool>("Pt_fixed", false);
0274 psd0.add<edm::ParameterSetDescription>("MuonTrackingRegionBuilder", psd1);
0275 }
0276 psd0.add<bool>("RefitRPCHits", true);
0277 psd0.add<double>("PCut", 2.5);
0278 {
0279 edm::ParameterSetDescription psd1;
0280 TrackTransformer::fillPSetDescription(psd1,
0281 false,
0282 "hltESPL3MuKFTrajectoryFitter",
0283 "hltESPKFTrajectorySmootherForMuonTrackLoader",
0284 "hltESPSmartPropagatorAny",
0285 "insideOut",
0286 true,
0287 "hltESPTTRHBWithTrackAngle",
0288 "hltESPMuonTransientTrackingRecHitBuilder"
0289 );
0290 psd0.add<edm::ParameterSetDescription>("TrackTransformer", psd1);
0291 }
0292 {
0293 edm::ParameterSetDescription psd1;
0294 psd1.add<double>("Quality_3", 7.0);
0295 psd1.add<double>("DeltaRCut_1", 0.1);
0296 psd1.add<double>("MinP", 2.5);
0297 psd1.add<double>("MinPt", 1.0);
0298 psd1.add<double>("Quality_2", 15.0);
0299 psd1.add<double>("Pt_threshold2", 999999999.0);
0300 psd1.add<double>("LocChi2Cut", 0.001);
0301 psd1.add<double>("Eta_threshold", 1.2);
0302 psd1.add<double>("Pt_threshold1", 0.0);
0303 psd1.add<double>("Chi2Cut_1", 50.0);
0304 psd1.add<double>("Quality_1", 20.0);
0305 psd1.add<double>("Chi2Cut_3", 200.0);
0306 psd1.add<double>("DeltaRCut_3", 1.0);
0307 psd1.add<double>("DeltaRCut_2", 0.2);
0308 psd1.add<double>("DeltaDCut_1", 40.0);
0309 psd1.add<double>("DeltaDCut_2", 10.0);
0310 psd1.add<double>("DeltaDCut_3", 15.0);
0311 psd1.add<double>("Chi2Cut_2", 50.0);
0312 psd1.add<std::string>("Propagator", "hltESPSmartPropagator");
0313 psd0.add<edm::ParameterSetDescription>("GlobalMuonTrackMatcher", psd1);
0314 }
0315 psd0.add<double>("PtCut", 1.0);
0316 psd0.add<bool>("matchToSeeds", true);
0317 psd0.add<edm::InputTag>("tkTrajLabel", edm::InputTag("hltBRSMuonSeededTracksOutIn"));
0318 desc.add<edm::ParameterSetDescription>("L3TrajBuilderParameters", psd0);
0319 }
0320 descriptions.add("L3MuonProducer", desc);
0321 }
0322
0323 #include "FWCore/Framework/interface/MakerMacros.h"
0324 DEFINE_FWK_MODULE(L3MuonProducer);