36 LogTrace(
"L3MuonProducer") <<
"constructor called" << endl;
43 l2MuonToken_ = consumes<reco::TrackCollection>(theL2CollectionLabel);
44 l2MuonTrajToken_ = consumes<std::vector<Trajectory>>(theL2CollectionLabel.label());
45 l2AssoMapToken_ = consumes<TrajTrackAssociationCollection>(theL2CollectionLabel.label());
46 updatedL2AssoMapToken_ = consumes<reco::TrackToTrackMap>(theL2CollectionLabel.label());
55 theService = std::make_unique<MuonServiceProxy>(serviceParameters, consumesCollector());
59 auto mtl = std::make_unique<MuonTrackLoader>(trackLoaderParameters, iC, theService.get());
60 auto l3mtb = std::make_unique<L3MuonTrajectoryBuilder>(trajectoryBuilderParameters, theService.get(), iC);
61 theTrackFinder = std::make_unique<MuonTrackFinder>(
std::move(l3mtb),
std::move(mtl), iC);
66 produces<reco::TrackCollection>(theL2SeededTkLabel);
67 produces<TrackingRecHitCollection>(theL2SeededTkLabel);
68 produces<reco::TrackExtraCollection>(theL2SeededTkLabel);
69 produces<vector<Trajectory>>(theL2SeededTkLabel);
70 produces<TrajTrackAssociationCollection>(theL2SeededTkLabel);
72 produces<reco::TrackCollection>();
73 produces<TrackingRecHitCollection>();
74 produces<reco::TrackExtraCollection>();
75 produces<vector<Trajectory>>();
76 produces<TrajTrackAssociationCollection>();
78 produces<reco::MuonTrackLinksCollection>();
90 const string metname =
"Muon|RecoMuon|L3MuonProducer";
91 LogTrace(metname) << endl << endl << endl;
92 LogTrace(metname) <<
"L3 Muon Reconstruction started" << endl;
94 typedef vector<Trajectory> TrajColl;
97 theService->update(eventSetup);
100 LogTrace(metname) <<
"Taking the L2 Muons " << theL2CollectionLabel << endl;
103 event.getByToken(l2MuonToken_, L2Muons);
106 vector<MuonTrajectoryBuilder::TrackCand> L2TrackCands;
108 event.getByToken(l2MuonTrajToken_, L2MuonsTraj);
111 event.getByToken(l2AssoMapToken_, L2AssoMap);
114 event.getByToken(updatedL2AssoMapToken_, updatedL2AssoMap);
122 if (theL2CollectionLabel.instance() ==
"UpdatedAtVtx") {
123 iEnd = updatedL2AssoMap->end();
124 iii = updatedL2AssoMap->find(it->val);
126 tkUpdated = (*updatedL2AssoMap)[it->val];
133 L2Cand.first = &*traj;
134 L2TrackCands.push_back(L2Cand);
137 theTrackFinder->reconstruct(L2TrackCands, event, eventSetup);
140 <<
"================================" << endl
148 psd0.
addUntracked<std::vector<std::string>>(
"Propagators",
150 "hltESPSmartPropagatorAny",
151 "SteppingHelixPropagatorAny",
152 "hltESPSmartPropagator",
153 "hltESPSteppingHelixPropagatorOpposite",
155 psd0.
add<
bool>(
"RPCLayers",
true);
163 psd0.
add<
std::string>(
"TTRHBuilder",
"hltESPTTRHBWithTrackAngle");
167 psd0.
add<
std::string>(
"Smoother",
"hltESPKFTrajectorySmootherForMuonTrackLoader");
170 psd1.
add<
double>(
"MaxChi2", 1000000.0);
171 psd1.
add<
std::string>(
"Propagator",
"hltESPSteppingHelixPropagatorOpposite");
172 psd1.
add<std::vector<double>>(
"BeamSpotPositionErrors",
180 psd0.
add<
bool>(
"VertexConstraint",
false);
181 psd0.
add<
bool>(
"DoSmoothing",
false);
186 psd0.
add<
double>(
"ScaleTECyFactor", -1.0);
188 psd0.
add<
bool>(
"tkTrajUseVertex",
false);
191 psd1.
add<
int>(
"TrackerSkipSection", -1);
192 psd1.
add<
bool>(
"DoPredictionsOnly",
false);
193 psd1.
add<
bool>(
"PropDirForCosmics",
false);
194 psd1.
add<
int>(
"HitThreshold", 1);
195 psd1.
add<
int>(
"MuonHitsOption", 1);
196 psd1.
add<
bool>(
"RefitFlag",
true);
198 psd1.
add<
int>(
"SkipStation", -1);
199 psd1.
add<
std::string>(
"TrackerRecHitBuilder",
"hltESPTTRHBWithTrackAngle");
200 psd1.
add<
double>(
"Chi2CutRPC", 1.0);
201 psd1.
add<
std::string>(
"MuonRecHitBuilder",
"hltESPMuonTransientTrackingRecHitBuilder");
206 psd1.
add<std::vector<int>>(
"DYTthrs",
211 psd1.
add<
int>(
"DYTselector", 1);
212 psd1.
add<
bool>(
"DYTupdator",
false);
213 psd1.
add<
bool>(
"DYTuseAPE",
false);
214 psd1.
add<
bool>(
"DYTuseThrsParametrization",
true);
217 psd2.
add<std::vector<double>>(
"eta0p8", {1, -0.919853, 0.990742});
218 psd2.
add<std::vector<double>>(
"eta1p2", {1, -0.897354, 0.987738});
219 psd2.
add<std::vector<double>>(
"eta2p0", {1, -0.986855, 0.998516});
220 psd2.
add<std::vector<double>>(
"eta2p2", {1, -0.940342, 0.992955});
221 psd2.
add<std::vector<double>>(
"eta2p4", {1, -0.947633, 0.993762});
224 psd1.
add<
double>(
"Chi2CutCSC", 150.0);
225 psd1.
add<
double>(
"Chi2CutDT", 10.0);
226 psd1.
add<
double>(
"Chi2CutGEM", 1.0);
227 psd1.
add<
double>(
"Chi2CutME0", 1.0);
228 psd1.
add<
bool>(
"RefitRPCHits",
true);
231 psd1.
add<
int>(
"TrackerSkipSystem", -1);
234 psd0.
add<
double>(
"tkTrajMaxChi2", 9999.0);
235 psd0.
add<
double>(
"ScaleTECxFactor", -1.0);
236 psd0.
add<
std::string>(
"TrackerRecHitBuilder",
"hltESPTTRHBWithTrackAngle");
238 psd0.
add<
std::string>(
"MuonRecHitBuilder",
"hltESPMuonTransientTrackingRecHitBuilder");
239 psd0.
add<
double>(
"tkTrajMaxDXYBeamSpot", 9999.0);
240 psd0.
add<
std::string>(
"TrackerPropagator",
"SteppingHelixPropagatorAny");
243 psd1.
add<
bool>(
"precise",
true);
244 psd1.
add<
bool>(
"Eta_fixed",
true);
245 psd1.
add<
double>(
"Eta_min", 0.1);
246 psd1.
add<
bool>(
"Z_fixed",
false);
248 psd1.
add<
int>(
"maxRegions", 2);
249 psd1.
add<
double>(
"Pt_min", 3.0);
250 psd1.
add<
double>(
"Rescale_Dz", 4.0);
251 psd1.
add<
double>(
"PhiR_UpperLimit_Par1", 0.6);
252 psd1.
add<
double>(
"PhiR_UpperLimit_Par2", 0.2);
254 psd1.
add<
bool>(
"Phi_fixed",
true);
256 psd1.
add<
double>(
"DeltaR", 0.025);
257 psd1.
add<
int>(
"OnDemand", -1);
258 psd1.
add<
double>(
"DeltaZ", 24.2);
259 psd1.
add<
double>(
"Rescale_phi", 3.0);
260 psd1.
add<
double>(
"Rescale_eta", 3.0);
261 psd1.
add<
double>(
"DeltaEta", 0.04);
262 psd1.
add<
double>(
"DeltaPhi", 0.15);
263 psd1.
add<
double>(
"Phi_min", 0.1);
264 psd1.
add<
bool>(
"UseVertex",
false);
265 psd1.
add<
double>(
"EtaR_UpperLimit_Par1", 0.25);
266 psd1.
add<
double>(
"EtaR_UpperLimit_Par2", 0.15);
268 psd1.
add<
bool>(
"Pt_fixed",
false);
271 psd0.
add<
bool>(
"RefitRPCHits",
true);
272 psd0.
add<
double>(
"PCut", 2.5);
277 "hltESPL3MuKFTrajectoryFitter",
278 "hltESPKFTrajectorySmootherForMuonTrackLoader",
279 "hltESPSmartPropagatorAny",
282 "hltESPTTRHBWithTrackAngle",
283 "hltESPMuonTransientTrackingRecHitBuilder"
289 psd1.
add<
double>(
"Quality_3", 7.0);
290 psd1.
add<
double>(
"DeltaRCut_1", 0.1);
291 psd1.
add<
double>(
"MinP", 2.5);
292 psd1.
add<
double>(
"MinPt", 1.0);
293 psd1.
add<
double>(
"Quality_2", 15.0);
294 psd1.
add<
double>(
"Pt_threshold2", 999999999.0);
295 psd1.
add<
double>(
"LocChi2Cut", 0.001);
296 psd1.
add<
double>(
"Eta_threshold", 1.2);
297 psd1.
add<
double>(
"Pt_threshold1", 0.0);
298 psd1.
add<
double>(
"Chi2Cut_1", 50.0);
299 psd1.
add<
double>(
"Quality_1", 20.0);
300 psd1.
add<
double>(
"Chi2Cut_3", 200.0);
301 psd1.
add<
double>(
"DeltaRCut_3", 1.0);
302 psd1.
add<
double>(
"DeltaRCut_2", 0.2);
303 psd1.
add<
double>(
"DeltaDCut_1", 40.0);
304 psd1.
add<
double>(
"DeltaDCut_2", 10.0);
305 psd1.
add<
double>(
"DeltaDCut_3", 15.0);
306 psd1.
add<
double>(
"Chi2Cut_2", 50.0);
310 psd0.
add<
double>(
"PtCut", 1.0);
311 psd0.
add<
bool>(
"matchToSeeds",
true);
315 descriptions.
add(
"L3MuonProducer", desc);
bool isNonnull() const
Checks for non-null.
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
std::pair< const Trajectory *, reco::TrackRef > TrackCand
friend struct const_iterator
const std::string metname
key_type key() const
Accessor for product key.
ParameterSet const & parameterSet(StableProvenance const &provenance, ProcessHistory const &history)
void produce(edm::Event &, const edm::EventSetup &) override
reconstruct muons
ParameterDescriptionBase * add(U const &iLabel, T const &value)
L3MuonProducer(const edm::ParameterSet &)
constructor with config
T getParameter(std::string const &) const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
~L3MuonProducer() override
destructor