26 includeZeroHitMuons(conf.getParameter<bool>(
"includeZeroHitMuons")),
27 acceptOneStubMatchings(conf.getParameter<bool>(
"acceptOneStubMatchings")),
28 UseTracker(conf.getParameter<bool>(
"UseTracker")),
29 UseMuon(conf.getParameter<bool>(
"UseMuon")),
30 AbsoluteNumberOfHits_track(conf.getParameter<bool>(
"AbsoluteNumberOfHits_track")),
31 NHitCut_track(conf.getParameter<unsigned int>(
"NHitCut_track")),
32 EfficiencyCut_track(conf.getParameter<double>(
"EfficiencyCut_track")),
33 PurityCut_track(conf.getParameter<double>(
"PurityCut_track")),
34 AbsoluteNumberOfHits_muon(conf.getParameter<bool>(
"AbsoluteNumberOfHits_muon")),
35 NHitCut_muon(conf.getParameter<unsigned int>(
"NHitCut_muon")),
36 EfficiencyCut_muon(conf.getParameter<double>(
"EfficiencyCut_muon")),
37 PurityCut_muon(conf.getParameter<double>(
"PurityCut_muon")),
38 UsePixels(conf.getParameter<bool>(
"UsePixels")),
39 UseGrouped(conf.getParameter<bool>(
"UseGrouped")),
40 UseSplitting(conf.getParameter<bool>(
"UseSplitting")),
41 ThreeHitTracksAreSpecial(conf.getParameter<bool>(
"ThreeHitTracksAreSpecial")),
42 dumpDT(conf.getParameter<bool>(
"dumpDT")),
43 dumpInputCollections(conf.getParameter<bool>(
"dumpInputCollections")),
44 crossingframe(conf.getParameter<bool>(
"crossingframe")),
45 simtracksTag(conf.getParameter<edm::InputTag>(
"simtracksTag")),
46 simtracksXFTag(conf.getParameter<edm::InputTag>(
"simtracksXFTag")),
52 if (
UseTracker)
edm::LogVerbatim(
"MuonAssociatorByHits")<<
"\n UseTracker = TRUE : Tracker SimHits and RecHits WILL be counted";
53 else edm::LogVerbatim(
"MuonAssociatorByHits") <<
"\n UseTracker = FALSE : Tracker SimHits and RecHits WILL NOT be counted";
56 if (
UseMuon)
edm::LogVerbatim(
"MuonAssociatorByHits")<<
" UseMuon = TRUE : Muon SimHits and RecHits WILL be counted";
57 else edm::LogVerbatim(
"MuonAssociatorByHits") <<
" UseMuon = FALSE : Muon SimHits and RecHits WILL NOT be counted"<<endl;
62 <<
"\n includeZeroHitMuons = TRUE"
63 <<
"\n ==> (re)set NHitCut_muon = 0, PurityCut_muon = 0, EfficiencyCut_muon = 0"<<endl;
83 tH.push_back(std::make_pair((*it)->recHitsBegin(), (*it)->recHitsEnd()));
87 for (IndexAssociation::const_iterator it = bareAssoc.begin(), ed = bareAssoc.end(); it != ed; ++it) {
88 for (std::vector<IndexMatch>::const_iterator itma = it->second.begin(), edma = it->second.end(); itma != edma; ++itma) {
94 return outputCollection;
102 int tracker_nshared = 0;
103 int muon_nshared = 0;
104 int global_nshared = 0;
106 double tracker_quality = 0;
107 double tracker_quality_cut;
111 double muon_quality = 0;
112 double muon_quality_cut;
116 double global_quality = 0;
135 if (TPCollectionH.
size()!=0) tPC = *(TPCollectionH.
product());
139 edm::LogVerbatim(
"MuonAssociatorByHits")<<
"\n"<<
"reco::Track collection --- size = "<<tC.size();
143 edm::LogVerbatim(
"MuonAssociatorByHits")<<
"\n"<<
"TrackingParticle collection --- size = "<<tPC.size();
145 for(TrackingParticleCollection::const_iterator ITER=tPC.begin(); ITER!=tPC.end(); ITER++, j++) {
147 <<
"TrackingParticle "<<j<<
", q = "<<ITER->charge()<<
", p = "<<ITER->p()
148 <<
", pT = "<<ITER->pt()<<
", eta = "<<ITER->eta()<<
", phi = "<<ITER->phi();
151 <<
"\t pdg code = "<<ITER->pdgId()<<
", made of "<<ITER->trackPSimHit().size()<<
" PSimHit"
152 <<
" (in "<<ITER->matchedHit()<<
" layers)"
153 <<
" from "<<ITER->g4Tracks().size()<<
" SimTrack:";
156 <<
"\t\t Id:"<<g4T->trackId()<<
"/Evt:("<<g4T->eventId().event()<<
","<<g4T->eventId().bunchCrossing()<<
")";
172 <<
" has size = "<<SimTk->size();
177 <<
" - Id:"<<ITER->trackId()<<
"/Evt:("<<ITER->eventId().event()<<
","<<ITER->eventId().bunchCrossing()<<
")"
178 <<
" pdgId = "<<ITER->type()<<
", q = "<<ITER->charge()<<
", p = "<<ITER->momentum().P()
179 <<
", pT = "<<ITER->momentum().Pt()<<
", eta = "<<ITER->momentum().Eta()<<
", phi = "<<ITER->momentum().Phi()
180 <<
"\n * "<<*ITER <<endl;
185 <<
" has size = "<<SimVtx->size();
190 <<
" : "<< *VITER <<endl;
197 <<
" has size = "<<simTC.size()<<endl;
199 for(edm::SimTrackContainer::const_iterator ITER=simTC.begin(); ITER!=simTC.end(); ITER++, k++){
202 <<
" - Id:"<<ITER->trackId()<<
"/Evt:("<<ITER->eventId().event()<<
","<<ITER->eventId().bunchCrossing()<<
")"
203 <<
" pdgId = "<<ITER->type()<<
", q = "<<ITER->charge()<<
", p = "<<ITER->momentum().P()
204 <<
", pT = "<<ITER->momentum().Pt()<<
", eta = "<<ITER->momentum().Eta()<<
", phi = "<<ITER->momentum().Phi()
205 <<
"\n * "<<*ITER <<endl;
207 e->
getByLabel(
"g4SimHits",simVertexCollection);
209 edm::LogVerbatim(
"MuonAssociatorByHits")<<
"\n"<<
"SimVertex collection with InputTag = "<<
"g4SimHits"
210 <<
" has size = "<<simVC.size()<<endl;
212 for (edm::SimVertexContainer::const_iterator VITER=simVC.begin(); VITER!=simVC.end(); VITER++, kv++){
215 <<
" : "<< *VITER <<endl;
221 for (TrackHitsCollection::const_iterator track=tC.begin(); track!=tC.end(); track++, tindex++) {
223 <<
"\n"<<
"reco::Track "<<tindex
224 <<
", number of RecHits = "<< (track->second - track->first) <<
"\n";
225 tracker_matchedIds_valid.clear();
226 muon_matchedIds_valid.clear();
228 tracker_matchedIds_INVALID.clear();
229 muon_matchedIds_INVALID.clear();
231 bool this_track_matched =
false;
232 int n_matching_simhits = 0;
236 int n_tracker_all = 0;
242 int n_tracker_valid = 0;
243 int n_muon_valid = 0;
248 int n_tracker_matched_valid = 0;
249 int n_muon_matched_valid = 0;
250 int n_dt_matched_valid = 0;
251 int n_csc_matched_valid = 0;
252 int n_rpc_matched_valid = 0;
255 int n_tracker_INVALID = 0;
256 int n_muon_INVALID = 0;
257 int n_dt_INVALID = 0;
258 int n_csc_INVALID = 0;
259 int n_rpc_INVALID = 0;
261 int n_tracker_matched_INVALID = 0;
262 int n_muon_matched_INVALID = 0;
263 int n_dt_matched_INVALID = 0;
264 int n_csc_matched_INVALID = 0;
265 int n_rpc_matched_INVALID = 0;
268 getMatchedIds(tracker_matchedIds_valid, muon_matchedIds_valid,
269 tracker_matchedIds_INVALID, muon_matchedIds_INVALID,
270 n_tracker_valid, n_dt_valid, n_csc_valid, n_rpc_valid,
271 n_tracker_matched_valid, n_dt_matched_valid, n_csc_matched_valid, n_rpc_matched_valid,
272 n_tracker_INVALID, n_dt_INVALID, n_csc_INVALID, n_rpc_INVALID,
273 n_tracker_matched_INVALID, n_dt_matched_INVALID, n_csc_matched_INVALID, n_rpc_matched_INVALID,
274 track->first, track->second,
275 trackertruth, dttruth, csctruth, rpctruth,
278 n_matching_simhits = tracker_matchedIds_valid.size() + muon_matchedIds_valid.size() +
279 tracker_matchedIds_INVALID.size() +muon_matchedIds_INVALID.size();
281 n_muon_valid = n_dt_valid + n_csc_valid + n_rpc_valid;
282 n_valid = n_tracker_valid + n_muon_valid;
283 n_muon_INVALID = n_dt_INVALID + n_csc_INVALID + n_rpc_INVALID;
284 n_INVALID = n_tracker_INVALID + n_muon_INVALID;
287 n_tracker_all = n_tracker_valid + n_tracker_INVALID;
288 n_dt_all = n_dt_valid + n_dt_INVALID;
289 n_csc_all = n_csc_valid + n_csc_INVALID;
290 n_rpc_all = n_rpc_valid + n_rpc_INVALID;
291 n_all = n_valid + n_INVALID;
293 n_muon_matched_valid = n_dt_matched_valid + n_csc_matched_valid + n_rpc_matched_valid;
294 n_muon_matched_INVALID = n_dt_matched_INVALID + n_csc_matched_INVALID + n_rpc_matched_INVALID;
297 int n_tracker_selected_hits = n_tracker_valid;
298 int n_muon_selected_hits = n_muon_valid;
299 int n_dt_selected_hits = n_dt_valid;
300 int n_csc_selected_hits = n_csc_valid;
301 int n_rpc_selected_hits = n_rpc_valid;
304 int n_tracker_matched = n_tracker_matched_valid;
305 int n_muon_matched = n_muon_matched_valid;
306 int n_dt_matched = n_dt_matched_valid;
307 int n_csc_matched = n_csc_matched_valid;
308 int n_rpc_matched = n_rpc_matched_valid;
310 std::string InvMuonHits, ZeroHitMuon;
315 InvMuonHits =
" ***INVALID MUON HITS***";
316 ZeroHitMuon =
" ***ZERO-HIT MUON***";
318 n_muon_selected_hits = n_muon_INVALID;
319 n_dt_selected_hits = n_dt_INVALID;
320 n_csc_selected_hits = n_csc_INVALID;
321 n_rpc_selected_hits = n_rpc_INVALID;
323 n_muon_matched = n_muon_matched_INVALID;
324 n_dt_matched = n_dt_matched_INVALID;
325 n_csc_matched = n_csc_matched_INVALID;
326 n_rpc_matched = n_rpc_matched_INVALID;
329 int n_selected_hits = n_tracker_selected_hits + n_muon_selected_hits;
330 int n_matched = n_tracker_matched + n_muon_matched;
333 <<
"\n"<<
"# TrackingRecHits: "<<(track->second - track->first)
334 <<
"\n"<<
"# used RecHits = " << n_all <<
" ("<<n_tracker_all<<
"/"
335 <<n_dt_all<<
"/"<<n_csc_all<<
"/"<<n_rpc_all<<
" in Tracker/DT/CSC/RPC)"<<
", obtained from " << n_matching_simhits <<
" SimHits"
336 <<
"\n"<<
"# selected RecHits = " <<n_selected_hits <<
" (" <<n_tracker_selected_hits<<
"/"
337 <<n_dt_selected_hits<<
"/"<<n_csc_selected_hits<<
"/"<<n_rpc_selected_hits<<
" in Tracker/DT/CSC/RPC)"<<InvMuonHits
338 <<
"\n"<<
"# matched RecHits = " <<n_matched<<
" ("<<n_tracker_matched<<
"/"
339 <<n_dt_matched<<
"/"<<n_csc_matched<<
"/"<<n_rpc_matched<<
" in Tracker/DT/CSC/RPC)";
341 if (n_all>0 && n_matching_simhits == 0)
343 <<
"*** WARNING in MuonAssociatorByHits::associateRecoToSim: no matching PSimHit found for this reco::Track !";
345 if (n_matching_simhits != 0) {
347 <<
"\n"<<
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
348 <<
"\n"<<
"reco::Track "<<tindex<<ZeroHitMuon
349 <<
"\n\t"<<
"made of "<<n_selected_hits<<
" selected RecHits (tracker:"<<n_tracker_selected_hits<<
"/muons:"<<n_muon_selected_hits<<
")";
352 for (TrackingParticleCollection::const_iterator trpart = tPC.begin(); trpart != tPC.end(); ++trpart, ++tpindex) {
353 tracker_nshared =
getShared(tracker_matchedIds_valid, trpart);
354 muon_nshared =
getShared(muon_matchedIds_valid, trpart);
357 muon_nshared =
getShared(muon_matchedIds_INVALID, trpart);
359 global_nshared = tracker_nshared + muon_nshared;
362 else if(n_tracker_selected_hits != 0) tracker_quality = (
static_cast<double>(tracker_nshared)/static_cast<double>(n_tracker_selected_hits));
363 else tracker_quality = 0;
366 else if(n_muon_selected_hits != 0) muon_quality = (
static_cast<double>(muon_nshared)/static_cast<double>(n_muon_selected_hits));
367 else muon_quality = 0;
370 if (n_selected_hits != 0) {
372 global_quality = global_nshared;
374 global_quality = (
static_cast<double>(global_nshared)/static_cast<double>(n_selected_hits));
375 }
else global_quality = 0;
377 bool trackerOk =
false;
378 if (n_tracker_selected_hits != 0) {
379 if (tracker_quality > tracker_quality_cut) trackerOk =
true;
385 if (n_muon_selected_hits != 0) {
386 if (muon_quality > muon_quality_cut) muonOk =
true;
390 bool matchOk = trackerOk || muonOk;
394 matchOk = trackerOk && muonOk;
398 outputCollection[tindex].push_back(
IndexMatch(tpindex, global_quality));
399 this_track_matched =
true;
402 <<
"\n\t"<<
" **MATCHED** with quality = "<<global_quality<<
" (tracker: "<<tracker_quality<<
" / muon: "<<muon_quality<<
")"
403 <<
"\n\t"<<
" N shared hits = "<<global_nshared<<
" (tracker: "<<tracker_nshared<<
" / muon: "<<muon_nshared<<
")"
404 <<
"\n"<<
" to: TrackingParticle " <<tpindex<<
", q = "<<(*trpart).charge()<<
", p = "<<(*trpart).p()
405 <<
", pT = "<<(*trpart).pt()<<
", eta = "<<(*trpart).eta()<<
", phi = "<<(*trpart).phi()
406 <<
"\n\t"<<
" pdg code = "<<(*trpart).pdgId()<<
", made of "<<(*trpart).trackPSimHit().size()<<
" PSimHits"
407 <<
" from "<<(*trpart).g4Tracks().size()<<
" SimTrack:";
409 g4T!=(*trpart).g4Track_end();
412 <<
"\t"<<
" Id:"<<(*g4T).trackId()<<
"/Evt:("<<(*g4T).eventId().event()<<
","<<(*g4T).eventId().bunchCrossing()<<
")";
417 if (global_nshared != 0)
419 <<
"\n\t"<<
" NOT matched to TrackingParticle "<<tpindex
420 <<
" with quality = "<<global_quality<<
" (tracker: "<<tracker_quality<<
" / muon: "<<muon_quality<<
")"
421 <<
"\n"<<
" N shared hits = "<<global_nshared<<
" (tracker: "<<tracker_nshared<<
" / muon: "<<muon_nshared<<
")";
426 if (!this_track_matched) {
428 <<
"\n"<<
" NOT matched to any TrackingParticle";
432 <<
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<
"\n";
439 edm::LogVerbatim(
"MuonAssociatorByHits")<<
"0 reconstructed tracks (-->> 0 associated !)";
442 for (IndexAssociation::iterator it = outputCollection.begin(), ed = outputCollection.end(); it != ed; ++it) {
443 std::sort(it->second.begin(), it->second.end());
445 return outputCollection;
457 tH.push_back(std::make_pair((*it)->recHitsBegin(), (*it)->recHitsEnd()));
461 for (IndexAssociation::const_iterator it = bareAssoc.begin(), ed = bareAssoc.end(); it != ed; ++it) {
462 for (std::vector<IndexMatch>::const_iterator itma = it->second.begin(), edma = it->second.end(); itma != edma; ++itma) {
464 std::make_pair(tC[itma->idx], itma->quality));
469 return outputCollection;
478 int tracker_nshared = 0;
479 int muon_nshared = 0;
480 int global_nshared = 0;
482 double tracker_quality = 0;
483 double tracker_quality_cut;
487 double muon_quality = 0;
488 double muon_quality_cut;
492 double global_quality = 0;
494 double tracker_purity = 0;
495 double muon_purity = 0;
496 double global_purity = 0;
516 if (TPCollectionH.
size()!=0) tPC = *(TPCollectionH.
product());
518 bool any_trackingParticle_matched =
false;
521 for (TrackHitsCollection::const_iterator track=tC.begin(); track!=tC.end(); track++, tindex++) {
523 <<
"\n"<<
"reco::Track "<<tindex
524 <<
", number of RecHits = "<< (track->second - track->first) <<
"\n";
526 tracker_matchedIds_valid.clear();
527 muon_matchedIds_valid.clear();
529 tracker_matchedIds_INVALID.clear();
530 muon_matchedIds_INVALID.clear();
532 int n_matching_simhits = 0;
536 int n_tracker_all = 0;
542 int n_tracker_valid = 0;
543 int n_muon_valid = 0;
548 int n_tracker_matched_valid = 0;
549 int n_muon_matched_valid = 0;
550 int n_dt_matched_valid = 0;
551 int n_csc_matched_valid = 0;
552 int n_rpc_matched_valid = 0;
555 int n_tracker_INVALID = 0;
556 int n_muon_INVALID = 0;
557 int n_dt_INVALID = 0;
558 int n_csc_INVALID = 0;
559 int n_rpc_INVALID = 0;
561 int n_tracker_matched_INVALID = 0;
562 int n_muon_matched_INVALID = 0;
563 int n_dt_matched_INVALID = 0;
564 int n_csc_matched_INVALID = 0;
565 int n_rpc_matched_INVALID = 0;
568 getMatchedIds(tracker_matchedIds_valid, muon_matchedIds_valid,
569 tracker_matchedIds_INVALID, muon_matchedIds_INVALID,
570 n_tracker_valid, n_dt_valid, n_csc_valid, n_rpc_valid,
571 n_tracker_matched_valid, n_dt_matched_valid, n_csc_matched_valid, n_rpc_matched_valid,
572 n_tracker_INVALID, n_dt_INVALID, n_csc_INVALID, n_rpc_INVALID,
573 n_tracker_matched_INVALID, n_dt_matched_INVALID, n_csc_matched_INVALID, n_rpc_matched_INVALID,
574 track->first, track->second,
575 trackertruth, dttruth, csctruth, rpctruth,
578 n_matching_simhits = tracker_matchedIds_valid.size() + muon_matchedIds_valid.size() +
579 tracker_matchedIds_INVALID.size() +muon_matchedIds_INVALID.size();
581 n_muon_valid = n_dt_valid + n_csc_valid + n_rpc_valid;
582 n_valid = n_tracker_valid + n_muon_valid;
583 n_muon_INVALID = n_dt_INVALID + n_csc_INVALID + n_rpc_INVALID;
584 n_INVALID = n_tracker_INVALID + n_muon_INVALID;
587 n_tracker_all = n_tracker_valid + n_tracker_INVALID;
588 n_dt_all = n_dt_valid + n_dt_INVALID;
589 n_csc_all = n_csc_valid + n_csc_INVALID;
590 n_rpc_all = n_rpc_valid + n_rpc_INVALID;
591 n_all = n_valid + n_INVALID;
593 n_muon_matched_valid = n_dt_matched_valid + n_csc_matched_valid + n_rpc_matched_valid;
594 n_muon_matched_INVALID = n_dt_matched_INVALID + n_csc_matched_INVALID + n_rpc_matched_INVALID;
597 int n_tracker_selected_hits = n_tracker_valid;
598 int n_muon_selected_hits = n_muon_valid;
599 int n_dt_selected_hits = n_dt_valid;
600 int n_csc_selected_hits = n_csc_valid;
601 int n_rpc_selected_hits = n_rpc_valid;
604 int n_tracker_matched = n_tracker_matched_valid;
605 int n_muon_matched = n_muon_matched_valid;
606 int n_dt_matched = n_dt_matched_valid;
607 int n_csc_matched = n_csc_matched_valid;
608 int n_rpc_matched = n_rpc_matched_valid;
610 std::string InvMuonHits, ZeroHitMuon;
615 InvMuonHits =
" ***INVALID MUON HITS***";
616 ZeroHitMuon =
" ***ZERO-HIT MUON***";
618 n_muon_selected_hits = n_muon_INVALID;
619 n_dt_selected_hits = n_dt_INVALID;
620 n_csc_selected_hits = n_csc_INVALID;
621 n_rpc_selected_hits = n_rpc_INVALID;
623 n_muon_matched = n_muon_matched_INVALID;
624 n_dt_matched = n_dt_matched_INVALID;
625 n_csc_matched = n_csc_matched_INVALID;
626 n_rpc_matched = n_rpc_matched_INVALID;
629 int n_selected_hits = n_tracker_selected_hits + n_muon_selected_hits;
630 int n_matched = n_tracker_matched + n_muon_matched;
633 <<
"\n"<<
"# TrackingRecHits: "<<(track->second - track->first)
634 <<
"\n"<<
"# used RecHits = " <<n_all <<
" ("<<n_tracker_all<<
"/"
635 <<n_dt_all<<
"/"<<n_csc_all<<
"/"<<n_rpc_all<<
" in Tracker/DT/CSC/RPC)"<<
", obtained from " << n_matching_simhits <<
" SimHits"
636 <<
"\n"<<
"# selected RecHits = " <<n_selected_hits <<
" (" <<n_tracker_selected_hits<<
"/"
637 <<n_dt_selected_hits<<
"/"<<n_csc_selected_hits<<
"/"<<n_rpc_selected_hits<<
" in Tracker/DT/CSC/RPC)"<<InvMuonHits
638 <<
"\n"<<
"# matched RecHits = " <<n_matched<<
" ("<<n_tracker_matched<<
"/"
639 <<n_dt_matched<<
"/"<<n_csc_matched<<
"/"<<n_rpc_matched<<
" in Tracker/DT/CSC/RPC)";
641 if (printRtS && n_all>0 && n_matching_simhits==0)
643 <<
"*** WARNING in MuonAssociatorByHits::associateSimToReco: no matching PSimHit found for this reco::Track !";
645 if (n_matching_simhits != 0) {
647 for (TrackingParticleCollection::const_iterator trpart = tPC.begin(); trpart != tPC.end(); ++trpart, ++tpindex) {
649 int n_tracker_simhits = 0;
650 int n_tracker_recounted_simhits = 0;
651 int n_muon_simhits = 0;
652 int n_global_simhits = 0;
653 std::vector<PSimHit> tphits;
655 int n_tracker_selected_simhits = 0;
656 int n_muon_selected_simhits = 0;
657 int n_global_selected_simhits = 0;
660 tracker_nshared =
getShared(tracker_matchedIds_valid, trpart);
661 muon_nshared =
getShared(muon_matchedIds_valid, trpart);
664 muon_nshared =
getShared(muon_matchedIds_INVALID, trpart);
666 global_nshared = tracker_nshared + muon_nshared;
667 if (global_nshared == 0)
continue;
669 for(std::vector<PSimHit>::const_iterator TPhit = trpart->pSimHit_begin(); TPhit != trpart->pSimHit_end(); TPhit++) {
676 unsigned int subdetId =
static_cast<unsigned int>(dId.
subdetId());
686 for(std::vector<PSimHit>::const_iterator TPhitOK = tphits.begin(); TPhitOK != tphits.end(); TPhitOK++) {
709 tphits.push_back(*TPhit);
727 n_tracker_recounted_simhits = tphits.size();
729 if (trpart->trackPSimHit().empty()) {
731 n_tracker_recounted_simhits = tracker_nshared;
732 n_muon_simhits = muon_nshared;
734 n_global_simhits = n_tracker_recounted_simhits + n_muon_simhits;
737 n_muon_selected_simhits = n_muon_simhits;
738 n_global_selected_simhits = n_muon_selected_simhits;
741 n_tracker_selected_simhits = n_tracker_recounted_simhits;
742 n_global_selected_simhits += n_tracker_selected_simhits;
746 else if (n_tracker_selected_simhits!=0)
747 tracker_quality =
static_cast<double>(tracker_nshared)/static_cast<double>(n_tracker_selected_simhits);
748 else tracker_quality = 0;
751 else if (n_muon_selected_simhits!=0)
752 muon_quality =
static_cast<double>(muon_nshared)/static_cast<double>(n_muon_selected_simhits);
753 else muon_quality = 0;
756 if (n_global_selected_simhits != 0) {
758 global_quality = global_nshared;
760 global_quality =
static_cast<double>(global_nshared)/static_cast<double>(n_global_selected_simhits);
762 else global_quality = 0;
765 if (n_selected_hits != 0) {
767 global_purity = global_nshared;
769 global_purity =
static_cast<double>(global_nshared)/static_cast<double>(n_selected_hits);
771 else global_purity = 0;
773 bool trackerOk =
false;
774 if (n_tracker_selected_hits != 0) {
775 if (tracker_quality > tracker_quality_cut) trackerOk =
true;
777 tracker_purity =
static_cast<double>(tracker_nshared)/static_cast<double>(n_tracker_selected_hits);
787 if (n_muon_selected_hits != 0) {
788 if (muon_quality > muon_quality_cut) muonOk =
true;
790 muon_purity =
static_cast<double>(muon_nshared)/static_cast<double>(n_muon_selected_hits);
797 bool matchOk = trackerOk || muonOk;
801 matchOk = trackerOk && muonOk;
805 outputCollection[tpindex].push_back(
IndexMatch(tindex,global_quality));
806 any_trackingParticle_matched =
true;
809 <<
"************************************************************************************************************************"
810 <<
"\n"<<
"TrackingParticle " << tpindex <<
", q = "<<(*trpart).charge()<<
", p = "<<(*trpart).p()
811 <<
", pT = "<<(*trpart).pt()<<
", eta = "<<(*trpart).eta()<<
", phi = "<<(*trpart).phi()
812 <<
"\n"<<
" pdg code = "<<(*trpart).pdgId()
813 <<
", made of "<<(*trpart).trackPSimHit().size()<<
" PSimHits, recounted "<<n_global_simhits<<
" PSimHits"
814 <<
" (tracker:"<<n_tracker_recounted_simhits<<
"/muons:"<<n_muon_simhits<<
")"
815 <<
", from "<<(*trpart).g4Tracks().size()<<
" SimTrack:";
817 g4T!=(*trpart).g4Track_end();
820 <<
" Id:"<<(*g4T).trackId()<<
"/Evt:("<<(*g4T).eventId().event()<<
","<<(*g4T).eventId().bunchCrossing()<<
")";
823 <<
"\t selected "<<n_global_selected_simhits<<
" PSimHits"
824 <<
" (tracker:"<<n_tracker_selected_simhits<<
"/muons:"<<n_muon_selected_simhits<<
")"
825 <<
"\n\t **MATCHED** with quality = "<<global_quality<<
" (tracker: "<<tracker_quality<<
" / muon: "<<muon_quality<<
")"
826 <<
"\n\t and purity = "<<global_purity<<
" (tracker: "<<tracker_purity<<
" / muon: "<<muon_purity<<
")"
827 <<
"\n\t N shared hits = "<<global_nshared<<
" (tracker: "<<tracker_nshared<<
" / muon: "<<muon_nshared<<
")"
828 <<
"\n" <<
" to: reco::Track "<<tindex<<ZeroHitMuon
829 <<
"\n\t"<<
" made of "<<n_selected_hits<<
" RecHits (tracker:"<<n_tracker_valid<<
"/muons:"<<n_muon_selected_hits<<
")";
833 if (global_nshared != 0) {
835 <<
"************************************************************************************************************************"
836 <<
"\n"<<
"TrackingParticle " << tpindex <<
", q = "<<(*trpart).charge()<<
", p = "<<(*trpart).p()
837 <<
", pT = "<<(*trpart).pt()<<
", eta = "<<(*trpart).eta()<<
", phi = "<<(*trpart).phi()
838 <<
"\n"<<
" pdg code = "<<(*trpart).pdgId()
839 <<
", made of "<<(*trpart).trackPSimHit().size()<<
" PSimHits, recounted "<<n_global_simhits<<
" PSimHits"
840 <<
" (tracker:"<<n_tracker_recounted_simhits<<
"/muons:"<<n_muon_simhits<<
")"
841 <<
", from "<<(*trpart).g4Tracks().size()<<
" SimTrack:";
843 g4T!=(*trpart).g4Track_end();
846 <<
" Id:"<<(*g4T).trackId()<<
"/Evt:("<<(*g4T).eventId().event()<<
","<<(*g4T).eventId().bunchCrossing()<<
")";
849 <<
"\t selected "<<n_global_selected_simhits<<
" PSimHits"
850 <<
" (tracker:"<<n_tracker_selected_simhits<<
"/muons:"<<n_muon_selected_simhits<<
")"
851 <<
"\n\t NOT matched to reco::Track "<<tindex<<ZeroHitMuon
852 <<
" with quality = "<<global_quality<<
" (tracker: "<<tracker_quality<<
" / muon: "<<muon_quality<<
")"
853 <<
"\n\t and purity = "<<global_purity<<
" (tracker: "<<tracker_purity<<
" / muon: "<<muon_purity<<
")"
854 <<
"\n\t N shared hits = "<<global_nshared<<
" (tracker: "<<tracker_nshared<<
" / muon: "<<muon_nshared<<
")";
861 if (!any_trackingParticle_matched) {
864 <<
"************************************************************************************************************************"
865 <<
"\n NO TrackingParticle associated to ANY input reco::Track ! \n"
866 <<
"************************************************************************************************************************"<<
"\n";
869 <<
"************************************************************************************************************************"<<
"\n";
873 for (IndexAssociation::iterator it = outputCollection.begin(), ed = outputCollection.end(); it != ed; ++it) {
874 std::sort(it->second.begin(), it->second.end());
876 return outputCollection;
884 unsigned int subdetId =
static_cast<unsigned int>(detId.
subdetId());
888 layerNumber = tibid.
layer();
893 layerNumber = tobid.
layer();
898 layerNumber = tidid.
wheel();
903 layerNumber = tecid.
wheel();
908 layerNumber = pxbid.
layer();
913 layerNumber = pxfid.
disk();
916 <<
"*** WARNING in MuonAssociatorByHits::LayerFromDetid: Unknown Tracker subdetector: subdetId = " << subdetId;
924 int& n_tracker_valid,
int& n_dt_valid,
int& n_csc_valid,
int& n_rpc_valid,
925 int& n_tracker_matched_valid,
int& n_dt_matched_valid,
int& n_csc_matched_valid,
int& n_rpc_matched_valid,
926 int& n_tracker_INVALID,
int& n_dt_INVALID,
int& n_csc_INVALID,
int& n_rpc_INVALID,
927 int& n_tracker_matched_INVALID,
int& n_dt_matched_INVALID,
int& n_csc_matched_INVALID,
int& n_rpc_matched_INVALID,
933 tracker_matchedIds_valid.clear();
934 muon_matchedIds_valid.clear();
936 tracker_matchedIds_INVALID.clear();
937 muon_matchedIds_INVALID.clear();
944 n_tracker_matched_valid = 0;
945 n_dt_matched_valid = 0;
946 n_csc_matched_valid = 0;
947 n_rpc_matched_valid = 0;
949 n_tracker_INVALID = 0;
954 n_tracker_matched_INVALID = 0;
955 n_dt_matched_INVALID = 0;
956 n_csc_matched_INVALID = 0;
957 n_rpc_matched_INVALID = 0;
959 std::vector<SimHitIdpr> SimTrackIds;
965 stringstream hit_index;
972 stringstream detector_id;
975 string hitlog =
"TrackingRecHit "+hit_index.str();
977 std::vector<string> DTSimHits;
982 bool valid_Hit = hitp->
isValid();
986 stringstream detector_id;
990 detector_id << pxbdetid;
994 detector_id << pxfdetid;
998 detector_id << tibdetid;
1002 detector_id << tobdetid;
1006 detector_id << tiddetid;
1010 detector_id << tecdetid;
1013 if (valid_Hit) hitlog = hitlog+
" -Tracker - detID = "+detector_id.str();
1014 else hitlog = hitlog+
" *** INVALID ***"+
" -Tracker - detID = "+detector_id.str();
1022 if(!SimTrackIds.empty()) {
1023 n_tracker_matched_valid++;
1028 n_tracker_INVALID++;
1030 if(!SimTrackIds.empty()) {
1031 n_tracker_matched_INVALID++;
1043 stringstream dt_detector_id;
1044 dt_detector_id << dtdetid;
1045 if (valid_Hit) hitlog = hitlog+
" -Muon DT - detID = "+dt_detector_id.str();
1046 else hitlog = hitlog+
" *** INVALID ***"+
" -Muon DT - detID = "+dt_detector_id.str();
1058 if (!SimTrackIds.empty()) {
1059 n_dt_matched_valid++;
1066 if (!SimTrackIds.empty()) {
1067 n_dt_matched_INVALID++;
1077 std::vector<PSimHit> dtSimHits = dttruth.
associateHit(*hitp);
1079 stringstream ndthits;
1080 ndthits<<dtSimHits.size();
1081 wireidlog =
"\t DTWireId :"+wid.str()+
", "+ndthits.str()+
" associated PSimHit :";
1083 for (
unsigned int j=0;
j<dtSimHits.size();
j++) {
1086 stringstream simhit;
1087 simhit<<dtSimHits[
j];
1088 string simhitlog =
"\t\t PSimHit "+index.str()+
": "+simhit.str();
1089 DTSimHits.push_back(simhitlog);
1100 std::vector<const TrackingRecHit *> componentHits, phiHits, zHits;
1101 if (dtsegment->
hasPhi()) {
1103 componentHits.insert(componentHits.end(),phiHits.begin(),phiHits.end());
1105 if (dtsegment->
hasZed()) {
1107 componentHits.insert(componentHits.end(),zHits.begin(),zHits.end());
1110 <<
"\n\t this TrackingRecHit is a DTRecSegment4D with "
1111 <<componentHits.size()<<
" hits (phi:"<<phiHits.size()<<
", z:"<<zHits.size()<<
")";
1113 std::vector<SimHitIdpr> i_SimTrackIds;
1115 for (std::vector<const TrackingRecHit *>::const_iterator ithit =componentHits.begin();
1116 ithit != componentHits.end(); ++ithit) {
1121 i_SimTrackIds.clear();
1130 if (!i_SimTrackIds.empty()) {
1131 n_dt_matched_valid++;
1138 if (!i_SimTrackIds.empty()) {
1139 n_dt_matched_INVALID++;
1146 <<
"*** WARNING in MuonAssociatorByHits::getMatchedIds, null dynamic_cast of a DT TrackingRecHit !";
1148 unsigned int i_detid = (*ithit)->geographicalId().rawId();
1151 stringstream i_dt_detector_id;
1152 i_dt_detector_id << i_dtdetid;
1155 i_ss<<
"\t\t hit "<<i_compHit<<
" -Muon DT - detID = "<<i_dt_detector_id.str();
1157 string i_hitlog = i_ss.str();
1158 i_hitlog = i_hitlog + write_matched_simtracks(i_SimTrackIds);
1161 SimTrackIds.insert(SimTrackIds.end(),i_SimTrackIds.begin(),i_SimTrackIds.end());
1166 <<
"*** WARNING in MuonAssociatorByHits::getMatchedIds, DT TrackingRecHit is neither DTRecHit1D nor DTRecSegment4D ! ";
1173 stringstream csc_detector_id;
1174 csc_detector_id << cscdetid;
1175 if (valid_Hit) hitlog = hitlog+
" -Muon CSC- detID = "+csc_detector_id.str();
1176 else hitlog = hitlog+
" *** INVALID ***"+
" -Muon CSC- detID = "+csc_detector_id.str();
1188 if (!SimTrackIds.empty()) {
1189 n_csc_matched_valid++;
1196 if (!SimTrackIds.empty()) {
1197 n_csc_matched_INVALID++;
1210 std::vector<const TrackingRecHit *> componentHits = cscsegment->
recHits();
1212 <<
"\n\t this TrackingRecHit is a CSCSegment with "<<componentHits.size()<<
" hits";
1214 std::vector<SimHitIdpr> i_SimTrackIds;
1216 for (std::vector<const TrackingRecHit *>::const_iterator ithit =componentHits.begin();
1217 ithit != componentHits.end(); ++ithit) {
1222 i_SimTrackIds.clear();
1231 if (!i_SimTrackIds.empty()) {
1232 n_csc_matched_valid++;
1239 if (!i_SimTrackIds.empty()) {
1240 n_csc_matched_INVALID++;
1246 <<
"*** WARNING in MuonAssociatorByHits::getMatchedIds, null dynamic_cast of a CSC TrackingRecHit !";
1248 unsigned int i_detid = (*ithit)->geographicalId().rawId();
1251 stringstream i_csc_detector_id;
1252 i_csc_detector_id << i_cscdetid;
1255 i_ss<<
"\t\t hit "<<i_compHit<<
" -Muon CSC- detID = "<<i_csc_detector_id.str();
1257 string i_hitlog = i_ss.str();
1258 i_hitlog = i_hitlog + write_matched_simtracks(i_SimTrackIds);
1261 SimTrackIds.insert(SimTrackIds.end(),i_SimTrackIds.begin(),i_SimTrackIds.end());
1266 <<
"*** WARNING in MuonAssociatorByHits::getMatchedIds, CSC TrackingRecHit is neither CSCRecHit2D nor CSCSegment ! ";
1273 stringstream rpc_detector_id;
1274 rpc_detector_id << rpcdetid;
1275 if (valid_Hit) hitlog = hitlog+
" -Muon RPC- detID = "+rpc_detector_id.str();
1276 else hitlog = hitlog+
" *** INVALID ***"+
" -Muon RPC- detID = "+rpc_detector_id.str();
1284 if (!SimTrackIds.empty()) {
1285 n_rpc_matched_valid++;
1293 if (!SimTrackIds.empty()) {
1294 n_rpc_matched_INVALID++;
1301 <<
"TrackingRecHit "<<iloop<<
" *** WARNING *** Unexpected Hit from Detector = "<<det;
1305 hitlog = hitlog + write_matched_simtracks(SimTrackIds);
1310 for (
unsigned int j=0;
j<DTSimHits.size();
j++) {
1323 for (MapOfMatchedIds::const_iterator iRecH=matchedIds.begin(); iRecH!=matchedIds.end(); ++iRecH) {
1326 std::vector<SimHitIdpr>
const & SimTrackIds = (*iRecH).second;
1330 for (std::vector<SimHitIdpr>::const_iterator iSimH=SimTrackIds.begin(); iSimH!=SimTrackIds.end(); ++iSimH) {
1331 uint32_t simtrackId = iSimH->first;
1336 if (simtrack->trackId() == simtrackId && simtrack->eventId() == evtId) {
1356 if (!SimTrackIds.empty()) {
1357 hitlog =
" matched to SimTrack";
1359 for(
size_t j=0;
j<SimTrackIds.size();
j++){
1360 stringstream trackid;
1361 trackid<<SimTrackIds[
j].first;
1364 evtid<<SimTrackIds[
j].second.event();
1366 stringstream bunchxid;
1367 bunchxid<<SimTrackIds[
j].second.bunchCrossing();
1369 hitlog = hitlog+
" Id:"+trackid.str()+
"/Evt:("+evtid.str()+
","+bunchxid.str()+
") ";
1371 }
else hitlog =
" *** UNMATCHED ***";
1382 for (
unsigned int j=0;
j<tPCH->size();
j++)
1397 switch (trackType) {
1402 muonHitRefs.push_back(std::make_pair(mur->
track()->recHitsBegin(), mur->
track()->recHitsEnd()));
1404 muonHitRefs.push_back(std::make_pair(hitRefVector.
begin(), hitRefVector.
end()));
1412 muonHitRefs.push_back(std::make_pair(mur->
outerTrack()->recHitsBegin(), mur->
outerTrack()->recHitsEnd()));
1414 muonHitRefs.push_back(std::make_pair(hitRefVector.
begin(), hitRefVector.
end()));
1422 muonHitRefs.push_back(std::make_pair(mur->
globalTrack()->recHitsBegin(), mur->
globalTrack()->recHitsEnd()));
1424 muonHitRefs.push_back(std::make_pair(hitRefVector.
begin(), hitRefVector.
end()));
1430 hitExtractor.
init(*event, *setup);
1432 std::vector<std::pair<size_t, size_t> > muonHitIndices;
1435 std::pair<size_t, size_t>
indices(allTMRecHits.
size(), allTMRecHits.
size());
1437 std::vector<const TrackingRecHit *> hits = hitExtractor.
getMuonHits(*mur);
1438 for (std::vector<const TrackingRecHit *>::const_iterator ith = hits.begin(), edh = hits.end(); ith != edh; ++ith) {
1441 indices.second += hits.size();
1443 muonHitIndices.push_back(
indices);
1446 for (
size_t i = 0,
n = allTMRecHits.
size();
i <
n; ++
i) {
1450 typedef std::pair<size_t, size_t> index_pair;
1452 for (std::vector<std::pair<size_t, size_t> >::const_iterator idxs = muonHitIndices.begin(), idxend = muonHitIndices.end(); idxs != idxend; ++idxs) {
1453 muonHitRefs.push_back(std::make_pair(hitRefBegin+idxs->first,
1454 hitRefBegin+idxs->second));
1463 for (MuonAssociatorByHits::IndexAssociation::const_iterator it = recSimColl.begin(), ed = recSimColl.end(); it != ed; ++it) {
1465 const std::vector<MuonAssociatorByHits::IndexMatch> & idxAss = it->second;
1466 std::vector<std::pair<TrackingParticleRef, double> > & tpAss = recToSim[rec];
1467 for (std::vector<MuonAssociatorByHits::IndexMatch>::const_iterator ita = idxAss.begin(), eda = idxAss.end(); ita != eda; ++ita) {
1468 tpAss.
push_back(std::make_pair(tPC[ita->idx], ita->quality));
1472 for (MuonAssociatorByHits::IndexAssociation::const_iterator it = simRecColl.begin(), ed = simRecColl.end(); it != ed; ++it) {
1474 const std::vector<MuonAssociatorByHits::IndexMatch> & idxAss = it->second;
1475 std::vector<std::pair<edm::RefToBase<reco::Muon>,
double> > & recAss = simToRec[sim];
1476 for (std::vector<MuonAssociatorByHits::IndexMatch>::const_iterator ita = idxAss.begin(), eda = idxAss.end(); ita != eda; ++ita) {
1477 recAss.
push_back(std::make_pair(muons[ita->idx], ita->quality));
std::pair< unsigned int, std::vector< SimHitIdpr > > uint_SimHitIdpr_pair
bool isInBadChamber(const CSCDetId &id) const
Is the gven chamber flagged as bad?
reco::RecoToSimCollection associateRecoToSim(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
Association Reco To Sim with Collections.
unsigned int layer() const
layer id
std::vector< TrackingParticle > TrackingParticleCollection
C const * product() const
Accessor for product collection.
edm::InputTag simtracksXFTag
void associateMuons(MuonToSimCollection &recoToSim, SimToMuonCollection &simToReco, const edm::RefToBaseVector< reco::Muon > &, MuonTrackType, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
bool isTrackerMuon() const
const DTChamberRecSegment2D * phiSegment() const
The superPhi segment: 0 if no phi projection available.
std::vector< PSimHit > associateHit(const TrackingRecHit &hit)
unsigned int layerNumber(align::ID)
Layer number increases with rho from 1 to 8.
const_iterator end() const
virtual TrackRef track() const
reference to a Track
boost::ptr_vector< uint_SimHitIdpr_pair > MapOfMatchedIds
const edm::ParameterSet & conf_
edm::InputTag simtracksTag
const_iterator end() const
Termination of iteration.
int LayerFromDetid(const DetId &) const
std::vector< SimHitIdpr > associateHitId(const TrackingRecHit &thit)
const bool AbsoluteNumberOfHits_muon
const_iterator begin() const
Initialize an iterator over the RefVector.
unsigned int layer() const
layer id
const bool includeZeroHitMuons
uint32_t rawId() const
get the raw id
bool isNonnull() const
Checks for non-null.
std::map< TrackingParticleRef, std::vector< std::pair< edm::RefToBase< reco::Muon >, double > > > SimToMuonCollection
int getShared(MapOfMatchedIds &matchedIds, TrackingParticleCollection::const_iterator trpart) const
const CSCBadChambers * cscBadChambers
virtual std::vector< const TrackingRecHit * > recHits() const
Access to component RecHits (if any)
void post_insert()
post insert action
edm::Ref< TrackingRecHitCollection > TrackingRecHitRef
persistent reference to a TrackingRecHit
uint32_t partnerDetId() const
std::vector< SimHitIdpr > associateCSCHitId(const CSCRecHit2D *)
unsigned int NHitCut_muon
bool hasPhi() const
Does it have the Phi projection?
const bool acceptOneStubMatchings
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::string write_matched_simtracks(const std::vector< SimHitIdpr > &) const
virtual std::vector< const TrackingRecHit * > recHits() const
Access to component RecHits (if any)
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
unsigned int disk() const
disk id
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
const bool AbsoluteNumberOfHits_track
const bool ThreeHitTracksAreSpecial
std::vector< std::pair< trackingRecHit_iterator, trackingRecHit_iterator > > TrackHitsCollection
std::vector< SimTrack >::const_iterator g4t_iterator
Detector identifier class for the strip tracker.
void getMatchedIds(MapOfMatchedIds &tracker_matchedIds_valid, MapOfMatchedIds &muon_matchedIds_valid, MapOfMatchedIds &tracker_matchedIds_INVALID, MapOfMatchedIds &muon_matchedIds_INVALID, int &n_tracker_valid, int &n_dt_valid, int &n_csc_valid, int &n_rpc_valid, int &n_tracker_matched_valid, int &n_dt_matched_valid, int &n_csc_matched_valid, int &n_rpc_matched_valid, int &n_tracker_INVALID, int &n_dt_INVALID, int &n_csc_INVALID, int &n_rpc_INVALID, int &n_tracker_matched_INVALID, int &n_dt_matched_INVALID, int &n_csc_matched_INVALID, int &n_rpc_matched_INVALID, trackingRecHit_iterator begin, trackingRecHit_iterator end, TrackerHitAssociator *trackertruth, DTHitAssociator &dttruth, MuonTruth &csctruth, RPCHitAssociator &rpctruth, bool printRts) const
bool hasZed() const
Does it have the Z projection?
const DTSLRecSegment2D * zSegment() const
The Z segment: 0 if not zed projection available.
void insert(const key_type &k, const data_type &v)
insert an association
std::vector< SimVertex > SimVertexContainer
IndexAssociation associateRecoToSimIndices(const TrackHitsCollection &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
T const * product() const
unsigned int wheel() const
wheel id
const_iterator begin() const
unsigned int layer() const
layer id
std::vector< SimHitIdpr > associateDTHitId(const DTRecHit1D *dtrechit)
reco::SimToRecoCollection associateSimToReco(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
Association Sim To Reco with Collections.
MuonAssociatorByHits(const edm::ParameterSet &)
unsigned int NHitCut_track
void push_back(const RefToBase< T > &)
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
size_type size() const
Size of the RefVector.
DetId geographicalId() const
IndexAssociation associateSimToRecoIndices(const TrackHitsCollection &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
Detector det() const
get the detector field from this detid
double EfficiencyCut_track
std::vector< SimTrack > SimTrackContainer
std::map< edm::RefToBase< reco::Muon >, std::vector< std::pair< TrackingParticleRef, double > >, RefToBaseSort > MuonToSimCollection
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
double EfficiencyCut_muon
std::vector< SimHitIdpr > associateRecHit(const TrackingRecHit &hit)
unsigned int wheel() const
wheel id
std::map< size_t, std::vector< IndexMatch > > IndexAssociation
virtual TrackRef globalTrack() const
reference to Track reconstructed in both tracked and muon detector
DTWireId wireId() const
Return the wireId.
const bool dumpInputCollections