ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MuJetAnalysis/AnalysisTools/MuJetMergingOverlap/src/MuJetMergingOverlap.cc
Revision: 1.1
Committed: Thu Nov 18 19:21:52 2010 UTC (14 years, 5 months ago) by pivarski
Content type: text/plain
Branch: MAIN
CVS Tags: YP_2012-12-04_2011Data, V_2012_01_29_01, JP-2011-02-03, JP-2011-01-16-a, JP-2011-01-15-a, JP-2011-01-11-a, JP-2011-01-10-c, JP-2011-01-10-b, JP-2011-01-10-a, JP-2011-01-04-a, JP-2010-12-20-a, JP-2010-12-15-b, JP-2010-12-15-a, JP-2010-12-11-a, JP-2010-12-09-a, JP-2010-12-08-a, JP-2010-12-06-a, JP-2010-12-05-b, JP-2010-12-05-a, JP-2010-12-01-a, JP-2010-11-30-a, JP-2010-11-29-a, JP-2010-11-25-a, JP-2010-11-22-a, JP-2010-11-20-c, JP-2010-11-20-a, JP-2010-11-19-b, JP-2010-11-19-a, JP-2010-11-18-a, HEAD
Error occurred while calculating annotation data.
Log Message:
add plots to check for overlapping mu-jets in backgrounds

File Contents

