CMS 3D CMS Logo

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