41 h_.bookHistograms(booker, subDir_);
45 h_simParticleType = booker.
book1D(
"SimHitPType",
"SimHit particle type", 11, 0, 11);
46 h_simParticleType->
getTH1()->SetMinimum(0);
47 if ( TH1*
h = h_simParticleType->getTH1() )
49 h->GetXaxis()->SetBinLabel(1 ,
"#mu^{-}");
50 h->GetXaxis()->SetBinLabel(2 ,
"#mu^{+}");
51 h->GetXaxis()->SetBinLabel(3 ,
"e^{-}" );
52 h->GetXaxis()->SetBinLabel(4 ,
"e^{+}" );
53 h->GetXaxis()->SetBinLabel(5 ,
"#pi^{+}");
54 h->GetXaxis()->SetBinLabel(6 ,
"#pi^{-}");
55 h->GetXaxis()->SetBinLabel(7 ,
"K^{+}" );
56 h->GetXaxis()->SetBinLabel(8 ,
"K^{-}" );
57 h->GetXaxis()->SetBinLabel(9 ,
"p^{+}" );
58 h->GetXaxis()->SetBinLabel(10,
"p^{-}" );
59 h->GetXaxis()->SetBinLabel(11,
"Other" );
64 h_nRPCHitPerSimMuon = booker.
book1D(
"NRPCHitPerSimMuon" ,
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
65 h_nRPCHitPerSimMuonBarrel = booker.
book1D(
"NRPCHitPerSimMuonBarrel" ,
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
66 h_nRPCHitPerSimMuonOverlap = booker.
book1D(
"NRPCHitPerSimMuonOverlap",
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
67 h_nRPCHitPerSimMuonEndcap = booker.
book1D(
"NRPCHitPerSimMuonEndcap" ,
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
69 h_nRPCHitPerRecoMuon = booker.
book1D(
"NRPCHitPerRecoMuon" ,
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
70 h_nRPCHitPerRecoMuonBarrel = booker.
book1D(
"NRPCHitPerRecoMuonBarrel" ,
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
71 h_nRPCHitPerRecoMuonOverlap = booker.
book1D(
"NRPCHitPerRecoMuonOverlap",
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
72 h_nRPCHitPerRecoMuonEndcap = booker.
book1D(
"NRPCHitPerRecoMuonEndcap" ,
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
74 h_nRPCHitPerSimMuon ->
getTH1()->SetMinimum(0);
75 h_nRPCHitPerSimMuonBarrel ->getTH1()->SetMinimum(0);
76 h_nRPCHitPerSimMuonOverlap ->getTH1()->SetMinimum(0);
77 h_nRPCHitPerSimMuonEndcap ->getTH1()->SetMinimum(0);
79 h_nRPCHitPerRecoMuon ->getTH1()->SetMinimum(0);
80 h_nRPCHitPerRecoMuonBarrel ->getTH1()->SetMinimum(0);
81 h_nRPCHitPerRecoMuonOverlap->getTH1()->SetMinimum(0);
82 h_nRPCHitPerRecoMuonEndcap ->getTH1()->SetMinimum(0);
84 float ptBins[] = {0, 1, 2, 5, 10, 20, 30, 50, 100, 200, 300, 500};
85 const int nPtBins =
sizeof(ptBins)/
sizeof(
float)-1;
86 h_simMuonBarrel_pt = booker.
book1D(
"SimMuonBarrel_pt" ,
"SimMuon RPCHit in Barrel p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
87 h_simMuonOverlap_pt = booker.
book1D(
"SimMuonOverlap_pt" ,
"SimMuon RPCHit in Overlap p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
88 h_simMuonEndcap_pt = booker.
book1D(
"SimMuonEndcap_pt" ,
"SimMuon RPCHit in Endcap p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
89 h_simMuonNoRPC_pt = booker.
book1D(
"SimMuonNoRPC_pt" ,
"SimMuon without RPCHit p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
90 h_simMuonBarrel_eta = booker.
book1D(
"SimMuonBarrel_eta" ,
"SimMuon RPCHit in Barrel #eta;#eta", 50, -2.5, 2.5);
91 h_simMuonOverlap_eta = booker.
book1D(
"SimMuonOverlap_eta",
"SimMuon RPCHit in Overlap #eta;#eta", 50, -2.5, 2.5);
92 h_simMuonEndcap_eta = booker.
book1D(
"SimMuonEndcap_eta" ,
"SimMuon RPCHit in Endcap #eta;#eta", 50, -2.5, 2.5);
93 h_simMuonNoRPC_eta = booker.
book1D(
"SimMuonNoRPC_eta",
"SimMuon without RPCHit #eta;#eta", 50, -2.5, 2.5);
94 h_simMuonBarrel_phi = booker.
book1D(
"SimMuonBarrel_phi" ,
"SimMuon RPCHit in Barrel #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
95 h_simMuonOverlap_phi = booker.
book1D(
"SimMuonOverlap_phi",
"SimMuon RPCHit in Overlap #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
96 h_simMuonEndcap_phi = booker.
book1D(
"SimMuonEndcap_phi" ,
"SimMuon RPCHit in Endcap #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
97 h_simMuonNoRPC_phi = booker.
book1D(
"SimMuonNoRPC_phi",
"SimMuon without RPCHit #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
99 h_recoMuonBarrel_pt = booker.
book1D(
"RecoMuonBarrel_pt" ,
"RecoMuon RPCHit in Barrel p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
100 h_recoMuonOverlap_pt = booker.
book1D(
"RecoMuonOverlap_pt" ,
"RecoMuon RPCHit in Overlap p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
101 h_recoMuonEndcap_pt = booker.
book1D(
"RecoMuonEndcap_pt" ,
"RecoMuon RPCHit in Endcap p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
102 h_recoMuonNoRPC_pt = booker.
book1D(
"RecoMuonNoRPC_pt" ,
"RecoMuon without RPCHit p_{T};p_{T} [GeV/c^{2}]", nPtBins, ptBins);
103 h_recoMuonBarrel_eta = booker.
book1D(
"RecoMuonBarrel_eta" ,
"RecoMuon RPCHit in Barrel #eta;#eta", 50, -2.5, 2.5);
104 h_recoMuonOverlap_eta = booker.
book1D(
"RecoMuonOverlap_eta",
"RecoMuon RPCHit in Overlap #eta;#eta", 50, -2.5, 2.5);
105 h_recoMuonEndcap_eta = booker.
book1D(
"RecoMuonEndcap_eta" ,
"RecoMuon RPCHit in Endcap #eta;#eta", 50, -2.5, 2.5);
106 h_recoMuonNoRPC_eta = booker.
book1D(
"RecoMuonNoRPC_eta",
"RecoMuon without RPCHit #eta;#eta", 50, -2.5, 2.5);
107 h_recoMuonBarrel_phi = booker.
book1D(
"RecoMuonBarrel_phi" ,
"RecoMuon RPCHit in Barrel #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
108 h_recoMuonOverlap_phi = booker.
book1D(
"RecoMuonOverlap_phi",
"RecoMuon RPCHit in Overlap #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
109 h_recoMuonEndcap_phi = booker.
book1D(
"RecoMuonEndcap_phi" ,
"RecoMuon RPCHit in Endcap #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
110 h_recoMuonNoRPC_phi = booker.
book1D(
"RecoMuonNoRPC_phi",
"RecoMuon without RPCHit #phi;#phi", 36, -
TMath::Pi(),
TMath::Pi());
112 h_simMuonBarrel_pt ->
getTH1()->SetMinimum(0);
113 h_simMuonOverlap_pt ->getTH1()->SetMinimum(0);
114 h_simMuonEndcap_pt ->getTH1()->SetMinimum(0);
115 h_simMuonNoRPC_pt ->getTH1()->SetMinimum(0);
116 h_simMuonBarrel_eta ->getTH1()->SetMinimum(0);
117 h_simMuonOverlap_eta ->getTH1()->SetMinimum(0);
118 h_simMuonEndcap_eta ->getTH1()->SetMinimum(0);
119 h_simMuonNoRPC_eta ->getTH1()->SetMinimum(0);
120 h_simMuonBarrel_phi ->getTH1()->SetMinimum(0);
121 h_simMuonOverlap_phi ->getTH1()->SetMinimum(0);
122 h_simMuonEndcap_phi ->getTH1()->SetMinimum(0);
123 h_simMuonNoRPC_phi ->getTH1()->SetMinimum(0);
125 h_recoMuonBarrel_pt ->getTH1()->SetMinimum(0);
126 h_recoMuonOverlap_pt ->getTH1()->SetMinimum(0);
127 h_recoMuonEndcap_pt ->getTH1()->SetMinimum(0);
128 h_recoMuonNoRPC_pt ->getTH1()->SetMinimum(0);
129 h_recoMuonBarrel_eta ->getTH1()->SetMinimum(0);
130 h_recoMuonOverlap_eta->getTH1()->SetMinimum(0);
131 h_recoMuonEndcap_eta ->getTH1()->SetMinimum(0);
132 h_recoMuonNoRPC_eta ->getTH1()->SetMinimum(0);
133 h_recoMuonBarrel_phi ->getTH1()->SetMinimum(0);
134 h_recoMuonOverlap_phi->getTH1()->SetMinimum(0);
135 h_recoMuonEndcap_phi ->getTH1()->SetMinimum(0);
136 h_recoMuonNoRPC_phi ->getTH1()->SetMinimum(0);
140 h_eventCount = booker.
book1D(
"EventCount",
"Event count", 3, 1, 4);
141 h_eventCount->
getTH1()->SetMinimum(0);
144 TH1*
h = h_eventCount->getTH1();
145 h->GetXaxis()->SetBinLabel(1,
"eventBegin");
146 h->GetXaxis()->SetBinLabel(2,
"eventEnd");
147 h->GetXaxis()->SetBinLabel(3,
"run");
149 h_eventCount->Fill(3);
151 h_refPunchOccupancyBarrel_wheel = booker.
book1D(
"RefPunchOccupancyBarrel_wheel" ,
"RefPunchthrough occupancy", 5, -2.5, 2.5);
152 h_refPunchOccupancyEndcap_disk = booker.
book1D(
"RefPunchOccupancyEndcap_disk" ,
"RefPunchthrough occupancy", 9, -4.5, 4.5);
153 h_refPunchOccupancyBarrel_station = booker.
book1D(
"RefPunchOccupancyBarrel_station",
"RefPunchthrough occupancy", 4, 0.5, 4.5);
154 h_recPunchOccupancyBarrel_wheel = booker.
book1D(
"RecPunchOccupancyBarrel_wheel" ,
"Punchthrough recHit occupancy", 5, -2.5, 2.5);
155 h_recPunchOccupancyEndcap_disk = booker.
book1D(
"RecPunchOccupancyEndcap_disk" ,
"Punchthrough recHit occupancy", 9, -4.5, 4.5);
156 h_recPunchOccupancyBarrel_station = booker.
book1D(
"RecPunchOccupancyBarrel_station",
"Punchthrough recHit occupancy", 4, 0.5, 4.5);
158 h_refPunchOccupancyBarrel_wheel ->
getTH1()->SetMinimum(0);
159 h_refPunchOccupancyEndcap_disk ->getTH1()->SetMinimum(0);
160 h_refPunchOccupancyBarrel_station ->getTH1()->SetMinimum(0);
161 h_recPunchOccupancyBarrel_wheel ->getTH1()->SetMinimum(0);
162 h_recPunchOccupancyEndcap_disk ->getTH1()->SetMinimum(0);
163 h_recPunchOccupancyBarrel_station ->getTH1()->SetMinimum(0);
165 h_refPunchOccupancyBarrel_wheel_station = booker.
book2D(
"RefPunchOccupancyBarrel_wheel_station",
"RefPunchthrough occupancy", 5, -2.5, 2.5, 4, 0.5, 4.5);
166 h_refPunchOccupancyEndcap_disk_ring = booker.
book2D(
"RefPunchOccupancyEndcap_disk_ring" ,
"RefPunchthrough occupancy", 9, -4.5, 4.5, 4, 0.5, 4.5);
167 h_recPunchOccupancyBarrel_wheel_station = booker.
book2D(
"RecPunchOccupancyBarrel_wheel_station",
"Punchthrough recHit occupancy", 5, -2.5, 2.5, 4, 0.5, 4.5);
168 h_recPunchOccupancyEndcap_disk_ring = booker.
book2D(
"RecPunchOccupancyEndcap_disk_ring" ,
"Punchthrough recHit occupancy", 9, -4.5, 4.5, 4, 0.5, 4.5);
170 h_refPunchOccupancyBarrel_wheel_station->
getTH2F()->SetOption(
"COLZ");
171 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->SetOption(
"COLZ");
172 h_recPunchOccupancyBarrel_wheel_station->getTH2F()->SetOption(
"COLZ");
173 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->SetOption(
"COLZ");
175 h_refPunchOccupancyBarrel_wheel_station->getTH2F()->SetContour(10);
176 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->SetContour(10);
177 h_recPunchOccupancyBarrel_wheel_station->getTH2F()->SetContour(10);
178 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->SetContour(10);
180 h_refPunchOccupancyBarrel_wheel_station->getTH2F()->SetStats(0);
181 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->SetStats(0);
182 h_recPunchOccupancyBarrel_wheel_station->getTH2F()->SetStats(0);
183 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->SetStats(0);
185 h_refPunchOccupancyBarrel_wheel_station->getTH2F()->SetMinimum(0);
186 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->SetMinimum(0);
187 h_recPunchOccupancyBarrel_wheel_station->getTH2F()->SetMinimum(0);
188 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->SetMinimum(0);
190 for (
int i=1;
i<=5; ++
i )
192 TString binLabel = Form(
"Wheel %d",
i-3);
193 h_refPunchOccupancyBarrel_wheel->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
194 h_refPunchOccupancyBarrel_wheel_station->getTH2F()->GetXaxis()->SetBinLabel(
i, binLabel);
195 h_recPunchOccupancyBarrel_wheel->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
196 h_recPunchOccupancyBarrel_wheel_station->getTH2F()->GetXaxis()->SetBinLabel(
i, binLabel);
199 for (
int i=1;
i<=9; ++
i )
201 TString binLabel = Form(
"Disk %d",
i-5);
202 h_refPunchOccupancyEndcap_disk ->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
203 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->GetXaxis()->SetBinLabel(
i, binLabel);
204 h_recPunchOccupancyEndcap_disk ->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
205 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->GetXaxis()->SetBinLabel(
i, binLabel);
208 for (
int i=1;
i<=4; ++
i )
210 TString binLabel = Form(
"Station %d",
i);
211 h_refPunchOccupancyBarrel_station ->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
212 h_refPunchOccupancyBarrel_wheel_station ->getTH2F()->GetYaxis()->SetBinLabel(
i, binLabel);
213 h_recPunchOccupancyBarrel_station ->getTH1()->GetXaxis()->SetBinLabel(
i, binLabel);
214 h_recPunchOccupancyBarrel_wheel_station ->getTH2F()->GetYaxis()->SetBinLabel(
i, binLabel);
217 for (
int i=1;
i<=4; ++
i )
219 TString binLabel = Form(
"Ring %d",
i);
220 h_refPunchOccupancyEndcap_disk_ring ->getTH2F()->GetYaxis()->SetBinLabel(
i, binLabel);
221 h_recPunchOccupancyEndcap_disk_ring ->getTH2F()->GetYaxis()->SetBinLabel(
i, binLabel);
228 int nRPCRollBarrel = 0, nRPCRollEndcap = 0;
231 for (
auto det : rpcDets )
233 auto rpcCh =
dynamic_cast<const RPCChamber*
>(det);
234 if ( !rpcCh )
continue;
236 std::vector<const RPCRoll*> rolls = rpcCh->
rolls();
237 for (
auto roll : rolls )
239 if ( !roll )
continue;
242 const int rawId = roll->geographicalId().rawId();
245 if ( roll->isBarrel() )
247 detIdToIndexMapBarrel_[rawId] = nRPCRollBarrel;
253 detIdToIndexMapEndcap_[rawId] = nRPCRollEndcap;
261 h_matchOccupancyBarrel_detId = booker.
book1D(
"MatchOccupancyBarrel_detId",
"Matched hit occupancy;roll index (can be arbitrary)", nRPCRollBarrel, 0, nRPCRollBarrel);
262 h_matchOccupancyEndcap_detId = booker.
book1D(
"MatchOccupancyEndcap_detId",
"Matched hit occupancy;roll index (can be arbitrary)", nRPCRollEndcap, 0, nRPCRollEndcap);
263 h_refOccupancyBarrel_detId = booker.
book1D(
"RefOccupancyBarrel_detId",
"Reference hit occupancy;roll index (can be arbitrary)", nRPCRollBarrel, 0, nRPCRollBarrel);
264 h_refOccupancyEndcap_detId = booker.
book1D(
"RefOccupancyEndcap_detId",
"Reference hit occupancy;roll index (can be arbitrary)", nRPCRollEndcap, 0, nRPCRollEndcap);
265 h_noiseOccupancyBarrel_detId = booker.
book1D(
"NoiseOccupancyBarrel_detId",
"Noise occupancy;roll index (can be arbitrary)", nRPCRollBarrel, 0, nRPCRollBarrel);
266 h_noiseOccupancyEndcap_detId = booker.
book1D(
"NoiseOccupancyEndcap_detId",
"Noise occupancy;roll index (can be arbitrary)", nRPCRollEndcap, 0, nRPCRollEndcap);
268 h_matchOccupancyBarrel_detId->
getTH1()->SetMinimum(0);
269 h_matchOccupancyEndcap_detId->getTH1()->SetMinimum(0);
270 h_refOccupancyBarrel_detId ->getTH1()->SetMinimum(0);
271 h_refOccupancyEndcap_detId ->getTH1()->SetMinimum(0);
272 h_noiseOccupancyBarrel_detId->getTH1()->SetMinimum(0);
273 h_noiseOccupancyEndcap_detId->getTH1()->SetMinimum(0);
275 h_rollAreaBarrel_detId = booker.
bookProfile(
"RollAreaBarrel_detId",
"Roll area;roll index;Area", nRPCRollBarrel, 0., 1.*nRPCRollBarrel, 0., 1e5);
276 h_rollAreaEndcap_detId = booker.
bookProfile(
"RollAreaEndcap_detId",
"Roll area;roll index;Area", nRPCRollEndcap, 0., 1.*nRPCRollEndcap, 0., 1e5);
278 for (
auto detIdToIndex : detIdToIndexMapBarrel_ )
280 const int rawId = detIdToIndex.first;
281 const int index = detIdToIndex.second;
292 h_rollAreaBarrel_detId->Fill(index, area);
295 for (
auto detIdToIndex : detIdToIndexMapEndcap_ )
297 const int rawId = detIdToIndex.first;
298 const int index = detIdToIndex.second;
309 h_rollAreaEndcap_detId->Fill(index, area);
316 h_eventCount->Fill(1);
324 if ( !event.
getByToken(simHitToken_, simHitHandle) )
326 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find simHit collection\n";
332 if ( !event.
getByToken(recHitToken_, recHitHandle) )
334 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find recHit collection\n";
340 if ( !event.
getByToken(simParticleToken_, simParticleHandle) )
342 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find TrackingParticle collection\n";
348 if ( !event.
getByToken(simHitAssocToken_, simHitsTPAssoc) )
350 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find TrackingParticle to SimHit association map\n";
356 if ( !event.
getByToken(muonToken_, muonHandle) )
358 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find muon collection\n";
362 typedef edm::PSimHitContainer::const_iterator SimHitIter;
364 typedef std::vector<TrackPSimHitRef> SimHitRefs;
367 SimHitRefs muonSimHits, pthrSimHits;
369 for (
int i=0,
n=simParticleHandle->size();
i<
n; ++
i )
372 if ( simParticle->pt() < 1.0
or simParticle->p() < 2.5 )
continue;
375 SimHitRefs simHitsFromParticle;
376 auto range = std::equal_range(simHitsTPAssoc->begin(), simHitsTPAssoc->end(),
379 for (
auto simParticleToHit = range.first; simParticleToHit != range.second; ++simParticleToHit )
381 auto simHit = simParticleToHit->second;
385 simHitsFromParticle.push_back(simParticleToHit->second);
387 const int nRPCHit = simHitsFromParticle.size();
388 const bool hasRPCHit = nRPCHit > 0;
390 if (
abs(simParticle->pdgId()) == 13 )
392 muonSimHits.insert(muonSimHits.end(), simHitsFromParticle.begin(), simHitsFromParticle.end());
395 int nRPCHitBarrel = 0;
396 int nRPCHitEndcap = 0;
397 for (
auto simHit : simHitsFromParticle )
401 if ( !roll )
continue;
403 if ( rpcDetId.
region() == 0 ) ++nRPCHitBarrel;
404 else ++nRPCHitEndcap;
408 h_nRPCHitPerSimMuon->Fill(nRPCHit);
409 if ( nRPCHitBarrel and nRPCHitEndcap )
411 h_nRPCHitPerSimMuonOverlap->Fill(nRPCHit);
412 h_simMuonOverlap_pt->Fill(simParticle->pt());
413 h_simMuonOverlap_eta->Fill(simParticle->eta());
414 h_simMuonOverlap_phi->Fill(simParticle->phi());
416 else if ( nRPCHitBarrel )
418 h_nRPCHitPerSimMuonBarrel->Fill(nRPCHit);
419 h_simMuonBarrel_pt->Fill(simParticle->pt());
420 h_simMuonBarrel_eta->Fill(simParticle->eta());
421 h_simMuonBarrel_phi->Fill(simParticle->phi());
423 else if ( nRPCHitEndcap )
425 h_nRPCHitPerSimMuonEndcap->Fill(nRPCHit);
426 h_simMuonEndcap_pt->Fill(simParticle->pt());
427 h_simMuonEndcap_eta->Fill(simParticle->eta());
428 h_simMuonEndcap_phi->Fill(simParticle->phi());
432 h_simMuonNoRPC_pt->Fill(simParticle->pt());
433 h_simMuonNoRPC_eta->Fill(simParticle->eta());
434 h_simMuonNoRPC_phi->Fill(simParticle->phi());
439 pthrSimHits.insert(pthrSimHits.end(), simHitsFromParticle.begin(), simHitsFromParticle.end());
444 switch ( simParticle->pdgId() )
446 case 13: h_simParticleType->Fill( 0);
break;
447 case -13: h_simParticleType->Fill( 1);
break;
448 case 11: h_simParticleType->Fill( 2);
break;
449 case -11: h_simParticleType->Fill( 3);
break;
450 case 211: h_simParticleType->Fill( 4);
break;
451 case -211: h_simParticleType->Fill( 5);
break;
452 case 321: h_simParticleType->Fill( 6);
break;
453 case -321: h_simParticleType->Fill( 7);
break;
454 case 2212: h_simParticleType->Fill( 8);
break;
455 case -2212: h_simParticleType->Fill( 9);
break;
456 default: h_simParticleType->Fill(10);
break;
462 int nRefHitBarrel = 0, nRefHitEndcap = 0;
463 for (
auto simHit : muonSimHits )
468 const int region = roll->
id().
region();
478 h_.refHitOccupancyBarrel_wheel->Fill(ring);
479 h_.refHitOccupancyBarrel_station->Fill(station);
480 h_.refHitOccupancyBarrel_wheel_station->Fill(ring, station);
482 h_refOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[
simHit->detUnitId()]);
487 h_.refHitOccupancyEndcap_disk->Fill(region*station);
488 h_.refHitOccupancyEndcap_disk_ring->Fill(region*station, ring);
490 h_refOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[
simHit->detUnitId()]);
495 for (
auto simHit : pthrSimHits )
500 const int region = roll->
id().
region();
510 h_refPunchOccupancyBarrel_wheel->Fill(ring);
511 h_refPunchOccupancyBarrel_station->Fill(station);
512 h_refPunchOccupancyBarrel_wheel_station->Fill(ring, station);
514 h_refOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[
simHit->detUnitId()]);
519 h_refPunchOccupancyEndcap_disk->Fill(region*station);
520 h_refPunchOccupancyEndcap_disk_ring->Fill(region*station, ring);
522 h_refOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[
simHit->detUnitId()]);
525 h_.nRefHitBarrel->Fill(nRefHitBarrel);
526 h_.nRefHitEndcap->Fill(nRefHitEndcap);
529 int sumClusterSizeBarrel = 0, sumClusterSizeEndcap = 0;
530 int nRecHitBarrel = 0, nRecHitEndcap = 0;
531 for ( RecHitIter recHitIter = recHitHandle->begin();
532 recHitIter != recHitHandle->end(); ++recHitIter )
536 if ( !roll )
continue;
538 const int region = roll->
id().
region();
545 const double time = recHitIter->timeError() >= 0 ? recHitIter->time() : recHitIter->BunchX()*25;
547 h_.clusterSize->Fill(recHitIter->clusterSize());
552 sumClusterSizeBarrel += recHitIter->clusterSize();
553 h_.clusterSizeBarrel->Fill(recHitIter->clusterSize());
554 h_.recHitOccupancyBarrel_wheel->Fill(ring);
555 h_.recHitOccupancyBarrel_station->Fill(station);
556 h_.recHitOccupancyBarrel_wheel_station->Fill(ring, station);
558 h_.timeBarrel->Fill(time);
563 sumClusterSizeEndcap += recHitIter->clusterSize();
564 h_.clusterSizeEndcap->Fill(recHitIter->clusterSize());
565 h_.recHitOccupancyEndcap_disk->Fill(region*station);
566 h_.recHitOccupancyEndcap_disk_ring->Fill(region*station, ring);
568 h_.timeEndcap->Fill(time);
572 h_.timeIRPC->Fill(time);
575 h_.timeCRPC->Fill(time);
579 const double nRecHit = nRecHitBarrel+nRecHitEndcap;
580 h_.nRecHitBarrel->Fill(nRecHitBarrel);
581 h_.nRecHitEndcap->Fill(nRecHitEndcap);
584 const int sumClusterSize = sumClusterSizeBarrel+sumClusterSizeEndcap;
585 h_.avgClusterSize->Fill(
double(sumClusterSize)/nRecHit);
587 if ( nRecHitBarrel > 0 )
589 h_.avgClusterSizeBarrel->Fill(
double(sumClusterSizeBarrel)/nRecHitBarrel);
591 if ( nRecHitEndcap > 0 )
593 h_.avgClusterSizeEndcap->Fill(
double(sumClusterSizeEndcap)/nRecHitEndcap);
598 typedef std::map<TrackPSimHitRef, RecHitIter> SimToRecHitMap;
599 SimToRecHitMap simToRecHitMap;
601 for (
auto simHit : muonSimHits )
606 const double simX =
simHit->localPosition().x();
608 for ( RecHitIter recHitIter = recHitHandle->begin();
609 recHitIter != recHitHandle->end(); ++recHitIter )
613 if ( !recRoll )
continue;
615 if ( simDetId != recDetId )
continue;
617 const double recX = recHitIter->localPosition().x();
618 const double newDx = fabs(recX - simX);
621 SimToRecHitMap::const_iterator prevSimToReco = simToRecHitMap.find(
simHit);
622 if ( prevSimToReco == simToRecHitMap.end() )
624 simToRecHitMap.insert(std::make_pair(
simHit, recHitIter));
628 const double oldDx = fabs(prevSimToReco->second->localPosition().x() - simX);
632 simToRecHitMap[
simHit] = recHitIter;
640 int nMatchHitBarrel = 0, nMatchHitEndcap = 0;
641 for (
auto match : simToRecHitMap )
644 RecHitIter recHitIter =
match.second;
649 const int region = roll->
id().
region();
656 const double simX = simHit->localPosition().x();
657 const double recX = recHitIter->localPosition().x();
658 const double errX =
sqrt(recHitIter->localPositionError().xx());
659 const double dX = recX - simX;
660 const double pull = errX == 0 ? -999 : dX/
errX;
668 h_.resBarrel->Fill(dX);
669 h_.pullBarrel->Fill(pull);
670 h_.matchOccupancyBarrel_wheel->Fill(ring);
671 h_.matchOccupancyBarrel_station->Fill(station);
672 h_.matchOccupancyBarrel_wheel_station->Fill(ring, station);
674 h_.res_wheel_res->Fill(ring, dX);
675 h_.res_station_res->Fill(station, dX);
676 h_.pull_wheel_pull->Fill(ring, pull);
677 h_.pull_station_pull->Fill(station, pull);
679 h_matchOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[detId.
rawId()]);
684 h_.resEndcap->Fill(dX);
685 h_.pullEndcap->Fill(pull);
686 h_.matchOccupancyEndcap_disk->Fill(region*station);
687 h_.matchOccupancyEndcap_disk_ring->Fill(region*station, ring);
689 h_.res_disk_res->Fill(region*station, dX);
690 h_.res_ring_res->Fill(ring, dX);
691 h_.pull_disk_pull->Fill(region*station, pull);
692 h_.pull_ring_pull->Fill(ring, pull);
694 h_matchOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[detId.
rawId()]);
698 h_.nMatchHitBarrel->Fill(nMatchHitBarrel);
699 h_.nMatchHitEndcap->Fill(nMatchHitEndcap);
702 for ( reco::MuonCollection::const_iterator
muon = muonHandle->begin();
705 if ( !
muon->isGlobalMuon() )
continue;
707 int nRPCHitBarrel = 0;
708 int nRPCHitEndcap = 0;
714 if ( !(*recHit)->isValid() )
continue;
715 const DetId detId = (*recHit)->geographicalId();
719 if ( rpcDetId.
region() == 0 ) ++nRPCHitBarrel;
720 else ++nRPCHitEndcap;
723 const int nRPCHit = nRPCHitBarrel + nRPCHitEndcap;
724 h_nRPCHitPerRecoMuon->Fill(nRPCHit);
725 if ( nRPCHitBarrel and nRPCHitEndcap )
727 h_nRPCHitPerRecoMuonOverlap->Fill(nRPCHit);
728 h_recoMuonOverlap_pt->Fill(
muon->pt());
729 h_recoMuonOverlap_eta->Fill(
muon->eta());
730 h_recoMuonOverlap_phi->Fill(
muon->phi());
732 else if ( nRPCHitBarrel )
734 h_nRPCHitPerRecoMuonBarrel->Fill(nRPCHit);
735 h_recoMuonBarrel_pt->Fill(
muon->pt());
736 h_recoMuonBarrel_eta->Fill(
muon->eta());
737 h_recoMuonBarrel_phi->Fill(
muon->phi());
739 else if ( nRPCHitEndcap )
741 h_nRPCHitPerRecoMuonEndcap->Fill(nRPCHit);
742 h_recoMuonEndcap_pt->Fill(
muon->pt());
743 h_recoMuonEndcap_eta->Fill(
muon->eta());
744 h_recoMuonEndcap_phi->Fill(
muon->phi());
748 h_recoMuonNoRPC_pt->Fill(
muon->pt());
749 h_recoMuonNoRPC_eta->Fill(
muon->eta());
750 h_recoMuonNoRPC_phi->Fill(
muon->phi());
755 for ( RecHitIter recHitIter = recHitHandle->begin();
756 recHitIter != recHitHandle->end(); ++recHitIter )
761 const int region = roll->
id().
region();
769 for (
auto match : simToRecHitMap )
771 if ( recHitIter ==
match.second )
780 int nPunchMatched = 0;
782 for (
auto simHit : pthrSimHits )
784 const int absSimHitPType =
abs(
simHit->particleType());
785 if ( absSimHitPType == 13 )
continue;
788 if ( simDetId == detId ) ++nPunchMatched;
791 if ( nPunchMatched > 0 )
795 h_recPunchOccupancyBarrel_wheel->Fill(ring);
796 h_recPunchOccupancyBarrel_station->Fill(station);
797 h_recPunchOccupancyBarrel_wheel_station->Fill(ring, station);
801 h_recPunchOccupancyEndcap_disk->Fill(region*station);
802 h_recPunchOccupancyEndcap_disk_ring->Fill(region*station, ring);
809 for ( RecHitIter recHitIter = recHitHandle->begin();
810 recHitIter != recHitHandle->end(); ++recHitIter )
815 const int region = roll->
id().
region();
822 const double recX = recHitIter->localPosition().x();
823 const double recErrX =
sqrt(recHitIter->localPositionError().xx());
826 for ( SimHitIter simHitIter = simHitHandle->begin();
827 simHitIter != simHitHandle->end(); ++simHitIter )
829 const RPCDetId simDetId =
static_cast<const RPCDetId>(simHitIter->detUnitId());
831 if ( !simRoll )
continue;
833 if ( simDetId != recDetId )
continue;
835 const double simX = simHitIter->localPosition().x();
836 const double dX = fabs(recX-simX);
838 if ( dX/recErrX < 5 )
849 h_noiseOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[recDetId.
rawId()]);
853 h_noiseOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[recDetId.
rawId()]);
858 h_eventCount->Fill(2);
T getParameter(std::string const &) const
virtual float stripLength() const =0
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
RPCRecHitValid(const edm::ParameterSet &pset)
static bool simHitTPAssociationListGreater(SimHitTPPair i, SimHitTPPair j)
MonitorElement * bookProfile(Args &&...args)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
#define DEFINE_FWK_MODULE(type)
const StripTopology & specificTopology() const
uint32_t rawId() const
get the raw id
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
MonitorElement * book1D(Args &&...args)
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
Abs< T >::type abs(const T &t)
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
void setCurrentFolder(const std::string &fullpath)
MonitorElement * book2D(Args &&...args)
virtual const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
virtual int nstrips() const =0
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
virtual float pitch() const =0
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
TH2F * getTH2F(void) const
Detector det() const
get the detector field from this detid
std::vector< GeomDet const * > DetContainer
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override
const RPCRoll * roll(RPCDetId id) const
Return a roll given its id.
TrackingRecHitCollection::base::const_iterator trackingRecHit_iterator
iterator over a vector of reference to TrackingRecHit in the same collection
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.