CMS 3D CMS Logo

MuonAssociatorEDProducer.cc
Go to the documentation of this file.
1 #include <memory>
6 
8  tracksTag(parset.getParameter< edm::InputTag >("tracksTag")),
9  tpTag(parset.getParameter< edm::InputTag >("tpTag")),
10  ignoreMissingTrackCollection(parset.getUntrackedParameter<bool>("ignoreMissingTrackCollection",false)),
11  parset_(parset)
12 {
13 
14  edm::LogVerbatim("MuonAssociatorEDProducer") << "constructing MuonAssociatorEDProducer";
15  produces<reco::RecoToSimCollection>();
16  produces<reco::SimToRecoCollection>();
17  tpToken_=consumes<TrackingParticleCollection>(tpTag);
18  tracksToken_=consumes<edm::View<reco::Track> >(tracksTag);
19 
21  LogTrace("MuonAssociatorEDProducer") << "constructing MuonAssociatorByHits" << parset_.dump();
22  edm::LogVerbatim("MuonAssociatorEDProducer") << "\n MuonAssociatorByHits will associate reco::Tracks with "<<tracksTag
23  << "\n\t\t and TrackingParticles with "<<tpTag;
24  const std::string recoTracksLabel = tracksTag.label();
25  const std::string recoTracksInstance = tracksTag.instance();
26 
27  // check and fix inconsistent input settings
28  // tracks with hits only on muon detectors
29  if (recoTracksLabel == "standAloneMuons" || recoTracksLabel == "standAloneSETMuons" ||
30  recoTracksLabel == "cosmicMuons" || recoTracksLabel == "hltL2Muons") {
31  if (parset_.getParameter<bool>("UseTracker")) {
32  edm::LogWarning("MuonAssociatorEDProducer")
33  <<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
34  <<"\n with UseTracker = true"<<"\n ---> setting UseTracker = false ";
35  parset_.addParameter<bool>("UseTracker",false);
36  }
37  if (!parset_.getParameter<bool>("UseMuon")) {
38  edm::LogWarning("MuonAssociatorEDProducer")
39  <<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
40  <<"\n with UseMuon = false"<<"\n ---> setting UseMuon = true ";
41  parset_.addParameter<bool>("UseMuon",true);
42  }
43  }
44  // tracks with hits only on tracker
45  if (recoTracksLabel == "generalTracks" || recoTracksLabel == "ctfWithMaterialTracksP5LHCNavigation" ||
46  recoTracksLabel == "hltL3TkTracksFromL2" ||
47  (recoTracksLabel == "hltL3Muons" && recoTracksInstance == "L2Seeded")) {
48  if (parset_.getParameter<bool>("UseMuon")) {
49  edm::LogWarning("MuonAssociatorEDProducer")
50  <<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
51  <<"\n with UseMuon = true"<<"\n ---> setting UseMuon = false ";
52  parset_.addParameter<bool>("UseMuon",false);
53  }
54  if (!parset_.getParameter<bool>("UseTracker")) {
55  edm::LogWarning("MuonAssociatorEDProducer")
56  <<"\n*** WARNING : inconsistent input tracksTag = "<<tracksTag
57  <<"\n with UseTracker = false"<<"\n ---> setting UseTracker = true ";
58  parset_.addParameter<bool>("UseTracker",true);
59  }
60  }
61 
62  LogTrace("MuonAssociatorEDProducer") << "MuonAssociatorEDProducer::beginJob : constructing MuonAssociatorByHits";
64 }
65 
67 
69 }
70 
72 
74  using namespace edm;
75 
77  LogTrace("MuonAssociatorEDProducer") <<"getting TrackingParticle collection - "<<tpTag;
78  event.getByToken(tpToken_, TPCollection);
79  LogTrace("MuonAssociatorEDProducer") <<"\t... size = "<<TPCollection->size();
80 
82  LogTrace("MuonAssociatorEDProducer") <<"getting reco::Track collection - "<<tracksTag;
83  bool trackAvailable = event.getByToken (tracksToken_, trackCollection);
84  if (trackAvailable) LogTrace("MuonAssociatorEDProducer") <<"\t... size = "<<trackCollection->size();
85  else LogTrace("MuonAssociatorEDProducer") <<"\t... NOT FOUND.";
86 
87  std::unique_ptr<reco::RecoToSimCollection> rts;
88  std::unique_ptr<reco::SimToRecoCollection> str;
89 
90  if (ignoreMissingTrackCollection && !trackAvailable) {
91  //the track collection is not in the event and we're being told to ignore this.
92  //do not output anything to the event, other wise this would be considered as inefficiency.
93  LogTrace("MuonAssociatorEDProducer") << "\n ignoring missing track collection." << "\n";
94  }
95  else {
96  edm::LogVerbatim("MuonAssociatorEDProducer")
97  <<"\n >>> RecoToSim association <<< \n"
98  <<" Track collection : "
99  <<tracksTag.label()<<":"<<tracksTag.instance()<<" (size = "<<trackCollection->size()<<") \n"
100  <<" TrackingParticle collection : "
101  <<tpTag.label()<<":"<<tpTag.instance()<<" (size = "<<TPCollection->size()<<")";
102 
103  reco::RecoToSimCollection recSimColl = associatorByHits->associateRecoToSim(trackCollection,TPCollection,&event,&setup);
104 
105  edm::LogVerbatim("MuonAssociatorEDProducer")
106  <<"\n >>> SimToReco association <<< \n"
107  <<" TrackingParticle collection : "
108  <<tpTag.label()<<":"<<tpTag.instance()<<" (size = "<<TPCollection->size()<<") \n"
109  <<" Track collection : "
110  <<tracksTag.label()<<":"<<tracksTag.instance()<<" (size = "<<trackCollection->size()<<")";
111 
112  reco::SimToRecoCollection simRecColl = associatorByHits->associateSimToReco(trackCollection,TPCollection,&event,&setup);
113 
114  rts.reset(new reco::RecoToSimCollection(recSimColl));
115  str.reset(new reco::SimToRecoCollection(simRecColl));
116 
117  event.put(std::move(rts));
118  event.put(std::move(str));
119  }
120 }
T getParameter(std::string const &) const
edm::EDGetTokenT< TrackingParticleCollection > tpToken_
MuonAssociatorEDProducer(const edm::ParameterSet &)
std::string dump(unsigned int indent=0) const
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
void produce(edm::Event &, const edm::EventSetup &) override
MuonAssociatorByHits * associatorByHits
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
void addParameter(std::string const &name, T const &value)
Definition: ParameterSet.h:144
#define LogTrace(id)
reco::RecoToSimCollection associateRecoToSim(edm::Handle< edm::View< reco::Track > > &tCH, edm::Handle< TrackingParticleCollection > &tPCH, const edm::Event *event, const edm::EventSetup *setup) const
std::string const & label() const
Definition: InputTag.h:36
edm::EDGetTokenT< edm::View< reco::Track > > tracksToken_
HLT enums.
virtual reco::SimToRecoCollection associateSimToReco(edm::Handle< edm::View< reco::Track > > &tCH, edm::Handle< TrackingParticleCollection > &tPCH, const edm::Event *event, const edm::EventSetup *setup) const
std::string const & instance() const
Definition: InputTag.h:37
def move(src, dest)
Definition: eostools.py:510
Definition: event.py:1