# Content
1 // -*- C++ -*-
2 //
3 // Package: MuJetMergingOverlap
4 // Class: MuJetMergingOverlap
5 //
6 /**\class MuJetMergingOverlap MuJetMergingOverlap.cc AnalysisTools/MuJetMergingOverlap/src/MuJetMergingOverlap.cc
7
8 Description: [one line class summary]
9
10 Implementation:
11 [Notes on implementation]
12 */
13 //
14 // Original Author: James Pivarski
15 // Created: Tue Nov 16 17:27:21 CST 2010
16 // $Id$
17 //
18 //
19
20
21 // system include files
22 #include <memory>
23
24 // user include files
25 #include "FWCore/Framework/interface/Frameworkfwd.h"
26 #include "FWCore/Framework/interface/EDAnalyzer.h"
27 #include "FWCore/Framework/interface/Event.h"
28 #include "FWCore/Framework/interface/MakerMacros.h"
29 #include "FWCore/ParameterSet/interface/ParameterSet.h"
30 #include "FWCore/Utilities/interface/InputTag.h"
31
32 #include "AnalysisDataFormats/MuJetAnalysis/interface/MultiMuon.h"
33 #include "CommonTools/UtilAlgos/interface/TFileService.h"
34 #include "DataFormats/MuonReco/interface/Muon.h"
35 #include "DataFormats/PatCandidates/interface/Muon.h"
36 #include "DataFormats/TrackReco/interface/TrackFwd.h"
37 #include "FWCore/ServiceRegistry/interface/Service.h"
38 #include "DataFormats/Candidate/interface/Candidate.h"
39 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
40 #include "TTree.h"
41
42 //
43 // class declaration
44 //
45
46 class MuJetMergingOverlap : public edm::EDAnalyzer {
47 public:
48 explicit MuJetMergingOverlap(const edm::ParameterSet&);
49 ~MuJetMergingOverlap();
50
51
52 private:
53 virtual void beginJob() ;
54 virtual void analyze(const edm::Event&, const edm::EventSetup&);
55 virtual void endJob() ;
56
57 // ----------member data ---------------------------
58 edm::InputTag m_src;
59 bool m_getQscale;
60 bool m_getAlternating;
61
62 TTree *m_ttree;
63 Float_t m_qscale;
64 Int_t m_num_mujets;
65 Int_t m_num1;
66 Int_t m_num2;
67 Float_t m_pt1;
68 Float_t m_pt2;
69 Float_t m_mass1;
70 Float_t m_mass2;
71 Float_t m_drmax1;
72 Float_t m_drmax2;
73 Float_t m_vprob1;
74 Float_t m_vprob2;
75 Float_t m_eta1;
76 Float_t m_eta2;
77 Float_t m_iso1;
78 Float_t m_iso2;
79 Int_t m_pdgid1;
80 Int_t m_pdgid2;
81 Float_t m_dphi;
82 Float_t m_deta;
83 Float_t m_dr;
84 };
85
86 //
87 // constants, enums and typedefs
88 //
89
90 //
91 // static data member definitions
92 //
93
94 //
95 // constructors and destructor
96 //
97 MuJetMergingOverlap::MuJetMergingOverlap(const edm::ParameterSet& iConfig)
98 : m_src(iConfig.getParameter<edm::InputTag>("src"))
99 , m_getQscale(iConfig.getParameter<bool>("getQscale"))
100 , m_getAlternating(iConfig.getParameter<bool>("getAlternating"))
101 {
102 //now do what ever initialization is needed
103 edm::Service<TFileService> tFile;
104 m_ttree = tFile->make<TTree>("ttree", "ttree");
105 m_ttree->Branch("qscale", &m_qscale, "qscale/F");
106 m_ttree->Branch("num_mujets", &m_num_mujets, "num_mujets/I");
107 m_ttree->Branch("num1", &m_num1, "num1/I");
108 m_ttree->Branch("num2", &m_num2, "num2/I");
109 m_ttree->Branch("pt1", &m_pt1, "pt1/F");
110 m_ttree->Branch("pt2", &m_pt2, "pt2/F");
111 m_ttree->Branch("mass1", &m_mass1, "mass1/F");
112 m_ttree->Branch("mass2", &m_mass2, "mass2/F");
113 m_ttree->Branch("drmax1", &m_drmax1, "drmax1/F");
114 m_ttree->Branch("drmax2", &m_drmax2, "drmax2/F");
115 m_ttree->Branch("vprob1", &m_vprob1, "vprob1/F");
116 m_ttree->Branch("vprob2", &m_vprob2, "vprob2/F");
117 m_ttree->Branch("eta1", &m_eta1, "eta1/F");
118 m_ttree->Branch("eta2", &m_eta2, "eta2/F");
119 m_ttree->Branch("iso1", &m_iso1, "iso1/F");
120 m_ttree->Branch("iso2", &m_iso2, "iso2/F");
121 m_ttree->Branch("pdgid1", &m_pdgid1, "pdgid1/I");
122 m_ttree->Branch("pdgid2", &m_pdgid2, "pdgid2/I");
123 m_ttree->Branch("dphi", &m_dphi, "dphi/F");
124 m_ttree->Branch("deta", &m_deta, "deta/F");
125 m_ttree->Branch("dr", &m_dr, "dr/F");
126 }
127
128
129 MuJetMergingOverlap::~MuJetMergingOverlap()
130 {
131
132 // do anything here that needs to be done at desctruction time
133 // (e.g. close files, deallocate resources etc.)
134
135 }
136
137
138 //
139 // member functions
140 //
141
142 // ------------ method called to for each event ------------
143 void
144 MuJetMergingOverlap::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
145 {
146 edm::Handle<pat::MultiMuonCollection> muJets;
147 iEvent.getByLabel(m_src, muJets);
148
149 m_qscale = -1000.;
150 m_num_mujets = -1000;
151 m_num1 = -1000;
152 m_num2 = -1000;
153 m_pt1 = -1000.;
154 m_pt2 = -1000.;
155 m_mass1 = -1000.;
156 m_mass2 = -1000.;
157 m_drmax1 = -1000.;
158 m_drmax2 = -1000.;
159 m_vprob1 = -1000.;
160 m_vprob2 = -1000.;
161 m_eta1 = -1000.;
162 m_eta2 = -1000.;
163 m_iso1 = -1000.;
164 m_iso2 = -1000.;
165 m_pdgid1 = -1000;
166 m_pdgid2 = -1000;
167 m_dphi = -1000.;
168 m_deta = -1000.;
169 m_dr = -1000.;
170
171 m_qscale = 0.;
172 if (m_getQscale) {
173 edm::Handle<GenEventInfoProduct> genEventInfoProduct;
174 iEvent.getByLabel("generator", genEventInfoProduct);
175 m_qscale = genEventInfoProduct->qScale();
176 }
177
178 bool alternating = true;
179 if (m_getAlternating) {
180 edm::Handle<unsigned int> particleNumber;
181 iEvent.getByLabel("generator", "particleNumber", particleNumber);
182 alternating = (*particleNumber == 0);
183 }
184
185 if (!alternating) return;
186
187 pat::MultiMuonCollection::const_iterator muJet1 = muJets->end();
188 pat::MultiMuonCollection::const_iterator muJet2 = muJets->end();
189 for (pat::MultiMuonCollection::const_iterator muJet = muJets->begin(); muJet != muJets->end(); ++muJet) {
190 if (muJet1 == muJets->end() || muJet1->pt() < muJet->pt()) {
191 muJet2 = muJet1;
192 muJet1 = muJet;
193 }
194 else if (muJet2 == muJets->end() || muJet2->pt() < muJet->pt()) {
195 muJet2 = muJet;
196 }
197 }
198
199 m_num_mujets = muJets->size();
200
201 if (muJet1 != muJets->end()) {
202 m_num1 = muJet1->numberOfDaughters();
203 m_pt1 = muJet1->pt();
204 m_mass1 = muJet1->mass();
205 m_drmax1 = muJet1->dRmax();
206 if (muJet1->vertexValid()) m_vprob1 = muJet1->vertexProb();
207 else m_vprob1 = -1.;
208 m_eta1 = muJet1->eta();
209 m_iso1 = muJet1->centralTrackIsolation();
210 if (muJet1->genParticlesSize() == 1) m_pdgid1 = muJet1->genParticle(0)->pdgId();
211 else m_pdgid1 = 0;
212
213 if (muJet2 != muJets->end()) {
214 m_num2 = muJet2->numberOfDaughters();
215 m_pt2 = muJet2->pt();
216 m_mass2 = muJet2->mass();
217 m_drmax2 = muJet2->dRmax();
218 if (muJet2->vertexValid()) m_vprob2 = muJet2->vertexProb();
219 else m_vprob2 = -1.;
220 m_eta2 = muJet2->eta();
221 m_iso2 = muJet2->centralTrackIsolation();
222 if (muJet2->genParticlesSize() == 1) m_pdgid2 = muJet2->genParticle(0)->pdgId();
223 else m_pdgid2 = 0;
224
225 m_dphi = muJet1->phi() - muJet2->phi();
226 while (m_dphi > M_PI) m_dphi -= 2.*M_PI;
227 while (m_dphi < -M_PI) m_dphi += 2.*M_PI;
228 m_deta = muJet1->eta() - muJet2->eta();
229 m_dr = sqrt(m_dphi*m_dphi + m_deta*m_deta);
230 }
231 }
232
233 m_ttree->Fill();
234 }
235
236
237 // ------------ method called once each job just before starting event loop ------------
238 void
239 MuJetMergingOverlap::beginJob()
240 {
241 }
242
243 // ------------ method called once each job just after ending the event loop ------------
244 void
245 MuJetMergingOverlap::endJob() {
246 }
247
248 //define this as a plug-in
249 DEFINE_FWK_MODULE(MuJetMergingOverlap);