ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/csander/HEPTutorial/MyAnalysis.C
Revision: 1.24
Committed: Fri Jul 6 08:19:52 2012 UTC (12 years, 9 months ago) by csander
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.23: +146 -23 lines
Log Message:
v1.0, including a small ntupler for further skimming

File Contents

# User Rev Content
1 csander 1.1 #define MyAnalysis_cxx
2     // The class definition in MyAnalysis.h has been generated automatically
3     // by the ROOT utility TTree::MakeSelector(). This class is derived
4     // from the ROOT class TSelector. For more information on the TSelector
5     // framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.
6    
7     // The following methods are defined in this file:
8     // Begin(): called every time a loop on the tree starts,
9     // a convenient place to create your histograms.
10     // SlaveBegin(): called after Begin(), when on PROOF called only on the
11     // slave servers.
12     // Process(): called for each event, in this function you decide what
13     // to read and fill your histograms.
14     // SlaveTerminate: called at the end of the loop on the tree, when on PROOF
15     // called only on the slave servers.
16     // Terminate(): called at the end of the loop on the tree,
17     // a convenient place to draw/fit your histograms.
18     //
19     // To use this file, try the following session on your Tree T:
20     //
21     // Root > T->Process("MyAnalysis.C")
22     // Root > T->Process("MyAnalysis.C","some options")
23     // Root > T->Process("MyAnalysis.C+")
24     //
25    
26     #include "MyAnalysis.h"
27 csander 1.3 #include <iostream>
28 csander 1.2 #include <TH1F.h>
29 csander 1.9 #include <TLatex.h>
30 csander 1.1
31 csander 1.3 using namespace std;
32    
33     void MyAnalysis::BuildEvent() {
34 csander 1.21
35 csander 1.23 MHT.SetXYZM(0., 0., 0., 0.);
36     HT = 0;
37     Jet_Mult = 0;
38     BJet_Mult = 0;
39     IsoEle_Mult = 0;
40     IsoMu_Mult = 0;
41 csander 1.24 IsoPho_Mult = 0;
42 csander 1.23 DeltaPhiJet1MHT = 0;
43     DeltaPhiJet2MHT = 0;
44     DeltaPhiJet3MHT = 0;
45     hasBadJet = false;
46     deltaPhiCut = false;
47    
48 csander 1.19 Jets.clear();
49     for (int i = 0; i < NJet; ++i) {
50     MyJet jet(Jet_Px[i], Jet_Py[i], Jet_Pz[i], Jet_E[i]);
51     jet.SetBTagDiscriminator(Jet_btag[i]);
52     jet.SetJetID(Jet_ID[i]);
53 csander 1.20 jet.SetMatchedGenJet(Jet_Px_gen[i], Jet_Py_gen[i], Jet_Pz_gen[i], Jet_E_gen[i]);
54 csander 1.19 jet.SetFlavor(Jet_Flavor_gen[i]);
55     Jets.push_back(jet);
56 csander 1.23 if (!(jet.GetJetID()) && jet.Pt() > 30)
57     hasBadJet = true;
58     if (jet.Pt() > 30)
59     MHT -= jet;
60     if (jet.Pt() > 50 && fabs(jet.Eta()) < 2.5) {
61     HT += jet.Pt();
62     ++Jet_Mult;
63     }
64 csander 1.24 //// Apply b-Tag MC/Data reweighting
65 csander 1.19 }
66     Muons.clear();
67     for (int i = 0; i < NMuon; ++i) {
68     MyMuon muon(Muon_Px[i], Muon_Py[i], Muon_Pz[i], Muon_E[i]);
69     muon.SetIsolation(Muon_Iso[i]);
70     muon.SetCharge(Muon_Charge[i]);
71     muon.SetChargeGen(Muon_Charge_gen[i]);
72 csander 1.20 muon.SetMatchedGenMuon(Muon_Px_gen[i], Muon_Py_gen[i], Muon_Pz_gen[i], Muon_E_gen[i]);
73 csander 1.19 Muons.push_back(muon);
74 csander 1.23 if (muon.Pt() > 10 && muon.IsIsolated() && fabs(muon.Eta()) < 2.4)
75     ++IsoMu_Mult;
76 csander 1.24 bool isNoJet = true;
77     if (muon.Pt() > 30) {
78     //// Cross cleaning from jets
79     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
80     if (it->DeltaR(muon) < 0.5)
81     isNoJet = false;
82     }
83     if (isNoJet)
84     MHT -= muon;
85     }
86     if (muon.Pt() > 50 && fabs(muon.Eta()) < 2.5) {
87     if (isNoJet)
88     HT += muon.Pt();
89     }
90 csander 1.19 }
91     Electrons.clear();
92     for (int i = 0; i < NElectron; ++i) {
93 csander 1.20 MyElectron electron(Electron_Px[i], Electron_Py[i], Electron_Pz[i], Electron_E[i]);
94 csander 1.19 electron.SetIsolation(Electron_Iso[i]);
95     electron.SetCharge(Electron_Charge[i]);
96     electron.SetChargeGen(Electron_Charge_gen[i]);
97 csander 1.20 electron.SetMatchedGenElectron(Electron_Px_gen[i], Electron_Py_gen[i], Electron_Pz_gen[i], Electron_E_gen[i]);
98 csander 1.19 Electrons.push_back(electron);
99 csander 1.23 if (electron.Pt() > 10 && electron.IsIsolated() && fabs(electron.Eta()) < 2.5 && !(fabs(electron.Eta()) < 1.566 && fabs(electron.Eta()) > 1.444))
100     ++IsoEle_Mult;
101 csander 1.24 bool isNoJet = true;
102     if (electron.Pt() > 30) {
103     //// Cross cleaning from jets
104     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
105     if (it->DeltaR(electron) < 0.5)
106     isNoJet = false;
107     }
108     if (isNoJet)
109     MHT -= electron;
110     }
111     if (electron.Pt() > 50 && fabs(electron.Eta()) < 2.5) {
112     if (isNoJet)
113     HT += electron.Pt();
114     }
115 csander 1.19 }
116     Photons.clear();
117     for (int i = 0; i < NPhoton; ++i) {
118     MyPhoton photon(Photon_Px[i], Photon_Py[i], Photon_Pz[i], Photon_E[i]);
119     photon.SetIsolation(Photon_Iso[i]);
120 csander 1.20 photon.SetMatchedGenPhoton(Photon_Px_gen[i], Photon_Py_gen[i], Photon_Pz_gen[i], Photon_E_gen[i]);
121 csander 1.19 Photons.push_back(photon);
122 csander 1.24 if (photon.IsIsolated())
123     ++IsoPho_Mult;
124     bool isNoJet = true;
125     bool isNoElectron = true;
126     if (photon.Pt() > 30) {
127     //// Cross cleaning from jets
128     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
129     if (it->DeltaR(photon) < 0.5)
130     isNoJet = false;
131     }
132     //// Cross cleaning from electrons
133     for (vector<MyElectron>::iterator it = Electrons.begin(); it != Electrons.end(); ++it) {
134     if (it->DeltaR(photon) < 0.1)
135     isNoElectron = false;
136     }
137     if (isNoJet && isNoElectron)
138     MHT -= photon;
139     }
140     if (photon.Pt() > 50 && fabs(photon.Eta()) < 2.5) {
141     if (isNoJet && isNoElectron)
142     HT += photon.Pt();
143     }
144 csander 1.19 }
145     Taus.clear();
146     for (int i = 0; i < NTau; ++i) {
147     MyTau tau(Tau_Px[i], Tau_Py[i], Tau_Pz[i], Tau_E[i]);
148 csander 1.21 tau.SetTauID(Tau_ID[i]);
149 csander 1.20 tau.SetMatchedGenJet(Tau_Px_gen[i], Tau_Py_gen[i], Tau_Pz_gen[i], Tau_E_gen[i]);
150 csander 1.19 Taus.push_back(tau);
151     }
152 csander 1.22 Partons.clear();
153     for (int i = 0; i < NParton; ++i) {
154     MyParton parton(Parton_Px[i], Parton_Py[i], Parton_Pz[i], Parton_E[i]);
155     parton.SetPid(Parton_Pid[i]);
156     parton.SetNo(Parton_No[i]);
157     Partons.push_back(parton);
158     }
159 csander 1.19 met.SetXYZM(MET_px, MET_py, 0., 0.);
160     genmet.SetXYZM(MET_px_gen, MET_py_gen, 0., 0.);
161    
162     EventWeight *= weight_factor;
163 csander 1.9
164 csander 1.23 int N_Jet = 0;
165     deltaPhiCut = false;
166     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
167     ++N_Jet;
168     if (N_Jet == 1) {
169     DeltaPhiJet1MHT = MHT.DeltaPhi(*it);
170     if (fabs(DeltaPhiJet1MHT) < 0.5)
171     deltaPhiCut = true;
172     } else if (N_Jet == 2) {
173     DeltaPhiJet2MHT = MHT.DeltaPhi(*it);
174     if (fabs(DeltaPhiJet2MHT) < 0.5)
175     deltaPhiCut = true;
176     } else if (N_Jet == 3) {
177     DeltaPhiJet3MHT = MHT.DeltaPhi(*it);
178     if (fabs(DeltaPhiJet3MHT) < 0.3)
179     deltaPhiCut = true;
180     }
181     }
182    
183 csander 1.24 mTele = 0;
184     if (NElectron > 0) {
185     mTele = sqrt(2 * met.Et() * Electrons.at(0).Et() * (1 - cos(met.DeltaPhi(Electrons.at(0)))));
186     };
187    
188     mTmu = 0;
189     if (NMuon > 0) {
190     mTmu = sqrt(2 * met.Et() * Muons.at(0).Et() * (1 - cos(met.DeltaPhi(Muons.at(0)))));
191     };
192    
193     MHTf = MHT.Pt();
194     HTf = HT;
195    
196 csander 1.3 }
197    
198 csander 1.2 void MyAnalysis::Begin(TTree * /*tree*/) {
199 csander 1.19 // The Begin() function is called at the start of the query.
200     // When running with PROOF Begin() is only called on the client.
201     // The tree argument is deprecated (on PROOF 0 is passed).
202 csander 1.1
203 csander 1.19 TString option = GetOption();
204 csander 1.1
205     }
206    
207 csander 1.2 void MyAnalysis::SlaveBegin(TTree * /*tree*/) {
208 csander 1.19 // The SlaveBegin() function is called after the Begin() function.
209     // When running with PROOF SlaveBegin() is called on each slave server.
210     // The tree argument is deprecated (on PROOF 0 is passed).
211    
212     TString option = GetOption();
213    
214     h_Mmumu = new TH1F("Mmumu", "Invariant di-muon mass", 100, 0, 1000);
215 csander 1.22 h_Mmumu->SetXTitle("m_{#mu#mu} [GeV]");
216 csander 1.19 h_Mmumu->Sumw2();
217 csander 1.22 histograms.push_back(h_Mmumu);
218 csander 1.19
219     h_NJet = new TH1F("NJet", "Number of jets", 20, 0, 20);
220 csander 1.22 h_NJet->SetXTitle("N_{Jets}");
221 csander 1.19 h_NJet->Sumw2();
222 csander 1.22 histograms.push_back(h_NJet);
223 csander 1.19
224     h_NBJet = new TH1F("NBJet", "Number of b-jets", 5, 0, 5);
225 csander 1.22 h_NBJet->SetXTitle("N_{b-Jets}");
226 csander 1.19 h_NBJet->Sumw2();
227 csander 1.22 histograms.push_back(h_NBJet);
228 csander 1.19
229 csander 1.23 h_Jet1_Pt = new TH1F("Jet1Pt", "Pt of jet1", 50, 0, 2000);
230 csander 1.22 h_Jet1_Pt->SetXTitle("p_{T,jet1} [GeV]");
231 csander 1.19 h_Jet1_Pt->Sumw2();
232 csander 1.22 histograms.push_back(h_Jet1_Pt);
233 csander 1.19
234 csander 1.23 h_Jet2_Pt = new TH1F("Jet2Pt", "Pt of jet2", 50, 0, 2000);
235 csander 1.22 h_Jet2_Pt->SetXTitle("p_{T,jet2} [GeV]");
236 csander 1.19 h_Jet2_Pt->Sumw2();
237 csander 1.22 histograms.push_back(h_Jet2_Pt);
238 csander 1.19
239 csander 1.20 h_Jet3_Pt = new TH1F("Jet3Pt", "Pt of jet3", 50, 0, 1000);
240 csander 1.22 h_Jet3_Pt->SetXTitle("p_{T,jet3} [GeV]");
241 csander 1.19 h_Jet3_Pt->Sumw2();
242 csander 1.22 histograms.push_back(h_Jet3_Pt);
243 csander 1.19
244     h_Jet1_Eta = new TH1F("Jet1Eta", "#eta of jet1", 50, -5, 5);
245 csander 1.22 h_Jet1_Eta->SetXTitle("#eta_{jet1}");
246 csander 1.19 h_Jet1_Eta->Sumw2();
247 csander 1.22 histograms.push_back(h_Jet1_Eta);
248 csander 1.19
249     h_Jet2_Eta = new TH1F("Jet2Eta", "#eta of jet2", 50, -5, 5);
250 csander 1.22 h_Jet2_Eta->SetXTitle("#eta_{jet2}");
251 csander 1.19 h_Jet2_Eta->Sumw2();
252 csander 1.22 histograms.push_back(h_Jet2_Eta);
253 csander 1.19
254     h_Jet3_Eta = new TH1F("Jet3Eta", "#eta of jet3", 50, -5, 5);
255 csander 1.22 h_Jet3_Eta->SetXTitle("#eta_{jet3}");
256 csander 1.19 h_Jet3_Eta->Sumw2();
257 csander 1.22 histograms.push_back(h_Jet3_Eta);
258 csander 1.19
259 csander 1.20 h_BJet1_Pt = new TH1F("BJet1Pt", "Pt of b-jet1", 50, 0, 1000);
260 csander 1.22 h_BJet1_Pt->SetXTitle("p_{T,b-jet1} [GeV]");
261 csander 1.19 h_BJet1_Pt->Sumw2();
262 csander 1.22 histograms.push_back(h_BJet1_Pt);
263 csander 1.19
264 csander 1.20 h_BJet2_Pt = new TH1F("BJet2Pt", "Pt of b-jet2", 50, 0, 1000);
265 csander 1.22 h_BJet2_Pt->SetXTitle("p_{T,b-jet2} [GeV]");
266 csander 1.19 h_BJet2_Pt->Sumw2();
267 csander 1.22 histograms.push_back(h_BJet2_Pt);
268 csander 1.19
269 csander 1.20 h_BJet1_Eta = new TH1F("BJet1Eta", "#eta of b-jet1", 50, -5, 5);
270 csander 1.22 h_BJet1_Eta->SetXTitle("#eta_{b-jet1}");
271 csander 1.19 h_BJet1_Eta->Sumw2();
272 csander 1.22 histograms.push_back(h_BJet1_Eta);
273 csander 1.19
274 csander 1.20 h_BJet2_Eta = new TH1F("BJet2Eta", "#eta of b-jet2", 50, -5, 5);
275 csander 1.22 h_BJet2_Eta->SetXTitle("#eta_{b-jet2}");
276 csander 1.19 h_BJet2_Eta->Sumw2();
277 csander 1.22 histograms.push_back(h_BJet2_Eta);
278 csander 1.19
279 csander 1.20 h_MET = new TH1F("MET", "MET", 50, 0, 2000);
280 csander 1.22 h_MET->SetXTitle("MET [GeV]");
281 csander 1.19 h_MET->Sumw2();
282 csander 1.22 histograms.push_back(h_MET);
283 csander 1.19
284 csander 1.20 h_MHT = new TH1F("MHT", "MHT", 50, 0, 2000);
285 csander 1.22 h_MHT->SetXTitle("MHT [GeV]");
286 csander 1.19 h_MHT->Sumw2();
287 csander 1.22 histograms.push_back(h_MHT);
288 csander 1.19
289 csander 1.20 h_HT = new TH1F("HT", "HT", 50, 0, 5000);
290 csander 1.22 h_HT->SetXTitle("HT [GeV]");
291 csander 1.19 h_HT->Sumw2();
292 csander 1.22 histograms.push_back(h_HT);
293 csander 1.20
294 csander 1.22 h_DeltaPhiJet1Jet2 = new TH1F("DeltaPhiJet1Jet2", "DeltaPhiJet1Jet2", 50, -TMath::Pi(), TMath::Pi());
295 csander 1.23 h_DeltaPhiJet1Jet2->SetXTitle("#Delta#Phi(Jet1,Jet2)");
296 csander 1.20 h_DeltaPhiJet1Jet2->Sumw2();
297 csander 1.22 histograms.push_back(h_DeltaPhiJet1Jet2);
298    
299     h_DeltaPhiJet1MHT = new TH1F("DeltaPhiJet1MHT", "DeltaPhiJet1MHT", 50, -TMath::Pi(), TMath::Pi());
300 csander 1.23 h_DeltaPhiJet1MHT->SetXTitle("#Delta#Phi(Jet1,MHT)");
301 csander 1.22 h_DeltaPhiJet1MHT->Sumw2();
302     histograms.push_back(h_DeltaPhiJet1MHT);
303    
304     h_DeltaPhiJet2MHT = new TH1F("DeltaPhiJet2MHT", "DeltaPhiJet2MHT", 50, -TMath::Pi(), TMath::Pi());
305 csander 1.23 h_DeltaPhiJet2MHT->SetXTitle("#Delta#Phi(Jet2,MHT)");
306 csander 1.22 h_DeltaPhiJet2MHT->Sumw2();
307     histograms.push_back(h_DeltaPhiJet2MHT);
308    
309     h_DeltaPhiJet3MHT = new TH1F("DeltaPhiJet3MHT", "DeltaPhiJet3MHT", 50, -TMath::Pi(), TMath::Pi());
310 csander 1.23 h_DeltaPhiJet3MHT->SetXTitle("#Delta#Phi(Jet3,MHT)");
311 csander 1.22 h_DeltaPhiJet3MHT->Sumw2();
312     histograms.push_back(h_DeltaPhiJet3MHT);
313 csander 1.20
314     h_Jet1OverHT = new TH1F("h_Jet1OverHT", "h_Jet1OverHT", 50, 0, 1.0);
315 csander 1.22 h_Jet1OverHT->SetXTitle("p_{T,jet1}/HT");
316 csander 1.20 h_Jet1OverHT->Sumw2();
317 csander 1.22 histograms.push_back(h_Jet1OverHT);
318 csander 1.20
319     h_Jet2OverHT = new TH1F("h_Jet2OverHT", "h_Jet2OverHT", 50, 0, 1.0);
320 csander 1.22 h_Jet2OverHT->SetXTitle("p_{T,jet2}/HT");
321 csander 1.20 h_Jet2OverHT->Sumw2();
322 csander 1.22 histograms.push_back(h_Jet2OverHT);
323 csander 1.20
324     h_Jet12OverHT = new TH1F("h_Jet12OverHT", "h_Jet12OverHT", 50, 0, 1.0);
325 csander 1.22 h_Jet12OverHT->SetXTitle("(p_{T,jet1}+p_{T,jet2})/HT");
326 csander 1.20 h_Jet12OverHT->Sumw2();
327 csander 1.22 histograms.push_back(h_Jet12OverHT);
328 csander 1.20
329     h_MHTOverHT = new TH1F("h_MHTOverHT", "h_MHTOverHT", 50, 0, 1.0);
330 csander 1.22 h_MHTOverHT->SetXTitle("MHT/HT");
331 csander 1.20 h_MHTOverHT->Sumw2();
332 csander 1.22 histograms.push_back(h_MHTOverHT);
333 csander 1.20
334     h_Muon1_Pt = new TH1F("Muon1Pt", "Pt of muon1", 50, 0, 1000);
335 csander 1.22 h_Muon1_Pt->SetXTitle("p_{T,muon1} [GeV]");
336 csander 1.20 h_Muon1_Pt->Sumw2();
337 csander 1.22 histograms.push_back(h_Muon1_Pt);
338 csander 1.20
339     h_Electron1_Pt = new TH1F("Electron1Pt", "Pt of electron1", 50, 0, 1000);
340 csander 1.22 h_Electron1_Pt->SetXTitle("p_{T,electron1} [GeV]");
341 csander 1.20 h_Electron1_Pt->Sumw2();
342 csander 1.22 histograms.push_back(h_Electron1_Pt);
343 csander 1.23
344     h_Muon1_Iso = new TH1F("Muon1Iso", "Relative iso of muon1", 50, 0, 1);
345     h_Muon1_Iso->SetXTitle("isolation_{rel,muon1}");
346     h_Muon1_Iso->Sumw2();
347     histograms.push_back(h_Muon1_Iso);
348    
349     h_Electron1_Iso = new TH1F("Electron1Iso", "Relative iso of electron1", 50, 0, 1);
350     h_Electron1_Iso->SetXTitle("isolation_{rel,electron1}");
351     h_Electron1_Iso->Sumw2();
352     histograms.push_back(h_Electron1_Iso);
353    
354 csander 1.24 h_Muon_MT = new TH1F("MuonMT", "MT of leading muon and MET", 50, 0, 250);
355     h_Muon_MT->SetXTitle("M_{T} (muon,MET) [GeV]");
356     h_Muon_MT->Sumw2();
357     histograms.push_back(h_Muon_MT);
358    
359     h_Electron_MT = new TH1F("ElectronMT", "MT of leading electron and MET", 50, 0, 250);
360     h_Electron_MT->SetXTitle("M_{T} (ele,MET) [GeV]");
361     h_Electron_MT->Sumw2();
362     histograms.push_back(h_Electron_MT);
363    
364 csander 1.1 }
365    
366 csander 1.2 Bool_t MyAnalysis::Process(Long64_t entry) {
367 csander 1.19 // The Process() function is called for each entry in the tree (or possibly
368     // keyed object in the case of PROOF) to be processed. The entry argument
369     // specifies which entry in the currently loaded tree is to be processed.
370     // It can be passed to either MyAnalysis::GetEntry() or TBranch::GetEntry()
371     // to read either all or the required parts of the data. When processing
372     // keyed objects with PROOF, the object is already loaded and is available
373     // via the fObject pointer.
374     //
375     // This function should contain the "body" of the analysis. It can contain
376     // simple or elaborate selection criteria, run algorithms on the data
377     // of the event and typically fill histograms.
378     //
379     // The processing can be stopped by calling Abort().
380     //
381     // Use fStatus to set the return value of TTree::Process().
382     //
383     // The return value is currently not used.
384    
385     ++TotalEvents;
386    
387     GetEntry(entry);
388    
389     Event event(EventNumber, LumiNumber, RunNumber);
390    
391     if (TotalEvents % 10000 == 0)
392     cout << "Next event -----> " << TotalEvents << endl;
393    
394     if (EventList != 0) {
395     if (!EventList->IsInList(event))
396     return 0;
397     }
398    
399     BuildEvent();
400    
401 csander 1.24 if (hasBadJet)
402     return 0;
403 csander 1.23
404 csander 1.24 if (HT < 400)
405 csander 1.23 return 0;
406    
407 csander 1.24 if (met.Pt() < 150)
408 csander 1.23 return 0;
409    
410 csander 1.24 // if (MHT.Pt() < 200)
411 csander 1.23 // return 0;
412    
413 csander 1.24 if (Jet_Mult < 2)
414 csander 1.23 return 0;
415    
416 csander 1.24 // if (deltaPhiCut)
417     // return 0;
418 csander 1.23
419 csander 1.24 // if (IsoEle_Mult > 0 || IsoMu_Mult > 0)
420     // return 0;
421 csander 1.23
422 csander 1.24 // if ((mTele < 10 || mTele > 100) && (mTmu < 10 || mTmu > 100))
423     // return 0;
424 csander 1.23
425 csander 1.24 // if (mTele < 10 || mTele > 100)
426     // return 0;
427 csander 1.23
428 csander 1.24 // if (mTmu < 10 || mTmu > 100)
429 csander 1.23 // return 0;
430    
431 csander 1.24 if (mTmu == 0 && mTele == 0)
432     return 0;
433    
434     //// Calculate distance of leading muon to next jet, and rel pT w.r.t. that jet
435     for (int i = 0; i < NMuon; ++i) {
436     dRmin_Muon[i] = 999;
437     pTrel_Muon[i] = 0;
438     relIso_Muon[i] = 0;
439     Pt_Muon[i] = 0;
440     Eta_Muon[i] = 0;
441     }
442     int j = 0;
443     for (vector<MyMuon>::iterator jt = Muons.begin(); jt != Muons.end(); ++jt) {
444     Pt_Muon[j] = jt->Pt();
445     Eta_Muon[j] = jt->Eta();
446     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
447     double tmp = jt->DeltaR(*it);
448     if (tmp < dRmin_Muon[j]) {
449     dRmin_Muon[j] = tmp;
450     pTrel_Muon[j] = jt->Pt() / it->Pt();
451     relIso_Muon[j] = jt->GetIsolation() / jt->Pt();
452     }
453     }
454     ++j;
455     }
456 csander 1.23
457 csander 1.24 //// Calculate distance of leading electron to next jet, and rel pT w.r.t. that jet
458     for (int i = 0; i < NElectron; ++i) {
459     dRmin_Electron[i] = 999;
460     pTrel_Electron[i] = 0;
461     relIso_Electron[i] = 0;
462     Pt_Electron[i] = 0;
463     Eta_Electron[i] = 0;
464     }
465     j = 0;
466     for (vector<MyElectron>::iterator jt = Electrons.begin(); jt != Electrons.end(); ++jt) {
467     Pt_Electron[j] = jt->Pt();
468     Eta_Electron[j] = jt->Eta();
469     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
470     double tmp = jt->DeltaR(*it);
471     if (tmp < dRmin_Electron[j]) {
472     dRmin_Electron[j] = tmp;
473     pTrel_Electron[j] = jt->Pt() / it->Pt();
474     relIso_Electron[j] = jt->GetIsolation() / jt->Pt();
475     }
476     }
477     ++j;
478     }
479 csander 1.23
480 csander 1.21 // cout << "Jets: " << endl;
481     // for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
482 csander 1.23 // cout << "pt, eta, phi, btag, ID: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->IsBTagged() << ", " << it->GetJetID() << endl;
483 csander 1.21 // }
484     // cout << "Muons: " << endl;
485     // for (vector<MyMuon>::iterator it = Muons.begin(); it != Muons.end(); ++it) {
486     // cout << "pt, eta, phi, iso, charge: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << ", " << it->GetCharge()
487     // << endl;
488     // }
489     // cout << "Electrons: " << endl;
490     // for (vector<MyElectron>::iterator it = Electrons.begin(); it != Electrons.end(); ++it) {
491     // cout << "pt, eta, phi, iso, charge: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << ", " << it->GetCharge()
492     // << endl;
493     // }
494     // cout << "Photons: " << endl;
495     // for (vector<MyPhoton>::iterator it = Photons.begin(); it != Photons.end(); ++it) {
496     // cout << "pt, eta, phi, iso: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << endl;
497     // }
498     // cout << "Taus: " << endl;
499     // for (vector<MyTau>::iterator it = Taus.begin(); it != Taus.end(); ++it) {
500     // cout << "pt, eta, phi, ID: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetTauID() << endl;
501     // }
502 csander 1.23 // cout << "MET (pt, phi): " << met.Pt() << ", " << met.Phi() << endl;
503     // cout << "MHT (pt, phi): " << MHT.Pt() << ", " << MHT.Phi() << endl;
504 csander 1.19
505 csander 1.24 int N_BJet = 0;
506     int N_Jet = 0;
507 csander 1.19 for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
508    
509 csander 1.22 ++N_Jet;
510    
511     if (N_Jet == 1) {
512 csander 1.19 h_Jet1_Pt->Fill(it->Pt(), EventWeight);
513     h_Jet1_Eta->Fill(it->Eta(), EventWeight);
514 csander 1.22 h_DeltaPhiJet1MHT->Fill(DeltaPhiJet1MHT, EventWeight);
515 csander 1.19 } else if (N_Jet == 2) {
516     h_Jet2_Pt->Fill(it->Pt(), EventWeight);
517     h_Jet2_Eta->Fill(it->Eta(), EventWeight);
518 csander 1.22 h_DeltaPhiJet2MHT->Fill(DeltaPhiJet2MHT, EventWeight);
519 csander 1.19 } else if (N_Jet == 3) {
520     h_Jet3_Pt->Fill(it->Pt(), EventWeight);
521     h_Jet3_Eta->Fill(it->Eta(), EventWeight);
522 csander 1.22 h_DeltaPhiJet3MHT->Fill(DeltaPhiJet3MHT, EventWeight);
523 csander 1.19 }
524     if (it->IsBTagged()) {
525     ++N_BJet;
526 csander 1.22 if (it->Pt() > 30)
527     ++BJet_Mult;
528 csander 1.19 if (N_BJet == 1) {
529     h_BJet1_Pt->Fill(it->Pt(), EventWeight);
530     h_BJet1_Eta->Fill(it->Eta(), EventWeight);
531     } else if (N_BJet == 2) {
532     h_BJet2_Pt->Fill(it->Pt(), EventWeight);
533     h_BJet2_Eta->Fill(it->Eta(), EventWeight);
534     }
535     }
536     }
537 csander 1.22 h_NBJet->Fill(BJet_Mult, EventWeight);
538     h_NJet->Fill(Jet_Mult, EventWeight);
539 csander 1.19
540     h_MET->Fill(met.Pt(), EventWeight);
541     h_MHT->Fill(MHT.Pt(), EventWeight);
542     h_HT->Fill(HT, EventWeight);
543     //////////////////////////////
544    
545     //////////////////////////////
546 csander 1.20 if (Jets.size() > 1) {
547     h_DeltaPhiJet1Jet2->Fill(Jets.at(0).DeltaPhi(Jets.at(1)), EventWeight);
548     h_Jet2OverHT->Fill(Jets.at(1).Pt() / HT, EventWeight);
549     h_Jet12OverHT->Fill((Jets.at(0).Pt() + Jets.at(1).Pt()) / HT, EventWeight);
550     }
551 csander 1.21 if (HT > 0)
552     h_Jet1OverHT->Fill(Jets.at(0).Pt() / HT, EventWeight);
553     if (HT > 0)
554     h_MHTOverHT->Fill(MHT.Pt() / HT, EventWeight);
555 csander 1.20 //////////////////////////////
556    
557     //////////////////////////////
558 csander 1.23 if (NElectron > 0) {
559     h_Electron1_Pt->Fill(Electrons.at(0).Pt(), EventWeight);
560     h_Electron1_Iso->Fill(Electrons.at(0).GetIsolation() / Electrons.at(0).Pt(), EventWeight);
561 csander 1.24 h_Electron_MT->Fill(mTele, EventWeight);
562 csander 1.23 }
563     if (NMuon > 0) {
564     h_Muon1_Pt->Fill(Muons.at(0).Pt(), EventWeight);
565     h_Muon1_Iso->Fill(Muons.at(0).GetIsolation() / Muons.at(0).Pt(), EventWeight);
566 csander 1.24 h_Muon_MT->Fill(mTmu, EventWeight);
567 csander 1.23 }
568     //////////////////////////////
569    
570     //////////////////////////////
571 csander 1.19 if (NMuon > 1) {
572 csander 1.20 if (Muons.at(0).GetCharge() * Muons.at(1).GetCharge() < 1 && Muons.at(0).IsIsolated() && Muons.at(1).IsIsolated()) {
573 csander 1.19 h_Mmumu->Fill((Muons.at(0) + Muons.at(1)).M(), EventWeight);
574     }
575     }
576     //////////////////////////////
577 csander 1.8
578 csander 1.24 ReweightTree->Fill();
579    
580 csander 1.19 return kTRUE;
581 csander 1.1 }
582    
583 csander 1.2 void MyAnalysis::SlaveTerminate() {
584 csander 1.19 // The SlaveTerminate() function is called after all entries or objects
585     // have been processed. When running with PROOF SlaveTerminate() is called
586     // on each slave server.
587 csander 1.24 file->Write();
588     file->Close();
589     delete file;
590 csander 1.1
591     }
592    
593 csander 1.2 void MyAnalysis::Terminate() {
594 csander 1.19 // The Terminate() function is the last function to be called during
595     // a query. It always runs on the client, it can be used to present
596     // the results graphically or save the results to file.
597 csander 1.1
598     }