CMS 3D CMS Logo

RPCRecHitProbability.cc
Go to the documentation of this file.
1 #include <sstream>
2 #include <TMath.h>
4 //Geometry
7 //Tracking Tools
9 //FW Core
11 //Reco Muon
13 
15  saveRootFile = pset.getUntrackedParameter<bool>("SaveRootFile", false);
16  RootFileName = pset.getUntrackedParameter<std::string>("RootFileName", "RPCRecHitProbabilityDQM.root");
17 
18  muonLabel_ = consumes<reco::CandidateView>(pset.getParameter<edm::InputTag>("MuonLabel"));
19  muPtCut_ = pset.getUntrackedParameter<double>("MuonPtCut", 3.0);
20  muEtaCut_ = pset.getUntrackedParameter<double>("MuonEtaCut", 1.9);
21  scalersRawToDigiLabel_ = consumes<DcsStatusCollection>(pset.getParameter<edm::InputTag>("ScalersRawToDigiLabel"));
22 
23  subsystemFolder_ = pset.getUntrackedParameter<std::string>("RPCFolder", "RPC");
24  globalFolder_ = pset.getUntrackedParameter<std::string>("GlobalFolder", "SummaryHistograms");
25  muonFolder_ = pset.getUntrackedParameter<std::string>("MuonFolder", "Muon");
26 }
27 
29 
31  edm::Run const& r,
32  edm::EventSetup const& iSetup) {
33  edm::LogInfo("rpcrechitprobability") << "[RPCRecHitProbability]: Begin Run ";
34 
35  std::string currentFolder = subsystemFolder_ + "/" + muonFolder_ + "/" + globalFolder_;
36  ibooker.setCurrentFolder(currentFolder);
37 
38  int ptBins = 100 - (int)muPtCut_;
39 
40  //General part
41  NumberOfMuonEta_ = ibooker.book1D("NumberOfMuonEta", "Muons vs Eta", 20 * muEtaCut_, -muEtaCut_, muEtaCut_);
42  NumberOfMuonPt_B_ = ibooker.book1D("NumberOfMuonPt_Barrel", "Muons vs Pt - Barrel", ptBins, muPtCut_, 100);
43  NumberOfMuonPt_EP_ = ibooker.book1D("NumberOfMuonPt_EndcapP", "Muons vs Pt - Endcap+", ptBins, muPtCut_, 100);
44  NumberOfMuonPt_EM_ = ibooker.book1D("NumberOfMuonPt_EndcapM", "Muons vs Pt - Endcap-", ptBins, muPtCut_, 100);
46  ibooker.book1D("NumberOfMuonPhi_Barrel", "Muons vs Phi - Barrel", 144, -TMath::Pi(), TMath::Pi());
48  ibooker.book1D("NumberOfMuonPhi_EndcapP", "Muons vs Phi - Endcap+", 144, -TMath::Pi(), TMath::Pi());
50  ibooker.book1D("NumberOfMuonPhi_EndcapM", "Muons vs Phi - Endcap-", 144, -TMath::Pi(), TMath::Pi());
51 
52  //RPC part
53  RPCRecHitMuonEta_ = ibooker.book2D(
54  "RPCRecHitMuonEta", "Number Of RecHits per Muons vs Eta", 20 * muEtaCut_, -muEtaCut_, muEtaCut_, 7, 0.5, 7.5);
55 
56  std::stringstream name, title;
57  for (int i = 0; i < 6; i++) {
58  name.str("");
59  title.str("");
60  name << (i + 1) << "RecHitMuonEta";
61  title << "At least " << (i + 1) << " Cluster vs Eta";
62  recHitEta_[i] = ibooker.book1D(name.str(), title.str(), 20 * muEtaCut_, -muEtaCut_, muEtaCut_);
63 
64  name.str("");
65  title.str("");
66  name << (i + 1) << "RecHitMuonPhiB";
67  title << "At least " << (i + 1) << " Cluster vs Phi-Barrel";
68  recHitPhi_B_[i] = ibooker.book1D(name.str(), title.str(), 144, -TMath::Pi(), TMath::Pi());
69 
70  name.str("");
71  title.str("");
72  name << (i + 1) << "RecHitMuonPtB";
73  title << "At least " << (i + 1) << " Cluster vs Pt-Barrel";
74  recHitPt_B_[i] = ibooker.book1D(name.str(), title.str(), ptBins, muPtCut_, 100);
75 
76  name.str("");
77  title.str("");
78  name << (i + 1) << "RecHitMuonPhiEP";
79  title << "At least " << (i + 1) << " Cluster vs Phi-Endcap+";
80  recHitPhi_EP_[i] = ibooker.book1D(name.str(), title.str(), 144, -TMath::Pi(), TMath::Pi());
81 
82  name.str("");
83  title.str("");
84  name << (i + 1) << "RecHitMuonPtEP";
85  title << "At least " << (i + 1) << " Cluster vs Pt-Endcap+";
86  recHitPt_EP_[i] = ibooker.book1D(name.str(), title.str(), ptBins, muPtCut_, 100);
87 
88  name.str("");
89  title.str("");
90  name << (i + 1) << "RecHitMuonPhiEM";
91  title << "At least " << (i + 1) << " Cluster vs Phi-Endcap-";
92  recHitPhi_EM_[i] = ibooker.book1D(name.str(), title.str(), 144, -TMath::Pi(), TMath::Pi());
93 
94  name.str("");
95  title.str("");
96  name << (i + 1) << "RecHitMuonPtEM";
97  title << "At least " << (i + 1) << " Cluster vs Pt-Endcap-";
98  recHitPt_EM_[i] = ibooker.book1D(name.str(), title.str(), ptBins, muPtCut_, 100);
99  }
100 
101  dcs_ = true;
102 }
103 
105  dcs_ = true;
106  //Check HV status
107  this->makeDcsInfo(event);
108  if (!dcs_) {
109  edm::LogWarning("rpcrechitprobability") << "[RPCRecHitProbability]: DCS bit OFF";
110  return; //if RPC not ON there's no need to continue
111  }
112 
113  counter++;
114  edm::LogInfo("rpcrechitprobability") << "[RPCRecHitProbability]: Beginning analyzing event " << counter;
115 
116  //Muons
118  event.getByToken(muonLabel_, muonCands);
119  std::map<RPCDetId, std::vector<RPCRecHit> > rechitMuon;
120 
121  if (muonCands.isValid()) {
122  int nStaMuons = muonCands->size();
123 
124  for (int i = 0; i < nStaMuons; i++) {
125  const reco::Candidate& goodMuon = (*muonCands)[i];
126  const reco::Muon* muCand = dynamic_cast<const reco::Muon*>(&goodMuon);
127 
128  if (!muCand->isGlobalMuon())
129  continue;
130  float eta = muCand->eta();
131  float pt = muCand->pt();
132  if (pt < muPtCut_ || fabs(eta) > muEtaCut_)
133  continue;
134 
135  float phi = muCand->phi();
136 
137  NumberOfMuonEta_->Fill(eta);
138 
139  if (eta > 0.8) {
142  } else if (eta < -0.8) {
145  } else {
146  NumberOfMuonPt_B_->Fill(pt);
147  NumberOfMuonPhi_B_->Fill(phi);
148  }
149 
150  reco::Track muTrack = (*(muCand->outerTrack()));
151  std::vector<TrackingRecHitRef> rpcTrackRecHits;
152 
153  //loop on mu rechits
154 
155  int recHitCounter = 0;
156  for (trackingRecHit_iterator it = muTrack.recHitsBegin(); it != muTrack.recHitsEnd(); it++) {
157  if (!(*it)->isValid())
158  continue;
159  int muSubDetId = (*it)->geographicalId().subdetId();
160  if (muSubDetId == MuonSubdetId::RPC) {
161  recHitCounter++;
162  }
163  } // end loop on mu rechits
164 
165  RPCRecHitMuonEta_->Fill(eta, recHitCounter);
166 
167  int j = 0;
168  while (recHitCounter >= j + 1 && j < 6) {
169  if (recHitEta_[j])
170  recHitEta_[j]->Fill(eta);
171  if (eta > 0.8) {
172  recHitPt_EP_[j]->Fill(pt);
173  recHitPhi_EP_[j]->Fill(phi);
174  } else if (eta < -0.8) {
175  recHitPt_EM_[j]->Fill(pt);
176  recHitPhi_EM_[j]->Fill(phi);
177  } else {
178  recHitPt_B_[j]->Fill(pt);
179  recHitPhi_B_[j]->Fill(phi);
180  }
181 
182  j++;
183  }
184  }
185  } else {
186  edm::LogError("rpcrechitprobability") << "[RPCRecHitProbability]: Muons - Product not valid for event" << counter;
187  }
188 }
189 
192 
193  if (!e.getByToken(scalersRawToDigiLabel_, dcsStatus)) {
194  dcs_ = true;
195  return;
196  }
197 
198  if (!dcsStatus.isValid()) {
199  edm::LogWarning("RPCDcsInfo") << "scalersRawToDigi not found";
200  dcs_ = true; // info not available: set to true
201  return;
202  }
203 
204  for (DcsStatusCollection::const_iterator dcsStatusItr = dcsStatus->begin(); dcsStatusItr != dcsStatus->end();
205  ++dcsStatusItr) {
206  if (!dcsStatusItr->ready(DcsStatus::RPC))
207  dcs_ = false;
208  }
209 
210  return;
211 }
MonitorElement * RPCRecHitMuonEta_
const double Pi
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
MonitorElement * NumberOfMuonPhi_EM_
double eta() const final
momentum pseudorapidity
MonitorElement * NumberOfMuonPt_EP_
MonitorElement * NumberOfMuonEta_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
MonitorElement * recHitEta_[6]
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
MonitorElement * NumberOfMuonPt_B_
MonitorElement * NumberOfMuonPt_EM_
size_type size() const
double pt() const final
transverse momentum
MonitorElement * recHitPt_B_[6]
edm::EDGetTokenT< DcsStatusCollection > scalersRawToDigiLabel_
edm::EDGetTokenT< reco::CandidateView > muonLabel_
MonitorElement * recHitPhi_B_[6]
void analyze(const edm::Event &, const edm::EventSetup &) override
MonitorElement * recHitPhi_EP_[6]
void Fill(long long x)
MonitorElement * recHitPt_EM_[6]
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * NumberOfMuonPhi_EP_
bool isGlobalMuon() const override
Definition: Muon.h:298
void makeDcsInfo(const edm::Event &)
MonitorElement * NumberOfMuonPhi_B_
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:88
RPCRecHitProbability(const edm::ParameterSet &)
bool isValid() const
Definition: HandleBase.h:70
virtual TrackRef outerTrack() const
reference to Track reconstructed in the muon detector only
Definition: Muon.h:48
MonitorElement * recHitPt_EP_[6]
static constexpr int RPC
Definition: MuonSubdetId.h:13
MonitorElement * recHitPhi_EM_[6]
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Definition: DQMStore.cc:266
double phi() const final
momentum azimuthal angle
Definition: event.py:1
Definition: Run.h:45
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:91