CMS 3D CMS Logo

SegmentTrackAnalyzer.cc
Go to the documentation of this file.
1 
2 /*
3  * See header file for a description of this class.
4  *
5  * \author G. Mila - INFN Torino
6  */
7 
9 
18 
20 #include <string>
21 
22 using namespace std;
23 using namespace edm;
24 
25 //#define DEBUG
26 
28  parameters = pSet;
29 
30  // MuonService
31  theService = new MuonServiceProxy(parameters.getParameter<ParameterSet>("ServiceParameters"));
32 
33  // Read Data:
34  theMuTrackCollectionLabel_ =
35  consumes<reco::TrackCollection>(parameters.getParameter<edm::InputTag>("MuTrackCollection"));
36 
37  // SegmentTrackAssociatior Parameters
39  parameters.getParameter<ParameterSet>("SegmentsTrackAssociatorParameters");
40 
41  edm::ConsumesCollector iC = consumesCollector();
42  theSegmentsAssociator = new SegmentsTrackAssociator(SegmentsTrackAssociatorParameters, iC);
43 
44  trackCollection = parameters.getParameter<edm::InputTag>("MuTrackCollection").label() +
45  parameters.getParameter<edm::InputTag>("MuTrackCollection").instance();
46 
47  etaBin = parameters.getParameter<int>("etaBin");
48  etaMin = parameters.getParameter<double>("etaMin");
49  etaMax = parameters.getParameter<double>("etaMax");
50  phiBin = parameters.getParameter<int>("phiBin");
51  phiMin = parameters.getParameter<double>("phiMin");
52  phiMax = parameters.getParameter<double>("phiMax");
53  ptBin = parameters.getParameter<int>("ptBin");
54  ptMin = parameters.getParameter<double>("ptMin");
55  ptMax = parameters.getParameter<double>("ptMax");
56 }
58  const edm::Run& /*iRun*/,
59  const edm::EventSetup& /*iSetup*/) {
60  ibooker.cd();
61  ibooker.setCurrentFolder("Muons/SegmentTrackAnalyzer");
62 
63  // histograms initalization
64  hitsNotUsed = ibooker.book1D("HitsNotUsedForGlobalTracking_" + trackCollection,
65  "recHits not used for GLB [" + trackCollection + "]",
66  50,
67  -0.5,
68  49.5);
69  hitsNotUsedPercentual = ibooker.book1D("HitsNotUsedForGlobalTrackingDvHitUsed_" + trackCollection,
70  "(recHits_{notUsedForGLB}) / (recHits_{GLB}) [" + trackCollection + "]",
71  100,
72  0,
73  1.);
74 
75  TrackSegm = ibooker.book2D("trackSegments_" + trackCollection,
76  "Number of segments associated to the track [" + trackCollection + "]",
77  3,
78  0.5,
79  3.5,
80  8,
81  0,
82  8);
83  TrackSegm->setBinLabel(1, "DT+CSC", 1);
84  TrackSegm->setBinLabel(2, "DT", 1);
85  TrackSegm->setBinLabel(3, "CSC", 1);
86 
87  hitStaProvenance = ibooker.book1D("trackHitStaProvenance_" + trackCollection,
88  "Number of recHits_{STAinTrack} [" + trackCollection + "]",
89  7,
90  0.5,
91  7.5);
92  hitStaProvenance->setBinLabel(1, "DT");
93  hitStaProvenance->setBinLabel(2, "CSC");
94  hitStaProvenance->setBinLabel(3, "RPC");
95  hitStaProvenance->setBinLabel(4, "DT+CSC");
96  hitStaProvenance->setBinLabel(5, "DT+RPC");
97  hitStaProvenance->setBinLabel(6, "CSC+RPC");
98  hitStaProvenance->setBinLabel(7, "DT+CSC+RPC");
99 
100  if (trackCollection != "standAloneMuons") {
101  hitTkrProvenance = ibooker.book1D("trackHitTkrProvenance_" + trackCollection,
102  "Number of recHits_{TKinTrack} [" + trackCollection + "]",
103  6,
104  0.5,
105  6.5);
106  hitTkrProvenance->setBinLabel(1, "PixBarrel");
107  hitTkrProvenance->setBinLabel(2, "PixEndCap");
108  hitTkrProvenance->setBinLabel(3, "TIB");
109  hitTkrProvenance->setBinLabel(4, "TID");
110  hitTkrProvenance->setBinLabel(5, "TOB");
111  hitTkrProvenance->setBinLabel(6, "TEC");
112  }
113 
114  trackHitPercentualVsEta =
115  ibooker.book2D("trackHitDivtrackSegmHitVsEta_" + trackCollection,
116  "(recHits_{Track} / recHits_{associatedSegm}) vs #eta [" + trackCollection + "]",
117  etaBin,
118  etaMin,
119  etaMax,
120  20,
121  0,
122  1);
123  dtTrackHitPercentualVsEta =
124  ibooker.book2D("dtTrackHitDivtrackSegmHitVsEta_" + trackCollection,
125  "(recHits_{DTinTrack} / recHits_{associatedSegm}) vs #eta [" + trackCollection + "]",
126  etaBin,
127  etaMin,
128  etaMax,
129  20,
130  0,
131  1);
132  cscTrackHitPercentualVsEta =
133  ibooker.book2D("cscTrackHitDivtrackSegmHitVsEta_" + trackCollection,
134  "(recHits_{CSCinTrack} / recHits_{associatedSegm}) vs #eta [" + trackCollection + "]",
135  etaBin,
136  etaMin,
137  etaMax,
138  20,
139  0,
140  1);
141 
142  trackHitPercentualVsPhi =
143  ibooker.book2D("trackHitDivtrackSegmHitVsPhi_" + trackCollection,
144  "(recHits_{Track} / recHits_{associatedSegm}) vs #phi [" + trackCollection + "]",
145  phiBin,
146  phiMin,
147  phiMax,
148  20,
149  0,
150  1);
151  trackHitPercentualVsPhi->setAxisTitle("rad", 2);
152  dtTrackHitPercentualVsPhi =
153  ibooker.book2D("dtTrackHitDivtrackSegmHitVsPhi_" + trackCollection,
154  "(recHits_{DTinTrack} / recHits_{associatedSegm}) vs #phi [" + trackCollection + "]",
155  phiBin,
156  phiMin,
157  phiMax,
158  20,
159  0,
160  1);
161  dtTrackHitPercentualVsPhi->setAxisTitle("rad", 2);
162  cscTrackHitPercentualVsPhi =
163  ibooker.book2D("cscTrackHitDivtrackSegmHitVsPhi_" + trackCollection,
164  "(recHits_{CSCinTrack} / recHits_{associatedSegm}) vs #phi [" + trackCollection + "]",
165  phiBin,
166  phiMin,
167  phiMax,
168  20,
169  0,
170  1);
171  cscTrackHitPercentualVsPhi->setAxisTitle("rad", 2);
172 
173  trackHitPercentualVsPt =
174  ibooker.book2D("trackHitDivtrackSegmHitVsPt_" + trackCollection,
175  "(recHits_{Track} / recHits_{associatedSegm}) vs 1/p_{t} [" + trackCollection + "]",
176  ptBin,
177  ptMin,
178  ptMax,
179  20,
180  0,
181  1);
182  trackHitPercentualVsPt->setAxisTitle("GeV", 2);
183  dtTrackHitPercentualVsPt =
184  ibooker.book2D("dtTrackHitDivtrackSegmHitVsPt_" + trackCollection,
185  "(recHits_{DTinTrack} / recHits_{associatedSegm}) vs 1/p_{t} [" + trackCollection + "]",
186  ptBin,
187  ptMin,
188  ptMax,
189  20,
190  0,
191  1);
192  dtTrackHitPercentualVsPt->setAxisTitle("GeV", 2);
193  cscTrackHitPercentualVsPt =
194  ibooker.book2D("cscTrackHitDivtrackSegmHitVsPt_" + trackCollection,
195  "(recHits_{CSCinTrack} / recHits_{associatedSegm}) vs 1/p_{t} [" + trackCollection + "]",
196  ptBin,
197  ptMin,
198  ptMax,
199  20,
200  0,
201  1);
202  cscTrackHitPercentualVsPt->setAxisTitle("GeV", 2);
203 }
204 
206  theService->update(iSetup);
207 
209  iEvent.getByToken(theMuTrackCollectionLabel_, glbTracks);
210 
211  for (reco::TrackCollection::const_iterator recoTrack = glbTracks->begin(); recoTrack != glbTracks->end();
212  ++recoTrack) {
214  theSegmentsAssociator->associate(iEvent, iSetup, *recoTrack);
215 
216 #ifdef DEBUG
217  cout << "[SegmentTrackAnalyzer] # of segments associated to the track: " << (segments).size() << endl;
218 #endif
219 
220  // hit counters
221  int hitsFromDt = 0;
222  int hitsFromCsc = 0;
223  int hitsFromRpc = 0;
224  int hitsFromTk = 0;
225  int hitsFromTrack = 0;
226  int hitsFromSegmDt = 0;
227  int hitsFromSegmCsc = 0;
228  // segment counters
229  int segmFromDt = 0;
230  int segmFromCsc = 0;
231 
232  for (MuonTransientTrackingRecHit::MuonRecHitContainer::const_iterator segment = segments.begin();
233  segment != segments.end();
234  segment++) {
235  DetId id = (*segment)->geographicalId();
236 
237  // hits from DT segments
238  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::DT) {
239  ++segmFromDt;
240  const DTRecSegment4D* seg4D = dynamic_cast<const DTRecSegment4D*>((*segment)->hit());
241  if ((*seg4D).hasPhi())
242  hitsFromSegmDt += (*seg4D).phiSegment()->specificRecHits().size();
243  if ((*seg4D).hasZed())
244  hitsFromSegmDt += (*seg4D).zSegment()->specificRecHits().size();
245  }
246 
247  // hits from CSC segments
248  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::CSC) {
249  hitsFromSegmCsc += (*segment)->recHits().size();
250  segmFromCsc++;
251  }
252  }
253 
254  // hits from track
255  for (trackingRecHit_iterator recHit = recoTrack->recHitsBegin(); recHit != recoTrack->recHitsEnd(); ++recHit) {
256  hitsFromTrack++;
257  DetId id = (*recHit)->geographicalId();
258  // hits from DT
259  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::DT)
260  hitsFromDt++;
261  // hits from CSC
262  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::CSC)
263  hitsFromCsc++;
264  // hits from RPC
265  if (id.det() == DetId::Muon && id.subdetId() == MuonSubdetId::RPC)
266  hitsFromRpc++;
267  // hits from Tracker
268  if (id.det() == DetId::Tracker) {
269  hitsFromTk++;
270  if (id.subdetId() == PixelSubdetector::PixelBarrel)
271  hitTkrProvenance->Fill(1);
272  if (id.subdetId() == PixelSubdetector::PixelEndcap)
273  hitTkrProvenance->Fill(2);
274  if (id.subdetId() == SiStripDetId::TIB)
275  hitTkrProvenance->Fill(3);
276  if (id.subdetId() == SiStripDetId::TID)
277  hitTkrProvenance->Fill(4);
278  if (id.subdetId() == SiStripDetId::TOB)
279  hitTkrProvenance->Fill(5);
280  if (id.subdetId() == SiStripDetId::TEC)
281  hitTkrProvenance->Fill(6);
282  }
283  }
284 
285  // fill the histos
286  hitsNotUsed->Fill(hitsFromSegmDt + hitsFromSegmCsc + hitsFromRpc + hitsFromTk - hitsFromTrack);
287  hitsNotUsedPercentual->Fill(double(hitsFromSegmDt + hitsFromSegmCsc + hitsFromRpc + hitsFromTk - hitsFromTrack) /
288  hitsFromTrack);
289 
290  if (hitsFromDt != 0 && hitsFromCsc != 0)
291  TrackSegm->Fill(1, segmFromDt + segmFromCsc);
292  if (hitsFromDt != 0 && hitsFromCsc == 0)
293  TrackSegm->Fill(2, segmFromDt);
294  if (hitsFromDt == 0 && hitsFromCsc != 0)
295  TrackSegm->Fill(3, segmFromCsc);
296 
297  if (hitsFromDt != 0 && hitsFromCsc == 0 && hitsFromRpc == 0)
298  hitStaProvenance->Fill(1);
299  if (hitsFromCsc != 0 && hitsFromDt == 0 && hitsFromRpc == 0)
300  hitStaProvenance->Fill(2);
301  if (hitsFromRpc != 0 && hitsFromDt == 0 && hitsFromCsc == 0)
302  hitStaProvenance->Fill(3);
303  if (hitsFromDt != 0 && hitsFromCsc != 0 && hitsFromRpc == 0)
304  hitStaProvenance->Fill(4);
305  if (hitsFromDt != 0 && hitsFromRpc != 0 && hitsFromCsc == 0)
306  hitStaProvenance->Fill(5);
307  if (hitsFromCsc != 0 && hitsFromRpc != 0 && hitsFromDt == 0)
308  hitStaProvenance->Fill(6);
309  if (hitsFromDt != 0 && hitsFromCsc != 0 && hitsFromRpc != 0)
310  hitStaProvenance->Fill(7);
311 
312  if (hitsFromSegmDt + hitsFromSegmCsc != 0) {
313  trackHitPercentualVsEta->Fill(recoTrack->eta(),
314  double(hitsFromDt + hitsFromCsc) / (hitsFromSegmDt + hitsFromSegmCsc));
315  trackHitPercentualVsPhi->Fill(recoTrack->phi(),
316  double(hitsFromDt + hitsFromCsc) / (hitsFromSegmDt + hitsFromSegmCsc));
317  trackHitPercentualVsPt->Fill(recoTrack->pt(),
318  double(hitsFromDt + hitsFromCsc) / (hitsFromSegmDt + hitsFromSegmCsc));
319  }
320 
321  if (hitsFromSegmDt != 0) {
322  dtTrackHitPercentualVsEta->Fill(recoTrack->eta(), double(hitsFromDt) / hitsFromSegmDt);
323  dtTrackHitPercentualVsPhi->Fill(recoTrack->phi(), double(hitsFromDt) / hitsFromSegmDt);
324  dtTrackHitPercentualVsPt->Fill(recoTrack->pt(), double(hitsFromDt) / hitsFromSegmDt);
325  }
326 
327  if (hitsFromSegmCsc != 0) {
328  cscTrackHitPercentualVsEta->Fill(recoTrack->eta(), double(hitsFromCsc) / hitsFromSegmCsc);
329  cscTrackHitPercentualVsPhi->Fill(recoTrack->phi(), double(hitsFromCsc) / hitsFromSegmCsc);
330  cscTrackHitPercentualVsPt->Fill(recoTrack->pt(), double(hitsFromCsc) / hitsFromSegmCsc);
331  }
332  }
333 }
size
Write out results.
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
static PFTauRenderPlugin instance
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
static constexpr auto TID
Definition: SiStripDetId.h:38
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
const DTChamberRecSegment2D * phiSegment() const
The superPhi segment: 0 if no phi projection available.
char const * label
int iEvent
Definition: GenABIO.cc:224
SegmentTrackAnalyzer(const edm::ParameterSet &)
Constructor.
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
static constexpr auto TOB
Definition: SiStripDetId.h:39
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: DetId.h:17
static constexpr int RPC
Definition: MuonSubdetId.h:13
static constexpr auto TIB
Definition: SiStripDetId.h:37
HLT enums.
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
static constexpr int DT
Definition: MuonSubdetId.h:11
static constexpr int CSC
Definition: MuonSubdetId.h:12
std::vector< MuonRecHitPointer > MuonRecHitContainer
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
static constexpr auto TEC
Definition: SiStripDetId.h:40
Definition: Run.h:45
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)