27 simParticleToken_ = consumes<SimParticles>(
pset.getParameter<
edm::InputTag>(
"simTrack"));
28 simHitAssocToken_ = consumes<SimHitAssoc>(
pset.getParameter<
edm::InputTag>(
"simHitAssoc"));
29 muonToken_ = consumes<reco::MuonCollection>(
pset.getParameter<
edm::InputTag>(
"muon"));
34 rpcGeomTokenInRun_ = esConsumes<edm::Transition::BeginRun>();
39 h_.bookHistograms(booker, subDir_);
43 h_simParticleType = booker.
book1D(
"SimHitPType",
"SimHit particle type", 11, 0, 11);
44 h_simParticleType->
getTH1()->SetMinimum(0);
45 if (TH1 *
h = h_simParticleType->getTH1()) {
46 h->GetXaxis()->SetBinLabel(1,
"#mu^{-}");
47 h->GetXaxis()->SetBinLabel(2,
"#mu^{+}");
48 h->GetXaxis()->SetBinLabel(3,
"e^{-}");
49 h->GetXaxis()->SetBinLabel(4,
"e^{+}");
50 h->GetXaxis()->SetBinLabel(5,
"#pi^{+}");
51 h->GetXaxis()->SetBinLabel(6,
"#pi^{-}");
52 h->GetXaxis()->SetBinLabel(7,
"K^{+}");
53 h->GetXaxis()->SetBinLabel(8,
"K^{-}");
54 h->GetXaxis()->SetBinLabel(9,
"p^{+}");
55 h->GetXaxis()->SetBinLabel(10,
"p^{-}");
56 h->GetXaxis()->SetBinLabel(11,
"Other");
61 h_nRPCHitPerSimMuon = booker.
book1D(
"NRPCHitPerSimMuon",
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
62 h_nRPCHitPerSimMuonBarrel =
63 booker.
book1D(
"NRPCHitPerSimMuonBarrel",
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
64 h_nRPCHitPerSimMuonOverlap =
65 booker.
book1D(
"NRPCHitPerSimMuonOverlap",
"Number of RPC SimHit per SimMuon", 11, -0.5, 10.5);
66 h_nRPCHitPerSimMuonEndcap =
67 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 =
71 booker.
book1D(
"NRPCHitPerRecoMuonBarrel",
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
72 h_nRPCHitPerRecoMuonOverlap =
73 booker.
book1D(
"NRPCHitPerRecoMuonOverlap",
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
74 h_nRPCHitPerRecoMuonEndcap =
75 booker.
book1D(
"NRPCHitPerRecoMuonEndcap",
"Number of RPC RecHit per RecoMuon", 11, -0.5, 10.5);
77 h_nRPCHitPerSimMuon->
getTH1()->SetMinimum(0);
78 h_nRPCHitPerSimMuonBarrel->getTH1()->SetMinimum(0);
79 h_nRPCHitPerSimMuonOverlap->getTH1()->SetMinimum(0);
80 h_nRPCHitPerSimMuonEndcap->getTH1()->SetMinimum(0);
82 h_nRPCHitPerRecoMuon->getTH1()->SetMinimum(0);
83 h_nRPCHitPerRecoMuonBarrel->getTH1()->SetMinimum(0);
84 h_nRPCHitPerRecoMuonOverlap->getTH1()->SetMinimum(0);
85 h_nRPCHitPerRecoMuonEndcap->getTH1()->SetMinimum(0);
87 float ptBins[] = {0, 1, 2, 5, 10, 20, 30, 50, 100, 200, 300, 500};
90 booker.
book1D(
"SimMuonBarrel_pt",
"SimMuon RPCHit in Barrel p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
92 booker.
book1D(
"SimMuonOverlap_pt",
"SimMuon RPCHit in Overlap p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
94 booker.
book1D(
"SimMuonEndcap_pt",
"SimMuon RPCHit in Endcap p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
96 booker.
book1D(
"SimMuonNoRPC_pt",
"SimMuon without RPCHit p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
97 h_simMuonBarrel_eta = booker.
book1D(
"SimMuonBarrel_eta",
"SimMuon RPCHit in Barrel #eta;#eta", 50, -2.5, 2.5);
98 h_simMuonOverlap_eta = booker.
book1D(
"SimMuonOverlap_eta",
"SimMuon RPCHit in Overlap #eta;#eta", 50, -2.5, 2.5);
99 h_simMuonEndcap_eta = booker.
book1D(
"SimMuonEndcap_eta",
"SimMuon RPCHit in Endcap #eta;#eta", 50, -2.5, 2.5);
100 h_simMuonNoRPC_eta = booker.
book1D(
"SimMuonNoRPC_eta",
"SimMuon without RPCHit #eta;#eta", 50, -2.5, 2.5);
101 h_simMuonBarrel_phi =
103 h_simMuonOverlap_phi =
105 h_simMuonEndcap_phi =
110 h_recoMuonBarrel_pt =
111 booker.
book1D(
"RecoMuonBarrel_pt",
"RecoMuon RPCHit in Barrel p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
112 h_recoMuonOverlap_pt =
113 booker.
book1D(
"RecoMuonOverlap_pt",
"RecoMuon RPCHit in Overlap p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
114 h_recoMuonEndcap_pt =
115 booker.
book1D(
"RecoMuonEndcap_pt",
"RecoMuon RPCHit in Endcap p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
117 booker.
book1D(
"RecoMuonNoRPC_pt",
"RecoMuon without RPCHit p_{T};p_{T} [GeV/c^{2}]",
nPtBins,
ptBins);
118 h_recoMuonBarrel_eta = booker.
book1D(
"RecoMuonBarrel_eta",
"RecoMuon RPCHit in Barrel #eta;#eta", 50, -2.5, 2.5);
119 h_recoMuonOverlap_eta = booker.
book1D(
"RecoMuonOverlap_eta",
"RecoMuon RPCHit in Overlap #eta;#eta", 50, -2.5, 2.5);
120 h_recoMuonEndcap_eta = booker.
book1D(
"RecoMuonEndcap_eta",
"RecoMuon RPCHit in Endcap #eta;#eta", 50, -2.5, 2.5);
121 h_recoMuonNoRPC_eta = booker.
book1D(
"RecoMuonNoRPC_eta",
"RecoMuon without RPCHit #eta;#eta", 50, -2.5, 2.5);
122 h_recoMuonBarrel_phi =
124 h_recoMuonOverlap_phi =
126 h_recoMuonEndcap_phi =
128 h_recoMuonNoRPC_phi =
131 h_simMuonBarrel_pt->
getTH1()->SetMinimum(0);
132 h_simMuonOverlap_pt->getTH1()->SetMinimum(0);
133 h_simMuonEndcap_pt->getTH1()->SetMinimum(0);
134 h_simMuonNoRPC_pt->getTH1()->SetMinimum(0);
135 h_simMuonBarrel_eta->getTH1()->SetMinimum(0);
136 h_simMuonOverlap_eta->getTH1()->SetMinimum(0);
137 h_simMuonEndcap_eta->getTH1()->SetMinimum(0);
138 h_simMuonNoRPC_eta->getTH1()->SetMinimum(0);
139 h_simMuonBarrel_phi->getTH1()->SetMinimum(0);
140 h_simMuonOverlap_phi->getTH1()->SetMinimum(0);
141 h_simMuonEndcap_phi->getTH1()->SetMinimum(0);
142 h_simMuonNoRPC_phi->getTH1()->SetMinimum(0);
144 h_recoMuonBarrel_pt->getTH1()->SetMinimum(0);
145 h_recoMuonOverlap_pt->getTH1()->SetMinimum(0);
146 h_recoMuonEndcap_pt->getTH1()->SetMinimum(0);
147 h_recoMuonNoRPC_pt->getTH1()->SetMinimum(0);
148 h_recoMuonBarrel_eta->getTH1()->SetMinimum(0);
149 h_recoMuonOverlap_eta->getTH1()->SetMinimum(0);
150 h_recoMuonEndcap_eta->getTH1()->SetMinimum(0);
151 h_recoMuonNoRPC_eta->getTH1()->SetMinimum(0);
152 h_recoMuonBarrel_phi->getTH1()->SetMinimum(0);
153 h_recoMuonOverlap_phi->getTH1()->SetMinimum(0);
154 h_recoMuonEndcap_phi->getTH1()->SetMinimum(0);
155 h_recoMuonNoRPC_phi->getTH1()->SetMinimum(0);
159 h_eventCount = booker.
book1D(
"EventCount",
"Event count", 3, 1, 4);
160 h_eventCount->
getTH1()->SetMinimum(0);
162 TH1 *
h = h_eventCount->getTH1();
163 h->GetXaxis()->SetBinLabel(1,
"eventBegin");
164 h->GetXaxis()->SetBinLabel(2,
"eventEnd");
165 h->GetXaxis()->SetBinLabel(3,
"run");
167 h_eventCount->Fill(3);
170 auto rpcGeom =
eventSetup.getHandle(rpcGeomTokenInRun_);
172 int nRPCRollBarrel = 0, nRPCRollEndcap = 0;
175 for (
auto det : rpcDets) {
176 auto rpcCh =
dynamic_cast<const RPCChamber *
>(det);
180 std::vector<const RPCRoll *> rolls = rpcCh->
rolls();
181 for (
auto roll : rolls) {
185 const int rawId =
roll->geographicalId().rawId();
187 if (
roll->isBarrel()) {
188 detIdToIndexMapBarrel_[
rawId] = nRPCRollBarrel;
191 detIdToIndexMapEndcap_[
rawId] = nRPCRollEndcap;
198 h_matchOccupancyBarrel_detId = booker.
book1D(
"MatchOccupancyBarrel_detId",
199 "Matched hit occupancy;roll index (can be arbitrary)",
203 h_matchOccupancyEndcap_detId = booker.
book1D(
"MatchOccupancyEndcap_detId",
204 "Matched hit occupancy;roll index (can be arbitrary)",
208 h_refOccupancyBarrel_detId = booker.
book1D(
"RefOccupancyBarrel_detId",
209 "Reference hit occupancy;roll index (can be arbitrary)",
213 h_refOccupancyEndcap_detId = booker.
book1D(
"RefOccupancyEndcap_detId",
214 "Reference hit occupancy;roll index (can be arbitrary)",
218 h_allOccupancyBarrel_detId = booker.
book1D(
219 "OccupancyBarrel_detId",
"Occupancy;roll index (can be arbitrary)", nRPCRollBarrel, 0, nRPCRollBarrel);
220 h_allOccupancyEndcap_detId = booker.
book1D(
221 "OccupancyEndcap_detId",
"Occupancy;roll index (can be arbitrary)", nRPCRollEndcap, 0, nRPCRollEndcap);
223 h_matchOccupancyBarrel_detId->
getTH1()->SetMinimum(0);
224 h_matchOccupancyEndcap_detId->getTH1()->SetMinimum(0);
225 h_refOccupancyBarrel_detId->getTH1()->SetMinimum(0);
226 h_refOccupancyEndcap_detId->getTH1()->SetMinimum(0);
227 h_allOccupancyBarrel_detId->getTH1()->SetMinimum(0);
228 h_allOccupancyEndcap_detId->getTH1()->SetMinimum(0);
231 "RollAreaBarrel_detId",
"Roll area;roll index;Area", nRPCRollBarrel, 0., 1. * nRPCRollBarrel, 0., 1
e5);
233 "RollAreaEndcap_detId",
"Roll area;roll index;Area", nRPCRollEndcap, 0., 1. * nRPCRollEndcap, 0., 1
e5);
235 for (
auto detIdToIndex : detIdToIndexMapBarrel_) {
236 const int rawId = detIdToIndex.first;
237 const int index = detIdToIndex.second;
245 h_rollAreaBarrel_detId->Fill(
index,
area);
248 for (
auto detIdToIndex : detIdToIndexMapEndcap_) {
249 const int rawId = detIdToIndex.first;
250 const int index = detIdToIndex.second;
258 h_rollAreaEndcap_detId->Fill(
index,
area);
263 h_eventCount->Fill(1);
266 auto rpcGeom =
eventSetup.getHandle(rpcGeomToken_);
270 if (!
event.getByToken(simHitToken_, simHitHandle)) {
271 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find simHit collection\n";
277 if (!
event.getByToken(recHitToken_, recHitHandle)) {
278 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find recHit collection\n";
284 if (!
event.getByToken(simParticleToken_, simParticleHandle)) {
285 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find TrackingParticle collection\n";
291 if (!
event.getByToken(simHitAssocToken_, simHitsTPAssoc)) {
292 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find TrackingParticle to SimHit association map\n";
298 if (!
event.getByToken(muonToken_, muonHandle)) {
299 edm::LogInfo(
"RPCRecHitValid") <<
"Cannot find muon collection\n";
303 typedef edm::PSimHitContainer::const_iterator SimHitIter;
305 typedef std::vector<TrackPSimHitRef> SimHitRefs;
308 SimHitRefs muonSimHits;
310 for (
int i = 0,
n = simParticleHandle->size();
i <
n; ++
i) {
312 if (simParticle->pt() < 1.0
or simParticle->p() < 2.5)
316 SimHitRefs simHitsFromParticle;
317 auto range = std::equal_range(simHitsTPAssoc->begin(),
318 simHitsTPAssoc->end(),
321 for (
auto simParticleToHit =
range.first; simParticleToHit !=
range.second; ++simParticleToHit) {
322 auto simHit = simParticleToHit->second;
327 simHitsFromParticle.push_back(simParticleToHit->second);
329 const int nRPCHit = simHitsFromParticle.size();
330 const bool hasRPCHit = nRPCHit > 0;
332 if (
abs(simParticle->pdgId()) == 13) {
333 muonSimHits.insert(muonSimHits.end(), simHitsFromParticle.begin(), simHitsFromParticle.end());
336 int nRPCHitBarrel = 0;
337 int nRPCHitEndcap = 0;
338 for (
const auto &
simHit : simHitsFromParticle) {
344 if (rpcDetId.region() == 0)
351 h_nRPCHitPerSimMuon->Fill(nRPCHit);
352 if (nRPCHitBarrel and nRPCHitEndcap) {
353 h_nRPCHitPerSimMuonOverlap->Fill(nRPCHit);
354 h_simMuonOverlap_pt->Fill(simParticle->pt());
355 h_simMuonOverlap_eta->Fill(simParticle->eta());
356 h_simMuonOverlap_phi->Fill(simParticle->phi());
357 }
else if (nRPCHitBarrel) {
358 h_nRPCHitPerSimMuonBarrel->Fill(nRPCHit);
359 h_simMuonBarrel_pt->Fill(simParticle->pt());
360 h_simMuonBarrel_eta->Fill(simParticle->eta());
361 h_simMuonBarrel_phi->Fill(simParticle->phi());
362 }
else if (nRPCHitEndcap) {
363 h_nRPCHitPerSimMuonEndcap->Fill(nRPCHit);
364 h_simMuonEndcap_pt->Fill(simParticle->pt());
365 h_simMuonEndcap_eta->Fill(simParticle->eta());
366 h_simMuonEndcap_phi->Fill(simParticle->phi());
368 h_simMuonNoRPC_pt->Fill(simParticle->pt());
369 h_simMuonNoRPC_eta->Fill(simParticle->eta());
370 h_simMuonNoRPC_phi->Fill(simParticle->phi());
375 switch (simParticle->pdgId()) {
377 h_simParticleType->Fill(0);
380 h_simParticleType->Fill(1);
383 h_simParticleType->Fill(2);
386 h_simParticleType->Fill(3);
389 h_simParticleType->Fill(4);
392 h_simParticleType->Fill(5);
395 h_simParticleType->Fill(6);
398 h_simParticleType->Fill(7);
401 h_simParticleType->Fill(8);
404 h_simParticleType->Fill(9);
407 h_simParticleType->Fill(10);
414 int nRefHitBarrel = 0, nRefHitEndcap = 0;
415 for (
const auto &
simHit : muonSimHits) {
425 h_.refHitOccupancyBarrel_wheel->Fill(
ring);
426 h_.refHitOccupancyBarrel_station->Fill(
station);
427 h_.refHitOccupancyBarrel_wheel_station->Fill(
ring,
station);
429 h_refOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[
simHit->detUnitId()]);
435 h_refOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[
simHit->detUnitId()]);
439 h_.nRefHitBarrel->Fill(nRefHitBarrel);
440 h_.nRefHitEndcap->Fill(nRefHitEndcap);
443 int sumClusterSizeBarrel = 0, sumClusterSizeEndcap = 0;
444 int nRecHitBarrel = 0, nRecHitEndcap = 0;
445 for (RecHitIter recHitIter = recHitHandle->begin(); recHitIter != recHitHandle->end(); ++recHitIter) {
455 const double time = recHitIter->timeError() >= 0 ? recHitIter->time() : recHitIter->BunchX() * 25;
457 h_.clusterSize->Fill(recHitIter->clusterSize());
461 sumClusterSizeBarrel += recHitIter->clusterSize();
462 h_.clusterSizeBarrel->Fill(recHitIter->clusterSize());
463 h_.recHitOccupancyBarrel_wheel->Fill(
ring);
464 h_.recHitOccupancyBarrel_station->Fill(
station);
465 h_.recHitOccupancyBarrel_wheel_station->Fill(
ring,
station);
467 h_allOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[
detId.rawId()]);
469 h_.timeBarrel->Fill(
time);
472 sumClusterSizeEndcap += recHitIter->clusterSize();
473 h_.clusterSizeEndcap->Fill(recHitIter->clusterSize());
477 h_allOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[
detId.rawId()]);
479 h_.timeEndcap->Fill(
time);
482 if (
roll->isIRPC()) {
483 h_.timeIRPC->Fill(
time);
485 h_.timeCRPC->Fill(
time);
488 const double nRecHit = nRecHitBarrel + nRecHitEndcap;
489 h_.nRecHitBarrel->Fill(nRecHitBarrel);
490 h_.nRecHitEndcap->Fill(nRecHitEndcap);
492 const int sumClusterSize = sumClusterSizeBarrel + sumClusterSizeEndcap;
493 h_.avgClusterSize->Fill(
double(sumClusterSize) / nRecHit);
495 if (nRecHitBarrel > 0) {
496 h_.avgClusterSizeBarrel->Fill(
double(sumClusterSizeBarrel) / nRecHitBarrel);
498 if (nRecHitEndcap > 0) {
499 h_.avgClusterSizeEndcap->Fill(
double(sumClusterSizeEndcap) / nRecHitEndcap);
504 typedef std::map<TrackPSimHitRef, RecHitIter> SimToRecHitMap;
505 SimToRecHitMap simToRecHitMap;
507 for (
const auto &
simHit : muonSimHits) {
510 const double simX =
simHit->localPosition().x();
512 for (RecHitIter recHitIter = recHitHandle->begin(); recHitIter != recHitHandle->end(); ++recHitIter) {
513 const RPCDetId recDetId{recHitIter->rpcId()};
514 const RPCRoll *recRoll = rpcGeom->roll(recDetId);
518 if (simDetId != recDetId)
521 const double recX = recHitIter->localPosition().x();
522 const double newDx = fabs(recX - simX);
525 SimToRecHitMap::const_iterator prevSimToReco = simToRecHitMap.find(
simHit);
526 if (prevSimToReco == simToRecHitMap.end()) {
527 simToRecHitMap.insert(std::make_pair(
simHit, recHitIter));
529 const double oldDx = fabs(prevSimToReco->second->localPosition().x() - simX);
532 simToRecHitMap[
simHit] = recHitIter;
540 int nMatchHitBarrel = 0, nMatchHitEndcap = 0;
541 for (
const auto &match : simToRecHitMap) {
543 RecHitIter recHitIter = match.second;
552 const double simX =
simHit->localPosition().x();
553 const double recX = recHitIter->localPosition().x();
554 const double errX =
sqrt(recHitIter->localPositionError().xx());
555 const double dX = recX - simX;
556 const double pull =
errX == 0 ? -999 :
dX /
errX;
560 h_.resBarrel->Fill(
dX);
561 h_.pullBarrel->Fill(pull);
562 h_.matchOccupancyBarrel_wheel->Fill(
ring);
563 h_.matchOccupancyBarrel_station->Fill(
station);
564 h_.matchOccupancyBarrel_wheel_station->Fill(
ring,
station);
566 h_.res_wheel_res->Fill(
ring,
dX);
568 h_.pull_wheel_pull->Fill(
ring, pull);
569 h_.pull_station_pull->Fill(
station, pull);
571 h_matchOccupancyBarrel_detId->Fill(detIdToIndexMapBarrel_[
detId.rawId()]);
574 h_.resEndcap->Fill(
dX);
575 h_.pullEndcap->Fill(pull);
580 h_.res_ring_res->Fill(
ring,
dX);
582 h_.pull_ring_pull->Fill(
ring, pull);
584 h_matchOccupancyEndcap_detId->Fill(detIdToIndexMapEndcap_[
detId.rawId()]);
587 h_.nMatchHitBarrel->Fill(nMatchHitBarrel);
588 h_.nMatchHitEndcap->Fill(nMatchHitEndcap);
591 for (reco::MuonCollection::const_iterator
muon = muonHandle->begin();
muon != muonHandle->end(); ++
muon) {
592 if (!
muon->isGlobalMuon())
595 int nRPCHitBarrel = 0;
596 int nRPCHitEndcap = 0;
600 if (!(*recHit)->isValid())
602 const DetId detId = (*recHit)->geographicalId();
607 if (rpcDetId.
region() == 0)
613 const int nRPCHit = nRPCHitBarrel + nRPCHitEndcap;
614 h_nRPCHitPerRecoMuon->Fill(nRPCHit);
615 if (nRPCHitBarrel and nRPCHitEndcap) {
616 h_nRPCHitPerRecoMuonOverlap->Fill(nRPCHit);
617 h_recoMuonOverlap_pt->Fill(
muon->pt());
618 h_recoMuonOverlap_eta->Fill(
muon->eta());
619 h_recoMuonOverlap_phi->Fill(
muon->phi());
620 }
else if (nRPCHitBarrel) {
621 h_nRPCHitPerRecoMuonBarrel->Fill(nRPCHit);
622 h_recoMuonBarrel_pt->Fill(
muon->pt());
623 h_recoMuonBarrel_eta->Fill(
muon->eta());
624 h_recoMuonBarrel_phi->Fill(
muon->phi());
625 }
else if (nRPCHitEndcap) {
626 h_nRPCHitPerRecoMuonEndcap->Fill(nRPCHit);
627 h_recoMuonEndcap_pt->Fill(
muon->pt());
628 h_recoMuonEndcap_eta->Fill(
muon->eta());
629 h_recoMuonEndcap_phi->Fill(
muon->phi());
631 h_recoMuonNoRPC_pt->Fill(
muon->pt());
632 h_recoMuonNoRPC_eta->Fill(
muon->eta());
633 h_recoMuonNoRPC_phi->Fill(
muon->phi());
637 h_eventCount->Fill(2);
virtual int nstrips() const =0
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
RPCRecHitValid(const edm::ParameterSet &pset)
virtual void setCurrentFolder(std::string const &fullpath)
static bool simHitTPAssociationListGreater(SimHitTPPair i, SimHitTPPair j)
std::vector< const GeomDet * > DetContainer
C::const_iterator const_iterator
constant access iterator type
virtual float stripLength() const =0
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
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
RPCRecHitValid::MonitorElement * MEP
Abs< T >::type abs(const T &t)
#define DEFINE_FWK_MODULE(type)
Log< level::Info, false > LogInfo
float dX(const MatchPair &match)
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
virtual TH1 * getTH1() const
virtual float pitch() const =0
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
const std::vector< const RPCRoll * > & rolls() const
Return the Rolls.
void analyze(const edm::Event &event, const edm::EventSetup &eventSetup) override