CMS 3D CMS Logo

GlbMuQualityCutsAnalysis.cc
Go to the documentation of this file.
5 #include <iostream>
6 #include "TH1.h"
7 
9 public:
11  void analyze(const edm::Event&, const edm::EventSetup&) override;
12  // virtual void endJob();
13 private:
16  std::vector<unsigned int> matched_, unMatched_;
18  int nHitCut_;
20 };
21 
29 using namespace std;
30 using namespace reco;
31 using namespace edm;
34 
36  : src_(cfg.getParameter<InputTag>("src")),
38  ptMin_(cfg.getUntrackedParameter<double>("ptMin")),
39  massMin_(cfg.getUntrackedParameter<double>("massMin")),
40  massMax_(cfg.getUntrackedParameter<double>("massMax")),
41  etaMin_(cfg.getUntrackedParameter<double>("etaMin")),
42  etaMax_(cfg.getUntrackedParameter<double>("etaMax")),
43  trkIso_(cfg.getUntrackedParameter<double>("trkIso")),
44  chi2Cut_(cfg.getUntrackedParameter<double>("chi2Cut")),
45  nHitCut_(cfg.getUntrackedParameter<int>("nHitCut")) {
47  TFileDirectory trackEffDir = fs->mkdir("QualityOfGlbMu");
48  h_GlbMuNofHitsGlbMu_ = trackEffDir.make<TH1D>("# of Hits of GlobalMuon", "# of Hits of GlobalMuon", 100, 0, 100);
49  h_TrkMuNofHitsGlbMu_ = trackEffDir.make<TH1D>("# of Hits of TrackerMuon", "# of Hits of TrackerMuon", 100, 0, 100);
50  h_GlbMuChi2_ = trackEffDir.make<TH1D>("chi2 of GlobalMuon", "chi2 of GlobalMuon", 100, 0, 10);
51  h_GlbMuDxy_ = trackEffDir.make<TH1D>("Dxy of GlobalMuon", "Dxy of GlobalMuon", 1000, -5., 5.);
52 }
53 
54 /*void GlbMuQualityCutsAnalysis::endJob() {
55  cout << src_.encode() << endl ;
56 
57 }
58 */
61  evt.getByToken(srcToken_, src);
62  int j = 0;
63  cout << ">> entries in " << src_ << ": " << src->size() << endl;
64  for (CandidateView::const_iterator i = src->begin(); i != src->end(); ++i) {
65  j++;
66  const Candidate* dau1 = i->daughter(0);
67  const Candidate* dau2 = i->daughter(1);
68  if (dau1 == nullptr || dau2 == nullptr)
69  throw Exception(errors::InvalidReference) << "one of the two daughter does not exist\n";
70  const Candidate* c1 = dau1->masterClone().get();
71  GenParticleRef mc1;
72  const pat::Muon* mu1 = dynamic_cast<const pat::Muon*>(c1);
73  std::cout << " dimuon mass " << i->mass() << std::endl;
74  std::cout << "dau1.pt() " << dau1->pt() << std::endl;
75  std::cout << "dau2.pt() " << dau2->pt() << std::endl;
76  std::cout << "dau1.isGlobalMuon() " << dau1->isGlobalMuon() << std::endl;
77  std::cout << "dau2.isGlobalMuon() " << dau2->isGlobalMuon() << std::endl;
78  std::cout << "dau1.isTrackerMuon() " << dau1->isTrackerMuon() << std::endl;
79  std::cout << "dau2.isTrackerlMuon() " << dau2->isTrackerMuon() << std::endl;
80  std::cout << "dau1.isStandAloneMuon() " << dau1->isStandAloneMuon() << std::endl;
81  std::cout << "dau2.isStandAloneMuon() " << dau2->isStandAloneMuon() << std::endl;
82  std::cout << "dau1.charge() " << dau1->charge() << std::endl;
83  std::cout << "dau2.charge() " << dau2->charge() << std::endl;
84  if (mu1 != nullptr) {
85  // if (mc1.isNonnull()) cout << "GlbMuQualityCutsAnalysis> genParticleRef1 " << mc1->pdgId() << endl;
86  // double trackIso1=mu1->trackIso();
87  // std::cout << " mu1 iso" << trackIso1 << std::endl;
88  } else {
89  const pat::GenericParticle* gp1 = dynamic_cast<const pat::GenericParticle*>(c1);
90  if (gp1 == nullptr)
92  << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n";
93  }
94  const Candidate* c2 = dau2->masterClone().get();
95 
96  const pat::Muon* mu2 = dynamic_cast<const pat::Muon*>(c2);
97  if (mu2 != nullptr) {
98  // double trackIso2=mu2->trackIso();
99  //std::cout << " mu2 iso" << trackIso2 << std::endl;
100  } else {
101  const pat::GenericParticle* gp2 = dynamic_cast<const pat::GenericParticle*>(c2);
102  if (gp2 == nullptr)
104  << "first of two daughter is neither a pat::Muon not pat::GenericParticle\n";
105  }
106 
107  int nOfHit_1 = 0, nOfHit_tk_1 = 0, nOfHit_2 = 0, nOfHit_tk_2 = 0;
108  if (mu1->isGlobalMuon())
109  nOfHit_1 = mu1->numberOfValidHits();
110  std::cout << "n of hit of GlbMu1: " << nOfHit_1 << std::endl;
111  if (mu1->isTrackerMuon())
112  nOfHit_tk_1 = mu1->innerTrack()->numberOfValidHits();
113  std::cout << "n of hit of TrkMu1: " << nOfHit_tk_1 << std::endl;
114  if (mu2->isGlobalMuon())
115  nOfHit_2 = mu2->numberOfValidHits();
116  std::cout << "n of hit of GlbMu2: " << nOfHit_2 << std::endl;
117  if (mu2->isTrackerMuon())
118  nOfHit_tk_2 = mu2->innerTrack()->numberOfValidHits();
119  std::cout << "n of hit of TrkMu2: " << nOfHit_tk_2 << std::endl;
120  h_GlbMuNofHitsGlbMu_->Fill(nOfHit_1);
121  h_GlbMuNofHitsGlbMu_->Fill(nOfHit_2);
122  h_TrkMuNofHitsGlbMu_->Fill(nOfHit_tk_1);
123  h_TrkMuNofHitsGlbMu_->Fill(nOfHit_tk_2);
124  double nChi2_1 = 0, nChi2_2 = 0;
125  if (mu1->isGlobalMuon())
126  nChi2_1 = mu1->normChi2();
127  std::cout << "chi2 of GlbMu1: " << nChi2_1 << std::endl;
128  if (mu2->isGlobalMuon())
129  nChi2_2 = mu2->normChi2();
130  std::cout << "chi2 of GlbMu2: " << nChi2_2 << std::endl;
131  h_GlbMuChi2_->Fill(nChi2_1);
132  h_GlbMuChi2_->Fill(nChi2_2);
133  double dxy_1 = mu1->dB();
134  double dxy_2 = mu2->dB();
135 
136  h_GlbMuDxy_->Fill(dxy_1);
137  h_GlbMuDxy_->Fill(dxy_2);
138  if (mu1->isGlobalMuon() && (nOfHit_tk_1 < nHitCut_)) {
139  std::cout << "found a GlbMuon with nOfHit " << nOfHit_tk_1 << ", it has eta: " << mu1->eta() << std::endl;
140  }
141  if (mu2->isGlobalMuon() && (nOfHit_tk_2 < nHitCut_)) {
142  std::cout << "found a GlbMuon with nOfHit " << nOfHit_tk_2 << ", it has eta: " << mu2->eta() << std::endl;
143  }
144  if (mu1->isGlobalMuon() && (nChi2_1 > chi2Cut_)) {
145  std::cout << "found a GlbMuon with chi2 " << nChi2_1
146  << ", it has chi2 of track: " << mu1->innerTrack()->normalizedChi2()
147  << ", and chi2 of Sta: " << mu1->outerTrack()->normalizedChi2() << ", eta: " << mu1->eta()
148  << ",pt: " << mu1->pt() << std::endl;
149  }
150  if (mu2->isGlobalMuon() && (nChi2_2 > chi2Cut_)) {
151  std::cout << "found a GlbMuon with chi2 " << nChi2_2
152  << ", it has chi2 of track: " << mu2->innerTrack()->normalizedChi2()
153  << ", and chi2 of Sta: " << mu2->outerTrack()->normalizedChi2() << ", eta: " << mu2->eta()
154  << ",pt: " << mu2->pt() << std::endl;
155  }
156  }
157 }
158 
160 
value_type const * get() const
Definition: RefToBase.h:209
edm::EDGetTokenT< reco::CandidateView > srcToken_
double eta() const final
momentum pseudorapidity
std::vector< unsigned int > matched_
virtual bool isStandAloneMuon() const =0
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void analyze(const edm::Event &, const edm::EventSetup &) override
double dB(IPTYPE type) const
size_type size() const
double pt() const final
transverse momentum
GlbMuQualityCutsAnalysis(const edm::ParameterSet &cfg)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
bool isTrackerMuon() const override
Definition: Muon.h:299
virtual bool isTrackerMuon() const =0
Analysis-level Generic Particle class (e.g. for hadron or muon not fully reconstructed) ...
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
reco::TrackRef innerTrack() const override
reference to Track reconstructed in the tracker only (reimplemented from reco::Muon) ...
Definition: Muon.h:72
const_iterator begin() const
reco::TrackRef outerTrack() const override
reference to Track reconstructed in the muon detector only (reimplemented from reco::Muon) ...
Definition: Muon.h:76
bool isGlobalMuon() const override
Definition: Muon.h:298
std::vector< unsigned int > unMatched_
T * make(const Args &...args) const
make new ROOT object
virtual const CandidateBaseRef & masterClone() const =0
virtual bool isGlobalMuon() const =0
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
Definition: TFileService.h:69
virtual double pt() const =0
transverse momentum
virtual int charge() const =0
electric charge
fixed size matrix
HLT enums.
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
const_iterator end() const
unsigned int numberOfValidHits() const
numberOfValidHits returns the number of valid hits on the global track.
double normChi2() const
Norm chi2 gives the normalized chi2 of the global track.
Analysis-level muon class.
Definition: Muon.h:51