CMS 3D CMS Logo

TevMuonProducer.cc
Go to the documentation of this file.
1 
10 // Framework
18 
20 
21 // TrackFinder and specific GLB Trajectory Builder
27 
28 
29 using namespace edm;
30 using namespace std;
31 using namespace reco;
32 
33 //
34 // constructor with config
35 //
37 
38  LogDebug("Muon|RecoMuon|TevMuonProducer") << "constructor called" << endl;
39 
40  // GLB Muon Collection Label
41  theGLBCollectionLabel = parameterSet.getParameter<InputTag>("MuonCollectionLabel");
42  glbMuonsToken=consumes<reco::TrackCollection>(theGLBCollectionLabel);
43  glbMuonsTrajToken=consumes<std::vector<Trajectory> >(theGLBCollectionLabel.label());
44 
45  // service parameters
46  ParameterSet serviceParameters = parameterSet.getParameter<ParameterSet>("ServiceParameters");
47 
48  // the services
49  theService = new MuonServiceProxy(serviceParameters);
50  edm::ConsumesCollector iC = consumesCollector();
51 
52  // TrackRefitter parameters
53  ParameterSet refitterParameters = parameterSet.getParameter<ParameterSet>("RefitterParameters");
54  theRefitter = new GlobalMuonRefitter(refitterParameters, theService, iC);
55 
56  // TrackLoader parameters
57  ParameterSet trackLoaderParameters = parameterSet.getParameter<ParameterSet>("TrackLoaderParameters");
58  theTrackLoader = new MuonTrackLoader(trackLoaderParameters,iC,theService);
59 
60  theRefits = parameterSet.getParameter< std::vector<std::string> >("Refits");
61  theRefitIndex = parameterSet.getParameter< std::vector<int> >("RefitIndex");
62 
63  for(unsigned int ww=0;ww<theRefits.size();ww++){
64  LogDebug("Muon|RecoMuon|TevMuonProducer") << "Refit " << theRefits[ww];
65  produces<reco::TrackCollection>(theRefits[ww]);
66  produces<TrackingRecHitCollection>(theRefits[ww]);
67  produces<reco::TrackExtraCollection>(theRefits[ww]);
68  produces<vector<Trajectory> >(theRefits[ww]) ;
69  produces<TrajTrackAssociationCollection>(theRefits[ww]);
70  produces<reco::TrackToTrackMap>(theRefits[ww]);
71  }
72  produces<DYTestimators> ("dytInfo");
73 }
74 
75 
76 //
77 // destructor
78 //
80 
81  LogTrace("Muon|RecoMuon|TevMuonProducer") << "destructor called" << endl;
82  if (theService) delete theService;
83  if (theRefitter) delete theRefitter;
84  if (theTrackLoader) delete theTrackLoader;
85 }
86 
87 
88 //
89 // reconstruct muons
90 //
91 void TevMuonProducer::produce(Event& event, const EventSetup& eventSetup) {
92 
93  const string metname = "Muon|RecoMuon|TevMuonProducer";
94  LogTrace(metname)<< endl << endl;
95  LogTrace(metname)<< "TeV Muon Reconstruction started" << endl;
96 
97  // Update the services
98  theService->update(eventSetup);
99 
100  theRefitter->setEvent(event);
101 
102  theRefitter->setServices(theService->eventSetup());
103 
104  //Retrieve tracker topology from geometry
106  eventSetup.get<TrackerTopologyRcd>().get(tTopoHand);
107  const TrackerTopology *tTopo=tTopoHand.product();
108 
109 
110  // Take the GLB muon container(s)
112  event.getByToken(glbMuonsToken,glbMuons);
113 
114  auto dytInfo = std::make_unique<DYTestimators>();
115  DYTestimators::Filler filler(*dytInfo);
116  size_t GLBmuonSize = glbMuons->size();
117  vector<DYTInfo> dytTmp(GLBmuonSize);
118 
119  Handle<vector<Trajectory> > glbMuonsTraj;
120 
121  LogTrace(metname)<< "Taking " << glbMuons->size() << " Global Muons "<<theGLBCollectionLabel<<endl;
122 
123  vector<MuonTrajectoryBuilder::TrackCand> glbTrackCands;
124 
125  event.getByToken(glbMuonsTrajToken, glbMuonsTraj);
126 
127  const reco::TrackCollection *glbTracks = glbMuons.product();
128 
129  for(unsigned int ww=0;ww<theRefits.size();ww++) {
130  LogDebug(metname)<<"TeVRefit for Refit: " <<theRefitIndex[ww];
131  std::vector<std::pair<Trajectory*,reco::TrackRef> > miniMap;
132  vector<Trajectory*> trajectories;
133  reco::TrackRef::key_type trackIndex = 0;
134  int glbCounter = 0;
135  for (reco::TrackCollection::const_iterator track = glbTracks->begin(); track!=glbTracks->end(); track++ , ++trackIndex) {
136  reco::TrackRef glbRef(glbMuons,trackIndex);
137 
138  vector<Trajectory> refitted=theRefitter->refit(*track,theRefitIndex[ww],tTopo);
139 
140  if (theRefits[ww] == "dyt") dytTmp[glbCounter] = *theRefitter->getDYTInfo();
141  glbCounter++;
142 
143  if (refitted.size()>0) {
144  Trajectory *refit = new Trajectory(refitted.front());
145  LogDebug(metname)<<"TeVTrackLoader for Refit: " <<theRefits[ww];
146  trajectories.push_back(refit);
147  std::pair<Trajectory*,reco::TrackRef> thisPair(refit,glbRef);
148  miniMap.push_back(thisPair);
149  }
150  }
151  theTrackLoader->loadTracks(trajectories,event,miniMap,glbMuons, *tTopo, theRefits[ww]);
152  }
153 
154  filler.insert(glbMuons, dytTmp.begin(), dytTmp.end());
155  filler.fill();
156  event.put(std::move(dytInfo), "dytInfo");
157 
158  LogTrace(metname) << "Done." << endl;
159 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
Definition: Ref.h:169
virtual void produce(edm::Event &, const edm::EventSetup &) override
reconstruct muons
const std::string metname
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
TevMuonProducer(const edm::ParameterSet &)
constructor with config
#define LogTrace(id)
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:55
virtual ~TevMuonProducer()
destructor
fixed size matrix
HLT enums.
T const * product() const
Definition: ESHandle.h:86
ParameterSet const & parameterSet(Provenance const &provenance)
Definition: Provenance.cc:11
def move(src, dest)
Definition: eostools.py:510
Definition: event.py:1