ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/csander/HEPTutorial/MyAnalysis.C
Revision: 1.23
Committed: Fri Jun 29 13:44:57 2012 UTC (12 years, 10 months ago) by csander
Content type: text/plain
Branch: MAIN
Changes since 1.22: +114 -73 lines
Log Message:
Switched to v7, added MT

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     DeltaPhiJet1MHT = 0;
42     DeltaPhiJet2MHT = 0;
43     DeltaPhiJet3MHT = 0;
44     hasBadJet = false;
45     deltaPhiCut = false;
46    
47 csander 1.19 Jets.clear();
48     for (int i = 0; i < NJet; ++i) {
49     MyJet jet(Jet_Px[i], Jet_Py[i], Jet_Pz[i], Jet_E[i]);
50     jet.SetBTagDiscriminator(Jet_btag[i]);
51     jet.SetJetID(Jet_ID[i]);
52 csander 1.20 jet.SetMatchedGenJet(Jet_Px_gen[i], Jet_Py_gen[i], Jet_Pz_gen[i], Jet_E_gen[i]);
53 csander 1.19 jet.SetFlavor(Jet_Flavor_gen[i]);
54     Jets.push_back(jet);
55 csander 1.23 if (!(jet.GetJetID()) && jet.Pt() > 30)
56     hasBadJet = true;
57     if (jet.Pt() > 30)
58     MHT -= jet;
59     if (jet.Pt() > 50 && fabs(jet.Eta()) < 2.5) {
60     HT += jet.Pt();
61     ++Jet_Mult;
62     }
63 csander 1.19 }
64     Muons.clear();
65     for (int i = 0; i < NMuon; ++i) {
66     MyMuon muon(Muon_Px[i], Muon_Py[i], Muon_Pz[i], Muon_E[i]);
67     muon.SetIsolation(Muon_Iso[i]);
68     muon.SetCharge(Muon_Charge[i]);
69     muon.SetChargeGen(Muon_Charge_gen[i]);
70 csander 1.20 muon.SetMatchedGenMuon(Muon_Px_gen[i], Muon_Py_gen[i], Muon_Pz_gen[i], Muon_E_gen[i]);
71 csander 1.19 Muons.push_back(muon);
72 csander 1.23 if (muon.Pt() > 10 && muon.IsIsolated() && fabs(muon.Eta()) < 2.4)
73     ++IsoMu_Mult;
74 csander 1.19 }
75     Electrons.clear();
76     for (int i = 0; i < NElectron; ++i) {
77 csander 1.20 MyElectron electron(Electron_Px[i], Electron_Py[i], Electron_Pz[i], Electron_E[i]);
78 csander 1.19 electron.SetIsolation(Electron_Iso[i]);
79     electron.SetCharge(Electron_Charge[i]);
80     electron.SetChargeGen(Electron_Charge_gen[i]);
81 csander 1.20 electron.SetMatchedGenElectron(Electron_Px_gen[i], Electron_Py_gen[i], Electron_Pz_gen[i], Electron_E_gen[i]);
82 csander 1.19 Electrons.push_back(electron);
83 csander 1.23 if (electron.Pt() > 10 && electron.IsIsolated() && fabs(electron.Eta()) < 2.5 && !(fabs(electron.Eta()) < 1.566 && fabs(electron.Eta()) > 1.444))
84     ++IsoEle_Mult;
85 csander 1.19 }
86     Photons.clear();
87     for (int i = 0; i < NPhoton; ++i) {
88     MyPhoton photon(Photon_Px[i], Photon_Py[i], Photon_Pz[i], Photon_E[i]);
89     photon.SetIsolation(Photon_Iso[i]);
90 csander 1.20 photon.SetMatchedGenPhoton(Photon_Px_gen[i], Photon_Py_gen[i], Photon_Pz_gen[i], Photon_E_gen[i]);
91 csander 1.19 Photons.push_back(photon);
92     }
93     Taus.clear();
94     for (int i = 0; i < NTau; ++i) {
95     MyTau tau(Tau_Px[i], Tau_Py[i], Tau_Pz[i], Tau_E[i]);
96 csander 1.21 tau.SetTauID(Tau_ID[i]);
97 csander 1.20 tau.SetMatchedGenJet(Tau_Px_gen[i], Tau_Py_gen[i], Tau_Pz_gen[i], Tau_E_gen[i]);
98 csander 1.19 Taus.push_back(tau);
99     }
100 csander 1.22 Partons.clear();
101     for (int i = 0; i < NParton; ++i) {
102     MyParton parton(Parton_Px[i], Parton_Py[i], Parton_Pz[i], Parton_E[i]);
103     parton.SetPid(Parton_Pid[i]);
104     parton.SetNo(Parton_No[i]);
105     Partons.push_back(parton);
106     }
107 csander 1.19 met.SetXYZM(MET_px, MET_py, 0., 0.);
108     genmet.SetXYZM(MET_px_gen, MET_py_gen, 0., 0.);
109    
110     EventWeight *= weight_factor;
111 csander 1.9
112 csander 1.23 int N_Jet = 0;
113     deltaPhiCut = false;
114     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
115     ++N_Jet;
116     if (N_Jet == 1) {
117     DeltaPhiJet1MHT = MHT.DeltaPhi(*it);
118     if (fabs(DeltaPhiJet1MHT) < 0.5)
119     deltaPhiCut = true;
120     } else if (N_Jet == 2) {
121     DeltaPhiJet2MHT = MHT.DeltaPhi(*it);
122     if (fabs(DeltaPhiJet2MHT) < 0.5)
123     deltaPhiCut = true;
124     } else if (N_Jet == 3) {
125     DeltaPhiJet3MHT = MHT.DeltaPhi(*it);
126     if (fabs(DeltaPhiJet3MHT) < 0.3)
127     deltaPhiCut = true;
128     }
129     }
130    
131 csander 1.3 }
132    
133 csander 1.2 void MyAnalysis::Begin(TTree * /*tree*/) {
134 csander 1.19 // The Begin() function is called at the start of the query.
135     // When running with PROOF Begin() is only called on the client.
136     // The tree argument is deprecated (on PROOF 0 is passed).
137 csander 1.1
138 csander 1.19 TString option = GetOption();
139 csander 1.1
140     }
141    
142 csander 1.2 void MyAnalysis::SlaveBegin(TTree * /*tree*/) {
143 csander 1.19 // The SlaveBegin() function is called after the Begin() function.
144     // When running with PROOF SlaveBegin() is called on each slave server.
145     // The tree argument is deprecated (on PROOF 0 is passed).
146    
147     TString option = GetOption();
148    
149     h_Mmumu = new TH1F("Mmumu", "Invariant di-muon mass", 100, 0, 1000);
150 csander 1.22 h_Mmumu->SetXTitle("m_{#mu#mu} [GeV]");
151 csander 1.19 h_Mmumu->Sumw2();
152 csander 1.22 histograms.push_back(h_Mmumu);
153 csander 1.19
154     h_NJet = new TH1F("NJet", "Number of jets", 20, 0, 20);
155 csander 1.22 h_NJet->SetXTitle("N_{Jets}");
156 csander 1.19 h_NJet->Sumw2();
157 csander 1.22 histograms.push_back(h_NJet);
158 csander 1.19
159     h_NBJet = new TH1F("NBJet", "Number of b-jets", 5, 0, 5);
160 csander 1.22 h_NBJet->SetXTitle("N_{b-Jets}");
161 csander 1.19 h_NBJet->Sumw2();
162 csander 1.22 histograms.push_back(h_NBJet);
163 csander 1.19
164 csander 1.23 h_Jet1_Pt = new TH1F("Jet1Pt", "Pt of jet1", 50, 0, 2000);
165 csander 1.22 h_Jet1_Pt->SetXTitle("p_{T,jet1} [GeV]");
166 csander 1.19 h_Jet1_Pt->Sumw2();
167 csander 1.22 histograms.push_back(h_Jet1_Pt);
168 csander 1.19
169 csander 1.23 h_Jet2_Pt = new TH1F("Jet2Pt", "Pt of jet2", 50, 0, 2000);
170 csander 1.22 h_Jet2_Pt->SetXTitle("p_{T,jet2} [GeV]");
171 csander 1.19 h_Jet2_Pt->Sumw2();
172 csander 1.22 histograms.push_back(h_Jet2_Pt);
173 csander 1.19
174 csander 1.20 h_Jet3_Pt = new TH1F("Jet3Pt", "Pt of jet3", 50, 0, 1000);
175 csander 1.22 h_Jet3_Pt->SetXTitle("p_{T,jet3} [GeV]");
176 csander 1.19 h_Jet3_Pt->Sumw2();
177 csander 1.22 histograms.push_back(h_Jet3_Pt);
178 csander 1.19
179     h_Jet1_Eta = new TH1F("Jet1Eta", "#eta of jet1", 50, -5, 5);
180 csander 1.22 h_Jet1_Eta->SetXTitle("#eta_{jet1}");
181 csander 1.19 h_Jet1_Eta->Sumw2();
182 csander 1.22 histograms.push_back(h_Jet1_Eta);
183 csander 1.19
184     h_Jet2_Eta = new TH1F("Jet2Eta", "#eta of jet2", 50, -5, 5);
185 csander 1.22 h_Jet2_Eta->SetXTitle("#eta_{jet2}");
186 csander 1.19 h_Jet2_Eta->Sumw2();
187 csander 1.22 histograms.push_back(h_Jet2_Eta);
188 csander 1.19
189     h_Jet3_Eta = new TH1F("Jet3Eta", "#eta of jet3", 50, -5, 5);
190 csander 1.22 h_Jet3_Eta->SetXTitle("#eta_{jet3}");
191 csander 1.19 h_Jet3_Eta->Sumw2();
192 csander 1.22 histograms.push_back(h_Jet3_Eta);
193 csander 1.19
194 csander 1.20 h_BJet1_Pt = new TH1F("BJet1Pt", "Pt of b-jet1", 50, 0, 1000);
195 csander 1.22 h_BJet1_Pt->SetXTitle("p_{T,b-jet1} [GeV]");
196 csander 1.19 h_BJet1_Pt->Sumw2();
197 csander 1.22 histograms.push_back(h_BJet1_Pt);
198 csander 1.19
199 csander 1.20 h_BJet2_Pt = new TH1F("BJet2Pt", "Pt of b-jet2", 50, 0, 1000);
200 csander 1.22 h_BJet2_Pt->SetXTitle("p_{T,b-jet2} [GeV]");
201 csander 1.19 h_BJet2_Pt->Sumw2();
202 csander 1.22 histograms.push_back(h_BJet2_Pt);
203 csander 1.19
204 csander 1.20 h_BJet1_Eta = new TH1F("BJet1Eta", "#eta of b-jet1", 50, -5, 5);
205 csander 1.22 h_BJet1_Eta->SetXTitle("#eta_{b-jet1}");
206 csander 1.19 h_BJet1_Eta->Sumw2();
207 csander 1.22 histograms.push_back(h_BJet1_Eta);
208 csander 1.19
209 csander 1.20 h_BJet2_Eta = new TH1F("BJet2Eta", "#eta of b-jet2", 50, -5, 5);
210 csander 1.22 h_BJet2_Eta->SetXTitle("#eta_{b-jet2}");
211 csander 1.19 h_BJet2_Eta->Sumw2();
212 csander 1.22 histograms.push_back(h_BJet2_Eta);
213 csander 1.19
214 csander 1.20 h_MET = new TH1F("MET", "MET", 50, 0, 2000);
215 csander 1.22 h_MET->SetXTitle("MET [GeV]");
216 csander 1.19 h_MET->Sumw2();
217 csander 1.22 histograms.push_back(h_MET);
218 csander 1.19
219 csander 1.20 h_MHT = new TH1F("MHT", "MHT", 50, 0, 2000);
220 csander 1.22 h_MHT->SetXTitle("MHT [GeV]");
221 csander 1.19 h_MHT->Sumw2();
222 csander 1.22 histograms.push_back(h_MHT);
223 csander 1.19
224 csander 1.20 h_HT = new TH1F("HT", "HT", 50, 0, 5000);
225 csander 1.22 h_HT->SetXTitle("HT [GeV]");
226 csander 1.19 h_HT->Sumw2();
227 csander 1.22 histograms.push_back(h_HT);
228 csander 1.20
229 csander 1.22 h_DeltaPhiJet1Jet2 = new TH1F("DeltaPhiJet1Jet2", "DeltaPhiJet1Jet2", 50, -TMath::Pi(), TMath::Pi());
230 csander 1.23 h_DeltaPhiJet1Jet2->SetXTitle("#Delta#Phi(Jet1,Jet2)");
231 csander 1.20 h_DeltaPhiJet1Jet2->Sumw2();
232 csander 1.22 histograms.push_back(h_DeltaPhiJet1Jet2);
233    
234     h_DeltaPhiJet1MHT = new TH1F("DeltaPhiJet1MHT", "DeltaPhiJet1MHT", 50, -TMath::Pi(), TMath::Pi());
235 csander 1.23 h_DeltaPhiJet1MHT->SetXTitle("#Delta#Phi(Jet1,MHT)");
236 csander 1.22 h_DeltaPhiJet1MHT->Sumw2();
237     histograms.push_back(h_DeltaPhiJet1MHT);
238    
239     h_DeltaPhiJet2MHT = new TH1F("DeltaPhiJet2MHT", "DeltaPhiJet2MHT", 50, -TMath::Pi(), TMath::Pi());
240 csander 1.23 h_DeltaPhiJet2MHT->SetXTitle("#Delta#Phi(Jet2,MHT)");
241 csander 1.22 h_DeltaPhiJet2MHT->Sumw2();
242     histograms.push_back(h_DeltaPhiJet2MHT);
243    
244     h_DeltaPhiJet3MHT = new TH1F("DeltaPhiJet3MHT", "DeltaPhiJet3MHT", 50, -TMath::Pi(), TMath::Pi());
245 csander 1.23 h_DeltaPhiJet3MHT->SetXTitle("#Delta#Phi(Jet3,MHT)");
246 csander 1.22 h_DeltaPhiJet3MHT->Sumw2();
247     histograms.push_back(h_DeltaPhiJet3MHT);
248 csander 1.20
249     h_Jet1OverHT = new TH1F("h_Jet1OverHT", "h_Jet1OverHT", 50, 0, 1.0);
250 csander 1.22 h_Jet1OverHT->SetXTitle("p_{T,jet1}/HT");
251 csander 1.20 h_Jet1OverHT->Sumw2();
252 csander 1.22 histograms.push_back(h_Jet1OverHT);
253 csander 1.20
254     h_Jet2OverHT = new TH1F("h_Jet2OverHT", "h_Jet2OverHT", 50, 0, 1.0);
255 csander 1.22 h_Jet2OverHT->SetXTitle("p_{T,jet2}/HT");
256 csander 1.20 h_Jet2OverHT->Sumw2();
257 csander 1.22 histograms.push_back(h_Jet2OverHT);
258 csander 1.20
259     h_Jet12OverHT = new TH1F("h_Jet12OverHT", "h_Jet12OverHT", 50, 0, 1.0);
260 csander 1.22 h_Jet12OverHT->SetXTitle("(p_{T,jet1}+p_{T,jet2})/HT");
261 csander 1.20 h_Jet12OverHT->Sumw2();
262 csander 1.22 histograms.push_back(h_Jet12OverHT);
263 csander 1.20
264     h_MHTOverHT = new TH1F("h_MHTOverHT", "h_MHTOverHT", 50, 0, 1.0);
265 csander 1.22 h_MHTOverHT->SetXTitle("MHT/HT");
266 csander 1.20 h_MHTOverHT->Sumw2();
267 csander 1.22 histograms.push_back(h_MHTOverHT);
268 csander 1.20
269     h_Muon1_Pt = new TH1F("Muon1Pt", "Pt of muon1", 50, 0, 1000);
270 csander 1.22 h_Muon1_Pt->SetXTitle("p_{T,muon1} [GeV]");
271 csander 1.20 h_Muon1_Pt->Sumw2();
272 csander 1.22 histograms.push_back(h_Muon1_Pt);
273 csander 1.20
274     h_Electron1_Pt = new TH1F("Electron1Pt", "Pt of electron1", 50, 0, 1000);
275 csander 1.22 h_Electron1_Pt->SetXTitle("p_{T,electron1} [GeV]");
276 csander 1.20 h_Electron1_Pt->Sumw2();
277 csander 1.22 histograms.push_back(h_Electron1_Pt);
278 csander 1.23
279     h_Muon1_Iso = new TH1F("Muon1Iso", "Relative iso of muon1", 50, 0, 1);
280     h_Muon1_Iso->SetXTitle("isolation_{rel,muon1}");
281     h_Muon1_Iso->Sumw2();
282     histograms.push_back(h_Muon1_Iso);
283    
284     h_Electron1_Iso = new TH1F("Electron1Iso", "Relative iso of electron1", 50, 0, 1);
285     h_Electron1_Iso->SetXTitle("isolation_{rel,electron1}");
286     h_Electron1_Iso->Sumw2();
287     histograms.push_back(h_Electron1_Iso);
288    
289 csander 1.1 }
290    
291 csander 1.2 Bool_t MyAnalysis::Process(Long64_t entry) {
292 csander 1.19 // The Process() function is called for each entry in the tree (or possibly
293     // keyed object in the case of PROOF) to be processed. The entry argument
294     // specifies which entry in the currently loaded tree is to be processed.
295     // It can be passed to either MyAnalysis::GetEntry() or TBranch::GetEntry()
296     // to read either all or the required parts of the data. When processing
297     // keyed objects with PROOF, the object is already loaded and is available
298     // via the fObject pointer.
299     //
300     // This function should contain the "body" of the analysis. It can contain
301     // simple or elaborate selection criteria, run algorithms on the data
302     // of the event and typically fill histograms.
303     //
304     // The processing can be stopped by calling Abort().
305     //
306     // Use fStatus to set the return value of TTree::Process().
307     //
308     // The return value is currently not used.
309    
310     ++TotalEvents;
311    
312     GetEntry(entry);
313    
314     Event event(EventNumber, LumiNumber, RunNumber);
315    
316     if (TotalEvents % 10000 == 0)
317     cout << "Next event -----> " << TotalEvents << endl;
318    
319     if (EventList != 0) {
320     if (!EventList->IsInList(event))
321     return 0;
322     }
323    
324     BuildEvent();
325    
326 csander 1.23 int N_BJet = 0;
327     int N_Jet = 0;
328    
329     if (hasBadJet)
330     return 0;
331    
332     if (HT < 500)
333     return 0;
334    
335     // if (met.Pt() < 200)
336     // return 0;
337    
338     if (MHT.Pt() < 200)
339     return 0;
340    
341     if (Jet_Mult < 3)
342     return 0;
343    
344     if (deltaPhiCut)
345     return 0;
346    
347     if (IsoEle_Mult > 0 || IsoMu_Mult > 0)
348     return 0;
349    
350     double mTele1 = 0;
351     if (Electrons.size() > 0) {
352     mTele1 = (met + Electrons.at(0)).M();
353     };
354    
355     // if (mTele1 < 30 || mTele1 > 100)
356     // return 0;
357    
358     double mTmu1 = 0;
359     if (Muons.size() > 0) {
360     mTmu1 = (met + Muons.at(0)).M();
361     };
362    
363     // if (mTmu1 < 30 || mTmu1 > 100)
364     // return 0;
365    
366 csander 1.21 // cout << "Jets: " << endl;
367     // for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
368 csander 1.23 // cout << "pt, eta, phi, btag, ID: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->IsBTagged() << ", " << it->GetJetID() << endl;
369 csander 1.21 // }
370     // cout << "Muons: " << endl;
371     // for (vector<MyMuon>::iterator it = Muons.begin(); it != Muons.end(); ++it) {
372     // cout << "pt, eta, phi, iso, charge: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << ", " << it->GetCharge()
373     // << endl;
374     // }
375     // cout << "Electrons: " << endl;
376     // for (vector<MyElectron>::iterator it = Electrons.begin(); it != Electrons.end(); ++it) {
377     // cout << "pt, eta, phi, iso, charge: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << ", " << it->GetCharge()
378     // << endl;
379     // }
380     // cout << "Photons: " << endl;
381     // for (vector<MyPhoton>::iterator it = Photons.begin(); it != Photons.end(); ++it) {
382     // cout << "pt, eta, phi, iso: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetIsolation() << endl;
383     // }
384     // cout << "Taus: " << endl;
385     // for (vector<MyTau>::iterator it = Taus.begin(); it != Taus.end(); ++it) {
386     // cout << "pt, eta, phi, ID: " << it->Pt() << ", " << it->Eta() << ", " << it->Phi() << ", " << it->GetTauID() << endl;
387     // }
388 csander 1.23 // cout << "MET (pt, phi): " << met.Pt() << ", " << met.Phi() << endl;
389     // cout << "MHT (pt, phi): " << MHT.Pt() << ", " << MHT.Phi() << endl;
390 csander 1.19
391     for (vector<MyJet>::iterator it = Jets.begin(); it != Jets.end(); ++it) {
392    
393 csander 1.22 ++N_Jet;
394    
395     if (N_Jet == 1) {
396 csander 1.19 h_Jet1_Pt->Fill(it->Pt(), EventWeight);
397     h_Jet1_Eta->Fill(it->Eta(), EventWeight);
398 csander 1.22 h_DeltaPhiJet1MHT->Fill(DeltaPhiJet1MHT, EventWeight);
399 csander 1.19 } else if (N_Jet == 2) {
400     h_Jet2_Pt->Fill(it->Pt(), EventWeight);
401     h_Jet2_Eta->Fill(it->Eta(), EventWeight);
402 csander 1.22 h_DeltaPhiJet2MHT->Fill(DeltaPhiJet2MHT, EventWeight);
403 csander 1.19 } else if (N_Jet == 3) {
404     h_Jet3_Pt->Fill(it->Pt(), EventWeight);
405     h_Jet3_Eta->Fill(it->Eta(), EventWeight);
406 csander 1.22 h_DeltaPhiJet3MHT->Fill(DeltaPhiJet3MHT, EventWeight);
407 csander 1.19 }
408     if (it->IsBTagged()) {
409     ++N_BJet;
410 csander 1.22 if (it->Pt() > 30)
411     ++BJet_Mult;
412 csander 1.19 if (N_BJet == 1) {
413     h_BJet1_Pt->Fill(it->Pt(), EventWeight);
414     h_BJet1_Eta->Fill(it->Eta(), EventWeight);
415     } else if (N_BJet == 2) {
416     h_BJet2_Pt->Fill(it->Pt(), EventWeight);
417     h_BJet2_Eta->Fill(it->Eta(), EventWeight);
418     }
419     }
420     }
421 csander 1.22 h_NBJet->Fill(BJet_Mult, EventWeight);
422     h_NJet->Fill(Jet_Mult, EventWeight);
423 csander 1.19
424     h_MET->Fill(met.Pt(), EventWeight);
425     h_MHT->Fill(MHT.Pt(), EventWeight);
426     h_HT->Fill(HT, EventWeight);
427     //////////////////////////////
428    
429     //////////////////////////////
430 csander 1.20 if (Jets.size() > 1) {
431     h_DeltaPhiJet1Jet2->Fill(Jets.at(0).DeltaPhi(Jets.at(1)), EventWeight);
432     h_Jet2OverHT->Fill(Jets.at(1).Pt() / HT, EventWeight);
433     h_Jet12OverHT->Fill((Jets.at(0).Pt() + Jets.at(1).Pt()) / HT, EventWeight);
434     }
435 csander 1.21 if (HT > 0)
436     h_Jet1OverHT->Fill(Jets.at(0).Pt() / HT, EventWeight);
437     if (HT > 0)
438     h_MHTOverHT->Fill(MHT.Pt() / HT, EventWeight);
439 csander 1.20 //////////////////////////////
440    
441     //////////////////////////////
442 csander 1.23 if (NElectron > 0) {
443     h_Electron1_Pt->Fill(Electrons.at(0).Pt(), EventWeight);
444     h_Electron1_Iso->Fill(Electrons.at(0).GetIsolation() / Electrons.at(0).Pt(), EventWeight);
445     }
446     if (NMuon > 0) {
447     h_Muon1_Pt->Fill(Muons.at(0).Pt(), EventWeight);
448     h_Muon1_Iso->Fill(Muons.at(0).GetIsolation() / Muons.at(0).Pt(), EventWeight);
449     }
450     //////////////////////////////
451    
452     //////////////////////////////
453 csander 1.19 if (NMuon > 1) {
454 csander 1.20 if (Muons.at(0).GetCharge() * Muons.at(1).GetCharge() < 1 && Muons.at(0).IsIsolated() && Muons.at(1).IsIsolated()) {
455 csander 1.19 h_Mmumu->Fill((Muons.at(0) + Muons.at(1)).M(), EventWeight);
456     }
457     }
458     //////////////////////////////
459 csander 1.8
460 csander 1.19 return kTRUE;
461 csander 1.1 }
462    
463 csander 1.2 void MyAnalysis::SlaveTerminate() {
464 csander 1.19 // The SlaveTerminate() function is called after all entries or objects
465     // have been processed. When running with PROOF SlaveTerminate() is called
466     // on each slave server.
467 csander 1.1
468     }
469    
470 csander 1.2 void MyAnalysis::Terminate() {
471 csander 1.19 // The Terminate() function is the last function to be called during
472     // a query. It always runs on the client, it can be used to present
473     // the results graphically or save the results to file.
474 csander 1.1
475     }