ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/algomez/FourTop/TreeAnalyzer/test/Analyzer.C
Revision: 1.17
Committed: Mon Apr 23 15:49:39 2012 UTC (13 years ago) by algomez
Content type: text/plain
Branch: MAIN
Changes since 1.16: +877 -325 lines
Log Message:
version for first draft of AN

File Contents

# User Rev Content
1 algomez 1.1 // The class definition in Analyzer.h has been generated automatically
2     // by the ROOT utility TTree::MakeSelector(). This class is derived
3     // from the ROOT class TSelector. For more information on the TSelector
4     // framework see $ROOTSYS/README/README.SELECTOR or the ROOT User Manual.
5    
6     // The following methods are defined in this file:
7     // Begin(): called every time a loop on the tree starts,
8     // a convenient place to create your histograms.
9     // SlaveBegin(): called after Begin(), when on PROOF called only on the
10     // slave servers.
11     // Process(): called for each event, in this function you decide what
12     // to read and fill your histograms.
13     // SlaveTerminate: called at the end of the loop on the tree, when on PROOF
14     // called only on the slave servers.
15     // Terminate(): called at the end of the loop on the tree,
16     // a convenient place to draw/fit your histograms.
17     //
18     // To use this file, try the following session on your Tree T:
19     //
20     // Root > T->Process("Analyzer.C")
21     // Root > T->Process("Analyzer.C","some options")
22     // Root > T->Process("Analyzer.C+")
23     //
24    
25     #include "Analyzer.h"
26 algomez 1.15 #include "BTagWeight.h"
27 algomez 1.9 #include "BTagSFUtil_lite.h"
28 algomez 1.13 #include "CondFormats/JetMETObjects/interface/JetCorrectorParameters.h"
29 algomez 1.1 //#include "Yumiceva/TreeAnalyzer/interface/JetCombinatorics.h"
30 algomez 1.17 #include "PhysicsTools/Utilities/interface/Lumi3DReWeighting.h"
31 algomez 1.1
32     #include <TStyle.h>
33     #include <TSystem.h>
34    
35     #include <iostream>
36     #include <vector>
37     #include <stdio.h>
38     #include <stdlib.h>
39 algomez 1.13 #include <algorithm>
40     //#define NMAX 100
41    
42     struct sortPt
43     {
44     bool operator()(TopJetEvent s1, TopJetEvent s2) const
45     {
46     return s1.pt >= s2.pt;
47     }
48     } mysortPt;
49 algomez 1.1
50     void Analyzer::ParseInput()
51     {
52    
53     if (fMyOpt.Contains("muon"))
54     {
55     fChannel = 1;
56     }
57     if (fMyOpt.Contains("electron"))
58     {
59     fChannel = 2;
60     }
61     if (fMyOpt.Contains("verbose"))
62     {
63     fVerbose = true;
64     }
65     if (fMyOpt.Contains("JECUP")) { fdoJECunc = true; fdoJECup = true; }
66     if (fMyOpt.Contains("JECDOWN")) { fdoJECunc = true; fdoJECup = false; }
67 algomez 1.13 if (fMyOpt.Contains("JERUP")) { fdoJERup = true; }
68     if (fMyOpt.Contains("JERDOWN")) { fdoJERdown = true; }
69     if (fMyOpt.Contains("PUUP")) { fpu_up = true;}
70     if (fMyOpt.Contains("PUDOWN")) { fpu_down = true;}
71 algomez 1.17 if (fMyOpt.Contains("BTAGUP")) { fbtag_up = true;}
72     if (fMyOpt.Contains("BTAGDOWN")) { fbtag_down = true;}
73 algomez 1.8 if (fMyOpt.Contains("QCD1")) fdoQCD1SideBand = true;//anti-isolation
74     if (fMyOpt.Contains("QCD2")) fdoQCD2SideBand = true;//MET < 20 GeV
75 algomez 1.17 if (fMyOpt.Contains("diLepton")) fdodiLepton = true;
76 algomez 1.1 if (fMyOpt.Contains("mtop")) fdoMtopCut = true;
77     if (fMyOpt.Contains("outdir")) {
78     TString tmp = fMyOpt;
79     tmp = tmp.Remove(0,fMyOpt.Index("outdir")+7);
80     fOutdir = tmp+"/";
81     Info("Begin","output files will be written to directory: %s", fOutdir.Data());
82     }
83     if (fMyOpt.Contains("sample"))
84     {
85     TString tmp = fMyOpt;
86     tmp = tmp.Remove(0,fMyOpt.Index("sample")+7);
87     fSample = tmp;
88     if (fdoJECunc && fdoJECup==true) fSample += "_JECUP";
89     if (fdoJECunc && fdoJECup==false) fSample += "_JECDOWN";
90 algomez 1.2 if (fMyOpt.Contains("PUUP")) fSample += "_PUUP";
91     if (fMyOpt.Contains("PUDOWN")) fSample += "_PUDOWN";
92 algomez 1.13 if (fdoJERunc && fdoJERup==true) fSample += "_JERUP";
93     if (fdoJERunc && fdoJERdown==true) fSample += "_JERDOWN";
94 algomez 1.17 if (fMyOpt.Contains("BTAGUP")) fSample += "_BTAGUP";
95     if (fMyOpt.Contains("BTAGDOWN")) fSample += "_BTAGDOWN";
96 algomez 1.1
97     Info("Begin","Histogram names will have suffix: %s", fSample.Data());
98    
99     if ( fSample.Contains("data") )
100     {
101     fIsMC = false;
102     Info("Begin","This sample is treated as DATA");
103     if (fdoQCD1SideBand) fSample = "dataQCD1";
104     if (fdoQCD2SideBand) fSample = "dataQCD2";
105     }
106 algomez 1.2 else
107     {
108     Info("Begin","This sample is treated as MC");
109     }
110    
111 algomez 1.1
112     }
113     }
114    
115     void Analyzer::Begin(TTree * /*tree*/)
116     {
117     // The Begin() function is called at the start of the query.
118     // When running with PROOF Begin() is only called on the client.
119     // The tree argument is deprecated (on PROOF 0 is passed).
120    
121     TString option = GetOption();
122     fMyOpt = option;
123     ParseInput();
124    
125     Info("Begin", "starting with process option: %s", option.Data());
126    
127     }
128    
129     void Analyzer::SlaveBegin(TTree * tree)
130     {
131    
132     // The SlaveBegin() function is called after the Begin() function.
133     // When running with PROOF SlaveBegin() is called on each slave server.
134     // The tree argument is deprecated (on PROOF 0 is passed).
135    
136     TString option = GetOption();
137     fMyOpt = option;
138     ParseInput();
139    
140     Info("SlaveBegin",
141     "starting with process option: %s (tree: %p)", option.Data(), tree);
142    
143     //initialize the Tree branch addresses
144     Init(tree);
145    
146     // We may be creating a dataset or a merge file: check it
147     TNamed *nm = dynamic_cast<TNamed *>(fInput->FindObject("SimpleNtuple.root"));
148     if (nm) {
149 algomez 1.15 // Just create the object
150     UInt_t opt = TProofOutputFile::kRegister | TProofOutputFile::kOverwrite | TProofOutputFile::kVerify;
151     fProofFile = new TProofOutputFile( "SimpleNtuple.root",TProofOutputFile::kDataset, opt, nm->GetTitle());
152 algomez 1.1 } else {
153 algomez 1.15 // For the ntuple, we use the automatic file merging facility
154     // Check if an output URL has been given
155     TNamed *out = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE_LOCATION");
156     Info("SlaveBegin", "PROOF_OUTPUTFILE_LOCATION: %s", (out ? out->GetTitle() : "undef"));
157 algomez 1.17 //TString dir = "file:/uscms_data/d3/algomez/files/fourtop/resultsTreeAnalyzer/resultsFinal/";
158     TString dir = "file:/uscms/home/algomez/work/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test/";
159 algomez 1.15 Info("SlaveBegin","We will store the sample under the directory: %s", dir.Data());
160     TString tmpfilename = "results";
161     if ( fSample != "" ) tmpfilename += "_"+fSample+".root";
162     else tmpfilename = "results.root";
163     //TString filename ="SimpleNtuple.root";
164     fProofFile = new TProofOutputFile(tmpfilename,TProofOutputFile::kMerge);
165    
166     //fProofFile->SetOutputFileName(dir + "SimpleNtuple.root");
167     fProofFile->SetOutputFileName(dir + tmpfilename);
168     out = (TNamed *) fInput->FindObject("PROOF_OUTPUTFILE");
169    
170     if (out) fProofFile->SetOutputFileName(out->GetTitle());
171 algomez 1.1 }
172    
173     // Open the file
174     //TDirectory *savedir = gDirectory;
175     if (!(fFile = fProofFile->OpenFile("RECREATE"))) {
176     Warning("SlaveBegin", "problems opening file: %s/%s",
177     fProofFile->GetDir(), fProofFile->GetFileName());
178     }
179    
180     //create histograms
181     h1test = new TH1F("h1test","muon p_{T}",100,10.,400);
182     TString hname = "_"+fSample;
183    
184 algomez 1.16 hmuons["N0"] = new TH1F("N_muons_cut0"+hname,"Number of Muons",6, -0.5, 5.5);
185     hmuons["N"] = new TH1F("N_muons"+hname,"Number of Muons",6, -0.5, 5.5);
186     hmuons["Nelectrons_cut0"] = new TH1F("Nelectrons_cut0"+hname,"Number of Loose Electrons", 6, -0.5, 5.5);
187     hmuons["eta_cut0"] = new TH1F("muon_eta_cut0"+hname,"#eta^{#mu}", 42, -2.1, 2.1);
188     hmuons["eta"] = new TH1F("muon_eta"+hname,"#eta^{#mu}", 42, -2.1, 2.1);
189 algomez 1.17 hmuons["phi_cut0"] = new TH1F("muon_phi_cut0"+hname,"#phi^{#mu}", 32, -3.15, 3.15);
190     hmuons["phi"] = new TH1F("muon_phi"+hname,"#phi^{#mu}", 32, -3.15, 3.15);
191 algomez 1.16 hmuons["reliso"] = new TH1F("muon_reliso"+hname,"Relative Isolation", 20, 0, 0.2);
192 algomez 1.17 hmuons["deltaR_cut0"] = new TH1F("deltaR_cut0"+hname,"#DeltaR(#mu,jet)",20, 0, 4);
193     hmuons["deltaR"] = new TH1F("deltaR"+hname,"#DeltaR(#mu,jet)", 20, 0, 4);
194     hmuons["deltaR_cut2"] = new TH1F("deltaR_cut2"+hname,"#DeltaR(#mu,jet)", 20, 0, 4);
195 algomez 1.16 hmuons["d0_cut1"] = new TH1F("d0_cut1"+hname,"#mu Impact Parameter [cm]",22,-0.1,0.1);
196     hmuons["pt_cut0"] = new TH1F("muon_pt_cut0"+hname,"p_{T}^{#mu} [GeV/c]", 50, 0, 500);
197 algomez 1.1 hmuons["pt"] = new TH1F("muon_pt"+hname,"p_{T}^{#mu} [GeV/c]", 50, 0, 500);
198 algomez 1.17 hmuons["pt_cut2"] = new TH1F("muon_pt_cut2"+hname,"p_{T}^{#mu} [GeV/c]", 50, 0, 500);
199 algomez 1.16 //hmuons["dz"] = new TH1F("dz"+hname,"|z(#mu) - z_{PV}| [cm]", 25, 0, 1.);
200     hmuons["Niso"] = new TH1F("Niso"+hname,"Number of Primary Vertices", 25, -0.5, 24.5);
201     hmuons["Ngood"] = new TH1F("Ngood"+hname,"Number of Primary Vertices",25, -0.5,24.5);
202 algomez 1.15 hmuons["charge_tiso"] = new TH1F("charge_tiso"+hname,"#mu Charge", 5,-2.5,2.5);
203 algomez 1.16 hmuons["j4m0"] = new TH1F("j4m0"+hname,"Number of Muons",6, 0.5,6.5);
204     hmuons["j5m0"] = new TH1F("j5m0"+hname,"Number of Muons",6, 0.5,6.5);
205     hmuons["j6m0"] = new TH1F("j6m0"+hname,"Number of Muons",6, 0.5,6.5);
206     hmuons["j4m1"] = new TH1F("j4m1"+hname,"Number of Muons",6, 0.5,6.5);
207     hmuons["j5m1"] = new TH1F("j5m1"+hname,"Number of Muons",6, 0.5,6.5);
208     hmuons["j6m1"] = new TH1F("j6m1"+hname,"Number of Muons",6, 0.5,6.5);
209     hmuons["j4m2"] = new TH1F("j4m2"+hname,"Number of Muons",6, 0.5,6.5);
210     hmuons["j5m2"] = new TH1F("j5m2"+hname,"Number of Muons",6, 0.5,6.5);
211     hmuons["j6m2"] = new TH1F("j6m2"+hname,"Number of Muons",6, 0.5,6.5);
212 algomez 1.1
213 algomez 1.16
214     hPVs["Nreweight_cut0"] = new TH1F("NPVreweight_cut0"+hname,"Number of PVs",25, -0.5,24.5);
215     hPVs["Nreweight"] = new TH1F("NPVreweight"+hname,"Number of PVs",25, -0.5, 24.5);
216 algomez 1.17 hPVs["Nreweight_cut2"] = new TH1F("NPVreweight_cut2"+hname,"Number of PVs",25, -0.5, 24.5);
217 algomez 1.1
218 algomez 1.16 hMET["MET_cut0"] = new TH1F("MET_cut0"+hname,"Missing Transverse Energy [GeV]", 50, 0, 500);
219 algomez 1.6 hMET["MET"] = new TH1F("MET"+hname,"Missing Transverse Energy [GeV]", 50, 0, 500);
220 algomez 1.17 hMET["MET_cut2"] = new TH1F("MET_cut2"+hname,"Missing Transverse Energy [GeV]", 50, 0, 500);
221     hMET["phi_cut0"] = new TH1F("MET_phi_cut0"+hname,"#phi Missing Transverse Energy [GeV]", 32, -3.15, 3.15);
222     hMET["phi"] = new TH1F("MET_phi"+hname,"#phi Missing Transverse Energy [GeV]", 32, -3.15, 3.15);
223 algomez 1.16 hMET["Ht_cut0"] = new TH1F("Ht_cut0"+hname,"H_{T} [GeV]", 125, 0, 2500);
224     hMET["Ht"] = new TH1F("Ht"+hname,"H_{T} [GeV]", 125, 0, 2500);
225 algomez 1.17 hMET["Ht_cut2"] = new TH1F("Ht_cut2"+hname,"H_{T} [GeV]", 125, 0, 2500);
226     hMET["Stlep_cut0"] = new TH1F("Stlep_cut0"+hname,"S_{T}^{lep} [Gev/c]", 50, 0, 1000);
227     hMET["Stlep"] = new TH1F("Stlep"+hname,"S_{T}^{lep} [Gev/c]", 50, 0, 1000);
228     hMET["Stlep_cut2"] = new TH1F("Stlep_cut2"+hname,"S_{T}^{lep} [Gev/c]", 50, 0, 1000);
229     hMET["Stjet_cut0"] = new TH1F("Stjet_cut0"+hname,"S_{T}^{jet} [Gev/c]", 100, 0, 3000);
230     hMET["Stjet"] = new TH1F("Stjet"+hname,"S_{T}^{jet} [Gev/c]", 100, 0, 3000);
231     hMET["Stjet_cut2"] = new TH1F("Stjet_cut2"+hname,"S_{T}^{jet} [Gev/c]", 100, 0, 3000);
232 algomez 1.16 hMET["PzNu"] = new TH1F("PzNu"+hname,"p_{z} #nu [GeV]", 60, -300,300);
233     //hMET["EtaNu"] = new TH1F("EtaNu"+hname,"#eta",44,-2.2,2.2);
234 algomez 1.17 hMET["deltaPhiMETWlep"] = new TH1F("deltaPhiMETWlep"+hname,"#Delta #phi(Missing Transverse Energy,W(#mu,#nu))",32, -3.15, 3.15);
235     hMET["deltaPhiMETlep"] = new TH1F("deltaPhiMETlep"+hname,"#Delta #phi(Missing Transverse Energy,#mu)",32, -3.15, 3.15);
236     hMET["deltaPhiNulep"] = new TH1F("deltaPhiNulep"+hname,"#Delta #phi(#mu, #nu)",32, -3.15, 3.15);
237     hMET["deltaPhiMETWlep_cut2"] = new TH1F("deltaPhiMETWlep_cut2"+hname,"#Delta #phi(Missing Transverse Energy,W(#mu,#nu))",32, -3.15, 3.15);
238     hMET["deltaPhiMETlep_cut2"] = new TH1F("deltaPhiMETlep_cut2"+hname,"#Delta #phi(Missing Transverse Energy,#mu)",32, -3.15, 3.15);
239     hMET["deltaPhiNulep_cut2"] = new TH1F("deltaPhiNulep_cut2"+hname,"#Delta #phi(#mu, #nu)",32, -3.15, 3.15);
240 algomez 1.1
241 algomez 1.6 hM["WMt"] = new TH1F("Mt"+hname,"M_{T}(W) [GeV/c^{2}]", 50, 0, 500); // Transverse Mass sqrt(Wpt*Wpt - Wpx*Wpx - Wpy*Wpy)
242 algomez 1.16 hM["WMt_cut0"] = new TH1F("Mt_cut0"+hname,"M_{T}(W) [GeV/c^{2}]", 50, 0, 500);
243 algomez 1.17 hM["WMt_cut2"] = new TH1F("Mt_cut2"+hname,"M_{T}(W) [GeV/c^{2}]", 50, 0, 500);
244 algomez 1.16 hM["dileadjet_cut0"] = new TH1F("dileadjet_cut0"+hname,"leading (jj) mass [GeV/c^{2}]", 100, 0, 1000);
245 algomez 1.17 hM["dileadjet"] = new TH1F("dileadjet"+hname,"leading (jj) mass [GeV/c^{2}]", 30, 0, 600);
246     hM["dileadjet_cut2"] = new TH1F("dileadjet_cut2"+hname,"leading (jj) mass [GeV/c^{2}]", 25, 0, 500);
247     hM["hadW_mass_cut0"] = new TH1F("hadW_mass_cut0"+hname,"Hadronic W mass [GeV/c^{2}]", 24, 10, 500);
248     hM["hadW_mass"] = new TH1F("hadW_mass"+hname,"Hadronic W mass [GeV/c^{2}]", 49, 10, 500);
249     hM["hadW_mass_cut2"] = new TH1F("hadW_mass_cut2"+hname,"Hadronic W mass [GeV/c^{2}]", 49, 10, 500);
250     hM["top_mass_cut0"] = new TH1F("top_mass_cut0"+hname,"Hadronic Top mass [GeV/c^{2}]", 25, 0, 500);
251     hM["top_mass"] = new TH1F("top_mass"+hname,"Hadronic Top mass [GeV/c^{2}]", 25, 0, 500);
252     hM["top_mass_cut2"] = new TH1F("top_mass_cut2"+hname,"Hadronic Top mass [GeV/c^{2}]", 25, 0, 500);
253     hM["top_pt"] = new TH1F("top_pt"+hname,"Hadronic Top p_{T} [GeV/c]", 50, 0, 1000);
254     hM["top_pt_cut0"] = new TH1F("top_pt_cut0"+hname,"Hadronic Top p_{T} [GeV/c]", 50, 0, 1000);
255     hM["top_pt_cut2"] = new TH1F("top_pt_cut2"+hname,"Hadronic Top p_{T} [GeV/c]", 50, 0, 500);
256     hM["Leptop_mass"] = new TH1F("Leptop"+hname,"Leptonic Top mass [GeV/c^{2}]", 25, 0, 500);
257     hM["Leptop_pt"] = new TH1F("Leptop_pt"+hname,"Leptonic Top p_{T} [GeV/c]", 25, 0, 500);
258     hM["lepW_mass"] = new TH1F("lepW_mass"+hname,"W#rightarrow#mu#nu Mass [GeV/c^{2}]",15, 50, 200);
259     hM["lepW_mass_cut2"] = new TH1F("lepW_mass_cut2"+hname,"W#rightarrow#mu#nu Mass [GeV/c^{2}]",15, 50, 200);
260     hM["lepW_pt"]=new TH1F("lepW_pt"+hname,"W#rightarrow#mu#nu p_{t} [GeV/c^{2}]",100, 0, 1000);
261     hM["lepW_pt_cut2"]=new TH1F("lepW_pt_cut2"+hname,"W#rightarrow#mu#nu p_{t} [GeV/c^{2}]",100, 0, 1000);
262     hM["diWdeltaphi"] = new TH1F("diWdeltaphi"+hname,"#Delta #phi(W(j,j), W(#mu,#nu))",34, -3.40, 3.40);
263     hM["diWdeltaR"] = new TH1F("diWdeltaR"+hname,"#Delta R (W(j,j), W(#mu,#nu))",30, 0, 6.);
264     hM["chi2"] = new TH1F("chi2"+hname,"#chi^{2}", 50, 0, 500);
265 algomez 1.6
266 algomez 1.1 hjets["pt"] = new TH1F("jet_pt"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
267 algomez 1.16 //hjets["pt_b_mc"] = new TH1F("jet_pt_b_mc"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
268     //hjets["pt_c_mc"] = new TH1F("jet_pt_c_mc"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
269     //hjets["pt_l_mc"] = new TH1F("jet_pt_l_mc"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
270     //hjets["pt_btag"] = new TH1F("jet_pt_btag"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
271     //hjets["pt_btag_b"] = new TH1F("jet_pt_btag_b"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
272     //hjets["pt_btag_c"] = new TH1F("jet_pt_btag_c"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
273     //hjets["pt_btag_l"] = new TH1F("jet_pt_btag_l"+hname,"jet p_{T} [GeV/c]", 60, 30, 800);
274 algomez 1.17 hjets["1st_pt_cut0"] = new TH1F("jet1_pt_cut0"+hname,"1st Jet p_{T} [GeV/c]",120, 0, 1200);
275     hjets["1st_pt"] = new TH1F("jet1_pt"+hname,"1st Jet p_{T} [GeV/c]", 120, 0, 1200);
276     hjets["1st_pt_cut2"] = new TH1F("jet1_pt_cut2"+hname,"1st Jet p_{T} [GeV/c]",120, 0, 1200);
277     hjets["2nd_pt_cut0"] = new TH1F("jet2_pt_cut0"+hname,"2nd Jet p_{T} [GeV/c]", 80, 0, 800);
278     hjets["2nd_pt"] = new TH1F("jet2_pt"+hname,"2nd Jet p_{T} [GeV/c]", 80, 0, 800);
279     hjets["2nd_pt_cut2"] = new TH1F("jet2_pt_cut2"+hname,"2nd Jet p_{T} [GeV/c]", 80, 0, 800);
280     hjets["3rd_pt_cut0"] = new TH1F("jet3_pt_cut0"+hname,"3rd Jet p_{T} [GeV/c]", 50, 0, 500);
281     hjets["3rd_pt"] = new TH1F("jet3_pt"+hname,"3rd Jet p_{T} [GeV/c]", 50, 0, 500);
282     hjets["3rd_pt_cut2"] = new TH1F("jet3_pt_cut2"+hname,"3rd Jet p_{T} [GeV/c]", 50, 0, 500);
283     hjets["4th_pt_cut0"] = new TH1F("jet4_pt_cut0"+hname,"4th Jet p_{T} [GeV/c]", 35, 0, 350);
284     hjets["4th_pt"] = new TH1F("jet4_pt"+hname,"4th Jet p_{T} [GeV/c]", 35, 0, 350);
285     hjets["4th_pt_cut2"] = new TH1F("jet4_pt_cut2"+hname,"4th Jet p_{T} [GeV/c]", 35, 0, 350);
286     hjets["5th_pt_cut0"] = new TH1F("jet5_pt_cut0"+hname,"5th Jet p_{T} [GeV/c]", 29, 10, 300);
287     hjets["5th_pt"] = new TH1F("jet5_pt"+hname,"5th Jet p_{T} [GeV/c]", 29, 10, 300);
288     hjets["5th_pt_cut2"] = new TH1F("jet5_pt_cut2"+hname,"5th Jet p_{T} [GeV/c]", 29, 10, 300);
289     hjets["6th_pt_cut0"] = new TH1F("jet6_pt_cut0"+hname,"6th Jet p_{T} [GeV/c]", 29, 10, 300);
290     hjets["6th_pt"] = new TH1F("jet6_pt"+hname,"6th Jet p_{T} [GeV/c]", 29, 10, 300);
291     hjets["6th_pt_cut2"] = new TH1F("jet6_pt_cut2"+hname,"6th Jet p_{T} [GeV/c]", 29, 10, 300);
292     hjets["7th_pt_cut0"] = new TH1F("jet7_pt_cut0"+hname,"7th Jet p_{T} [GeV/c]", 29, 10, 300);
293     hjets["7th_pt"] = new TH1F("jet7_pt"+hname,"7th Jet p_{T} [GeV/c]", 29, 10, 300);
294     hjets["7th_pt_cut2"] = new TH1F("jet7_pt_cut2"+hname,"7th Jet p_{T} [GeV/c]", 29, 10, 300);
295 algomez 1.16 hjets["eta"] = new TH1F("jet_eta"+hname,"jet #eta",48, -2.4, 2.4);
296 algomez 1.17 hjets["1st_eta_cut0"] = new TH1F("jet1_eta_cut0"+hname,"1st Jet #eta",48, -2.4, 2.4);
297     hjets["1st_eta"] = new TH1F("jet1_eta"+hname,"1st Jet #eta",48, -2.4, 2.4);
298     hjets["1st_eta_cut2"] = new TH1F("jet1_eta_cut2"+hname,"1st Jet #eta",48, -2.4, 2.4);
299     hjets["2nd_eta_cut0"] = new TH1F("jet2_eta_cut0"+hname,"2nd Jet #eta",48, -2.4, 2.4);
300     hjets["2nd_eta"] = new TH1F("jet2_eta"+hname,"2nd Jet #eta",48, -2.4, 2.4);
301     hjets["2nd_eta_cut2"] = new TH1F("jet2_eta_cut2"+hname,"2nd Jet #eta",48, -2.4, 2.4);
302     hjets["3rd_eta"] = new TH1F("jet3_eta"+hname,"3rd Jet #eta",48, -2.4, 2.4);
303     hjets["4th_eta"] = new TH1F("jet4_eta"+hname,"4th Jet #eta",48, -2.4, 2.4);
304     hjets["phi"] = new TH1F("jet_phi"+hname,"jet #phi",32, -3.15, 3.15);
305     hjets["Njets_cut0"] = new TH1F("Njets_cut0"+hname,"Jet Multiplicity",12, 0.5,12.5);
306 algomez 1.16 hjets["Njets"] = new TH1F("Njets"+hname,"jet multiplicity",12,0.5,12.5);
307 algomez 1.17 hjets["Njets_cut2"] = new TH1F("Njets_cut2"+hname,"jet multiplicity",12, 0.5,12.5);
308 algomez 1.16 hjets["Nbtags_TCHPM_cut0"] = new TH1F("Nbjets_TCHPM_cut0"+hname,"Tagged b-jets",8,-0.5,7.5);
309     hjets["Nbtags_TCHPM"] = new TH1F("Nbjets_TCHPM"+hname,"Tagged b-jets",8,-0.5,7.5);
310     hjets["Nbtags_CSVL_cut0"] = new TH1F("Nbjets_CSVL_cut0"+hname,"Tagged b-jets",8,-0.5,7.5);
311 algomez 1.17 hjets["Nbtags_CSVL"] = new TH1F("Nbjets_CSVL"+hname,"CSV Loose Tagged b-jets",8,-0.5,7.5);
312 algomez 1.16 hjets["Nbtags_CSVM_cut0"] = new TH1F("Nbjets_CSVM_cut0"+hname,"Tagged b-jets",8, -0.5, 7.5);
313 algomez 1.10 hjets["Nbtags_CSVM"] = new TH1F("Nbjets_CSVM"+hname,"Tagged b-jets",8,-0.5,7.5);
314 algomez 1.16 hjets["Nbtags_CSVT_cut0"] = new TH1F("Nbjets_CSVT_cut0"+hname,"Tagged b-jets",8,-0.5,7.5);
315 algomez 1.11 hjets["Nbtags_CSVT"] = new TH1F("Nbjets_CSVT"+hname,"Tagged b-jets",8,-0.5,7.5);
316 algomez 1.17 hjets["deltaPhijj_cut0"] = new TH1F("deltaPhijj_cut0"+hname,"#Delta #phi(j1,j2)",34,-3.40,3.40);
317     hjets["deltaPhijj"] = new TH1F("deltaPhijj"+hname,"#Delta #phi(j1,j2)",34, -3.40, 3.40);
318     hjets["deltaRjj_cut0"] = new TH1F("deltaRjj_cut0"+hname,"#DeltaR(j1,j2)",20,0.,4.);
319     hjets["mindeltaRjj"] = new TH1F("mindeltaRjj"+hname,"min #DeltaR(j,j)",15,0.,3.);
320     hjets["deltaRjj"] = new TH1F("deltaRjj"+hname,"#DeltaR(j1,j2)",30,0.,6.);
321     hjets["deltaRjj_cut2"] = new TH1F("deltaRjj_cut2"+hname,"#DeltaR(j1,j2)",30,0.,6.);
322     hjets["deltaRmu2j"] = new TH1F("deltaRmu2j"+hname,"#DeltaR(#mu,j2)",30,0.,6.);
323     hjets["deltaRmu3j"] = new TH1F("deltaRmu3j"+hname,"#DeltaR(#mu,j2)",30,0.,6.);
324     hjets["deltaPhimu2j"] = new TH1F("deltaPhimu2j"+hname,"#Delta #phi(#mu,j2)",17, -3.40, 3.40);
325     hjets["deltaPhimu3j"] = new TH1F("deltaPhimu3j"+hname,"#Delta #phi(#mu,j3)",68, -3.40, 3.40);
326 algomez 1.16 //hjets["tb_deltaPhi"] = new TH1F("tb_deltaPhi"+hname,"#Delta #phi(t,b)",30,0.,3.15);
327     //hjets["tb_deltaEta"] = new TH1F("tb_deltaEta"+hname,"#Delta #eta(t,b)",30,-5,5);
328     //hjets["pt_b"] = new TH1F("pt_b"+hname,"b-jet p_{T} [GeV]",60,0,1500);
329     //hjets["jet1_CSVM_pt"] = new TH1F("jet1_CSVM_pt"+hname,"leading btag jet p_{T} (CSVM) [GeV/c]",80, 0, 800);
330     //hjets["jet2_CSVM_pt"] = new TH1F("jet2_CSVM_pt"+hname,"2 leading btag jet p_{T} (CSVM) [GeV/c]",50, 0, 500);
331     //hjets["jet3_CSVM_pt"] = new TH1F("jet3_CSVM_pt"+hname,"3 leading btag jet p_{T} (CSVM) [GeV/c]",20, 0, 200);
332     //hjets["jet4_CSVM_pt"] = new TH1F("jet4_CSVM_pt"+hname,"4 leading btag jet p_{T} (CSVM) [GeV/c]",20, 0, 200);
333 algomez 1.17 hjets["jet1_CSVL_pt"] = new TH1F("jet1_CSVL_pt"+hname,"leading btag jet p_{T} (CSVL) [GeV/c]",80, 0, 800);
334 algomez 1.16 //hjets["jet2_CSVL_pt"] = new TH1F("jet2_CSVL_pt"+hname,"2 leading btag jet p_{T} (CSVL) [GeV/c]",50, 0, 500);
335     //hjets["jet3_CSVL_pt"] = new TH1F("jet3_CSVL_pt"+hname,"3 leading btag jet p_{T} (CSVL) [GeV/c]",20, 0, 200);
336     //hjets["jet4_CSVL_pt"] = new TH1F("jet4_CSVL_pt"+hname,"4 leading btag jet p_{T} (CSVL) [GeV/c]",20, 0, 200);
337 algomez 1.17 //
338     //
339     //
340     //
341     //////////////////////////////////// Additional Plots
342     //
343     hjets["Stjetm1j4b0"] = new TH1F("Stjetm1j4b0"+hname,"S_{T}^{jet} (1 #mu & 4 jets & 0 btag)",70, 200, 3000 );
344     hjets["DeltaRdijetm1j4b0"] = new TH1F("DeltaRdijetm1j4b0"+hname,"#DeltaR(j,j) (1 #mu & 4 jets & 0 btag)",40,0.,4.);
345     hjets["DeltaPhiMETWlepm1j4b0"] = new TH1F("DeltaPhiMETWlepm1j4b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 4 jets & 0 btag)",32, -3.15, 3.15 );
346     hjets["trijetmassm1j4b0"] = new TH1F("trijetmassm1j4b0"+hname,"top mass (1 #mu & 4 jets & 0 btag)", 100, 0, 1000 );
347     hjets["trijetptm1j4b0"] = new TH1F("trijetptm1j4b0"+hname,"top p_{T} (1 #mu & 4 jets & 0 btag)", 50, 0, 500);
348     hjets["deltaRmindijetm1j4b0"] = new TH1F("deltaRmindijetm1j4b0"+hname,"min #DeltaR(j,j) (1 #mu & 4 jets & 0 btag)", 40,0.,4.);
349     hjets["deltaRmu2jetm1j4b0"] = new TH1F("deltaRmu2jetm1j4b0"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 4 jets & 0 btag)", 40,0.,4.);
350     hjets["deltaPhidijetm1j4b0"] = new TH1F("deltaPhidijetm1j4b0"+hname,"#Delta #phi(j,j) (1 #mu & 4 jets & 0 btag)", 32, -3.15, 3.15);
351     hjets["deltaPhimu2jetm1j4b0"] = new TH1F("deltaPhimu2jetm1j4b0"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 4 jets & 0 btag)", 32, -3.15, 3.15);
352     hjets["Stlepm1j4b0"] = new TH1F("Stlepm1j4b0"+hname,"S_{t}^{lep} (1 #mu & 4 jets & 0 btag)", 100, 0, 1000);
353     hjets["Htm1j4b0"] = new TH1F("Htm1j4b0"+hname,"H_{T} (1 #mu & 4 jets & 0 btag)", 125, 0, 2500);
354     hjets["Njetsm1j4b0"] = new TH1F("Njetsm1j4b0"+hname,"Njets (1 #mu & 4 jets & 0 btag)", 12,0.5,12.5);
355     hjets["Stjetm1j5b0"] = new TH1F("Stjetm1j5b0"+hname,"S_{T}^{jet} (1 #mu & 5 jets & 0 btag)",70, 200, 3000 );
356     hjets["DeltaRdijetm1j5b0"] = new TH1F("DeltaRdijetm1j5b0"+hname,"#DeltaR(j,j) (1 #mu & 5 jets & 0 btag)",40,0.,4.);
357     hjets["DeltaPhiMETWlepm1j5b0"] = new TH1F("DeltaPhiMETWlepm1j5b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 5 jets & 0 btag)",32, -3.15, 3.15 );
358     hjets["trijetmassm1j5b0"] = new TH1F("trijetmassm1j5b0"+hname,"top mass (1 #mu & 5 jets & 0 btag)", 100, 0, 1000 );
359     hjets["trijetptm1j5b0"] = new TH1F("trijetptm1j5b0"+hname,"top p_{T} (1 #mu & 5 jets & 0 btag)", 50, 0, 500);
360     hjets["deltaRmindijetm1j5b0"] = new TH1F("deltaRmindijetm1j5b0"+hname,"min #DeltaR(j,j) (1 #mu & 5 jets & 0 btag)", 40,0.,4.);
361     hjets["deltaRmu2jetm1j5b0"] = new TH1F("deltaRmu2jetm1j5b0"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 5 jets & 0 btag)", 40,0.,4.);
362     hjets["deltaPhidijetm1j5b0"] = new TH1F("deltaPhidijetm1j5b0"+hname,"#Delta #phi(j,j) (1 #mu & 5 jets & 0 btag)", 32, -3.15, 3.15);
363     hjets["deltaPhimu2jetm1j5b0"] = new TH1F("deltaPhimu2jetm1j5b0"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 5 jets & 0 btag)", 32, -3.15, 3.15);
364     hjets["Stlepm1j5b0"] = new TH1F("Stlepm1j5b0"+hname,"S_{t}^{lep} (1 #mu & 5 jets & 0 btag)", 100, 0, 1000);
365     hjets["Htm1j5b0"] = new TH1F("Htm1j5b0"+hname,"H_{T} (1 #mu & 5 jets & 0 btag)", 125, 0, 2500);
366     hjets["Njetsm1j5b0"] = new TH1F("Njetsm1j5b0"+hname,"Njets (1 #mu & 5 jets & 0 btag)", 12,0.5,12.5);
367     hjets["Stjetm1j6b0"] = new TH1F("Stjetm1j6b0"+hname,"S_{T}^{jet} (1 #mu & #geq 6 jets & 0 btag)",70, 200, 3000 );
368     hjets["DeltaRdijetm1j6b0"] = new TH1F("DeltaRdijetm1j6b0"+hname,"#DeltaR(j,j) (1 #mu & #geq 6 jets & 0 btag)",40,0.,4.);
369     hjets["DeltaPhiMETWlepm1j6b0"] = new TH1F("DeltaPhiMETWlepm1j6b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & #geq 6 jets & 0 btag)",32, -3.15, 3.15 );
370     hjets["trijetmassm1j6b0"] = new TH1F("trijetmassm1j6b0"+hname,"top mass (1 #mu & #geq 6 jets & 0 btag)", 100, 0, 1000 );
371     hjets["trijetptm1j6b0"] = new TH1F("trijetptm1j6b0"+hname,"top p_{T} (1 #mu & #geq 6 jets & 0 btag)", 50, 0, 500);
372     hjets["deltaRmindijetm1j6b0"] = new TH1F("deltaRmindijetm1j6b0"+hname,"min #DeltaR(j,j) (1 #mu & #geq 6 jets & 0 btag)", 40,0.,4.);
373     hjets["deltaRmu2jetm1j6b0"] = new TH1F("deltaRmu2jetm1j6b0"+hname,"#DeltaR(#mu,2nd j) (1 #mu & #geq 6 jets & 0 btag)", 40,0.,4.);
374     hjets["deltaPhidijetm1j6b0"] = new TH1F("deltaPhidijetm1j6b0"+hname,"#Delta #phi(j,j) (1 #mu & #geq 6 jets & 0 btag)", 32, -3.15, 3.15);
375     hjets["deltaPhimu2jetm1j6b0"] = new TH1F("deltaPhimu2jetm1j6b0"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & #geq 6 jets & 0 btag)", 32, -3.15, 3.15);
376     hjets["Stlepm1j6b0"] = new TH1F("Stlepm1j6b0"+hname,"S_{t}^{lep} (1 #mu & #geq 6 jets & 0 btag)", 100, 0, 1000);
377     hjets["Htm1j6b0"] = new TH1F("Htm1j6b0"+hname,"H_{T} (1 #mu & #geq 6 jets & 0 btag)", 125, 0, 2500);
378     hjets["Njetsm1j6b0"] = new TH1F("Njetsm1j6b0"+hname,"Njets (1 #mu & #geq 6 jets & 0 btag)", 12,0.5,12.5);
379    
380    
381     hjets["Stjetm1j4b1"] = new TH1F("Stjetm1j4b1"+hname,"S_{T}^{jet} (1 #mu & 4 jets & 1 btag)",70, 200, 3000 );
382     hjets["DeltaRdijetm1j4b1"] = new TH1F("DeltaRdijetm1j4b1"+hname,"#DeltaR(j,j) (1 #mu & 4 jets & 1 btag)",40,0.,4.);
383     hjets["DeltaPhiMETWlepm1j4b1"] = new TH1F("DeltaPhiMETWlepm1j4b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 4 jets & 1 btag)",32, -3.15, 3.15 );
384     hjets["trijetmassm1j4b1"] = new TH1F("trijetmassm1j4b1"+hname,"top mass (1 #mu & 4 jets & 1 btag)", 100, 0, 1000 );
385     hjets["trijetptm1j4b1"] = new TH1F("trijetptm1j4b1"+hname,"top p_{T} (1 #mu & 4 jets & 1 btag)", 50, 0, 500);
386     hjets["deltaRmindijetm1j4b1"] = new TH1F("deltaRmindijetm1j4b1"+hname,"min #DeltaR(j,j) (1 #mu & 4 jets & 1 btag)", 40,0.,4.);
387     hjets["deltaRmu2jetm1j4b1"] = new TH1F("deltaRmu2jetm1j4b1"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 4 jets & 1 btag)", 40,0.,4.);
388     hjets["deltaPhidijetm1j4b1"] = new TH1F("deltaPhidijetm1j4b1"+hname,"#Delta #phi(j,j) (1 #mu & 4 jets & 1 btag)", 32, -3.15, 3.15);
389     hjets["deltaPhimu2jetm1j4b1"] = new TH1F("deltaPhimu2jetm1j4b1"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 4 jets & 1 btag)", 32, -3.15, 3.15);
390     hjets["Stlepm1j4b1"] = new TH1F("Stlepm1j4b1"+hname,"S_{t}^{lep} (1 #mu & 4 jets & 1 btag)", 100, 0, 1000);
391     hjets["Htm1j4b1"] = new TH1F("Htm1j4b1"+hname,"H_{T} (1 #mu & 4 jets & 1 btag)", 125, 0, 2500);
392     hjets["Njetsm1j4b1"] = new TH1F("Njetsm1j4b1"+hname,"Njets (1 #mu & 4 jets & 1 btag)", 12,0.5,12.5);
393     hjets["Stjetm1j5b1"] = new TH1F("Stjetm1j5b1"+hname,"S_{T}^{jet} (1 #mu & 5 jets & 1 btag)",70, 200, 3000 );
394     hjets["DeltaRdijetm1j5b1"] = new TH1F("DeltaRdijetm1j5b1"+hname,"#DeltaR(j,j) (1 #mu & 5 jets & 1 btag)",40,0.,4.);
395     hjets["DeltaPhiMETWlepm1j5b1"] = new TH1F("DeltaPhiMETWlepm1j5b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 5 jets & 1 btag)",32, -3.15, 3.15 );
396     hjets["trijetmassm1j5b1"] = new TH1F("trijetmassm1j5b1"+hname,"top mass (1 #mu & 5 jets & 1 btag)", 100, 0, 1000 );
397     hjets["trijetptm1j5b1"] = new TH1F("trijetptm1j5b1"+hname,"top p_{T} (1 #mu & 5 jets & 1 btag)", 50, 0, 500);
398     hjets["deltaRmindijetm1j5b1"] = new TH1F("deltaRmindijetm1j5b1"+hname,"min #DeltaR(j,j) (1 #mu & 5 jets & 1 btag)", 40,0.,4.);
399     hjets["deltaRmu2jetm1j5b1"] = new TH1F("deltaRmu2jetm1j5b1"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 5 jets & 1 btag)", 40,0.,4.);
400     hjets["deltaPhidijetm1j5b1"] = new TH1F("deltaPhidijetm1j5b1"+hname,"#Delta #phi(j,j) (1 #mu & 5 jets & 1 btag)", 32, -3.15, 3.15);
401     hjets["deltaPhimu2jetm1j5b1"] = new TH1F("deltaPhimu2jetm1j5b1"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 5 jets & 1 btag)", 32, -3.15, 3.15);
402     hjets["Stlepm1j5b1"] = new TH1F("Stlepm1j5b1"+hname,"S_{t}^{lep} (1 #mu & 5 jets & 1 btag)", 100, 0, 1000);
403     hjets["Htm1j5b1"] = new TH1F("Htm1j5b1"+hname,"H_{T} (1 #mu & 5 jets & 1 btag)", 125, 0, 2500);
404     hjets["Njetsm1j5b1"] = new TH1F("Njetsm1j5b1"+hname,"Njets (1 #mu & 5 jets & 1 btag)", 12,0.5,12.5);
405     hjets["Stjetm1j6b1"] = new TH1F("Stjetm1j6b1"+hname,"S_{T}^{jet} (1 #mu & #geq 6 jets & 1 btag)",70, 200, 3000 );
406     hjets["DeltaRdijetm1j6b1"] = new TH1F("DeltaRdijetm1j6b1"+hname,"#DeltaR(j,j) (1 #mu & #geq 6 jets & 1 btag)",40,0.,4.);
407     hjets["DeltaPhiMETWlepm1j6b1"] = new TH1F("DeltaPhiMETWlepm1j6b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & #geq 6 jets & 1 btag)",32, -3.15, 3.15 );
408     hjets["trijetmassm1j6b1"] = new TH1F("trijetmassm1j6b1"+hname,"top mass (1 #mu & #geq 6 jets & 1 btag)", 100, 0, 1000 );
409     hjets["trijetptm1j6b1"] = new TH1F("trijetptm1j6b1"+hname,"top p_{T} (1 #mu & #geq 6 jets & 1 btag)", 50, 0, 500);
410     hjets["deltaRmindijetm1j6b1"] = new TH1F("deltaRmindijetm1j6b1"+hname,"min #DeltaR(j,j) (1 #mu & #geq 6 jets & 1 btag)", 40,0.,4.);
411     hjets["deltaRmu2jetm1j6b1"] = new TH1F("deltaRmu2jetm1j6b1"+hname,"#DeltaR(#mu,2nd j) (1 #mu & #geq 6 jets & 1 btag)", 40,0.,4.);
412     hjets["deltaPhidijetm1j6b1"] = new TH1F("deltaPhidijetm1j6b1"+hname,"#Delta #phi(j,j) (1 #mu & #geq 6 jets & 1 btag)", 32, -3.15, 3.15);
413     hjets["deltaPhimu2jetm1j6b1"] = new TH1F("deltaPhimu2jetm1j6b1"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & #geq 6 jets & 1 btag)", 32, -3.15, 3.15);
414     hjets["Stlepm1j6b1"] = new TH1F("Stlepm1j6b1"+hname,"S_{t}^{lep} (1 #mu & #geq 6 jets & 1 btag)", 100, 0, 1000);
415     hjets["Htm1j6b1"] = new TH1F("Htm1j6b1"+hname,"H_{T} (1 #mu & #geq 6 jets & 1 btag)", 125, 0, 2500);
416     hjets["Njetsm1j6b1"] = new TH1F("Njetsm1j6b1"+hname,"Njets (1 #mu & #geq 6 jets & 1 btag)", 12,0.5,12.5);
417    
418     hjets["Stjetm1j4b2"] = new TH1F("Stjetm1j4b2"+hname,"S_{T}^{jet} (1 #mu & 4 jets & #geq 2 btag)",70, 200, 3000 );
419     hjets["DeltaRdijetm1j4b2"] = new TH1F("DeltaRdijetm1j4b2"+hname,"#DeltaR(j,j) (1 #mu & 4 jets & #geq 2 btag)",40,0.,4.);
420     hjets["DeltaPhiMETWlepm1j4b2"] = new TH1F("DeltaPhiMETWlepm1j4b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 4 jets & #geq 2 btag)",32, -3.15, 3.15 );
421     hjets["trijetmassm1j4b2"] = new TH1F("trijetmassm1j4b2"+hname,"top mass (1 #mu & 4 jets & #geq 2 btag)", 100, 0, 1000 );
422     hjets["trijetptm1j4b2"] = new TH1F("trijetptm1j4b2"+hname,"top p_{T} (1 #mu & 4 jets & #geq 2 btag)", 50, 0, 500);
423     hjets["deltaRmindijetm1j4b2"] = new TH1F("deltaRmindijetm1j4b2"+hname,"min #DeltaR(j,j) (1 #mu & 4 jets & #geq 2 btag)", 40,0.,4.);
424     hjets["deltaRmu2jetm1j4b2"] = new TH1F("deltaRmu2jetm1j4b2"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 4 jets & #geq 2 btag)", 40,0.,4.);
425     hjets["deltaPhidijetm1j4b2"] = new TH1F("deltaPhidijetm1j4b2"+hname,"#Delta #phi(j,j) (1 #mu & 4 jets & #geq 2 btag)", 32, -3.15, 3.15);
426     hjets["deltaPhimu2jetm1j4b2"] = new TH1F("deltaPhimu2jetm1j4b2"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 4 jets & #geq 2 btag)", 32, -3.15, 3.15);
427     hjets["Stlepm1j4b2"] = new TH1F("Stlepm1j4b2"+hname,"S_{t}^{lep} (1 #mu & 4 jets & #geq 2 btag)", 100, 0, 1000);
428     hjets["Htm1j4b2"] = new TH1F("Htm1j4b2"+hname,"H_{T} (1 #mu & 4 jets & #geq 2 btag)", 125, 0, 2500);
429     hjets["Njetsm1j4b2"] = new TH1F("Njetsm1j4b2"+hname,"Njets (1 #mu & 4 jets & #geq 2 btag)", 12,0.5,12.5);
430     hjets["Stjetm1j5b2"] = new TH1F("Stjetm1j5b2"+hname,"S_{T}^{jet} (1 #mu & 5 jets & #geq 2 btag)",70, 200, 3000 );
431     hjets["DeltaRdijetm1j5b2"] = new TH1F("DeltaRdijetm1j5b2"+hname,"#DeltaR(j,j) (1 #mu & 5 jets & #geq 2 btag)",40,0.,4.);
432     hjets["DeltaPhiMETWlepm1j5b2"] = new TH1F("DeltaPhiMETWlepm1j5b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & 5 jets & #geq 2 btag)",32, -3.15, 3.15 );
433     hjets["trijetmassm1j5b2"] = new TH1F("trijetmassm1j5b2"+hname,"top mass (1 #mu & 5 jets & #geq 2 btag)", 100, 0, 1000 );
434     hjets["trijetptm1j5b2"] = new TH1F("trijetptm1j5b2"+hname,"top p_{T} (1 #mu & 5 jets & #geq 2 btag)", 50, 0, 500);
435     hjets["deltaRmindijetm1j5b2"] = new TH1F("deltaRmindijetm1j5b2"+hname,"min #DeltaR(j,j) (1 #mu & 5 jets & #geq 2 btag)", 40,0.,4.);
436     hjets["deltaRmu2jetm1j5b2"] = new TH1F("deltaRmu2jetm1j5b2"+hname,"#DeltaR(#mu,2nd j) (1 #mu & 5 jets & #geq 2 btag)", 40,0.,4.);
437     hjets["deltaPhidijetm1j5b2"] = new TH1F("deltaPhidijetm1j5b2"+hname,"#Delta #phi(j,j) (1 #mu & 5 jets & #geq 2 btag)", 32, -3.15, 3.15);
438     hjets["deltaPhimu2jetm1j5b2"] = new TH1F("deltaPhimu2jetm1j5b2"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & 5 jets & #geq 2 btag)", 32, -3.15, 3.15);
439     hjets["Stlepm1j5b2"] = new TH1F("Stlepm1j5b2"+hname,"S_{t}^{lep} (1 #mu & 5 jets & #geq 2 btag)", 100, 0, 1000);
440     hjets["Htm1j5b2"] = new TH1F("Htm1j5b2"+hname,"H_{T} (1 #mu & 5 jets & #geq 2 btag)", 125, 0, 2500);
441     hjets["Njetsm1j5b2"] = new TH1F("Njetsm1j5b2"+hname,"Njets (1 #mu & 5 jets & #geq 2 btag)", 12,0.5,12.5);
442     hjets["Stjetm1j6b2"] = new TH1F("Stjetm1j6b2"+hname,"S_{T}^{jet} (1 #mu & #geq 6 jets & #geq 2 btag)",70, 200, 3000 );
443     hjets["DeltaRdijetm1j6b2"] = new TH1F("DeltaRdijetm1j6b2"+hname,"#DeltaR(j,j) (1 #mu & #geq 6 jets & #geq 2 btag)",40,0.,4.);
444     hjets["DeltaPhiMETWlepm1j6b2"] = new TH1F("DeltaPhiMETWlepm1j6b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (1 #mu & #geq 6 jets & #geq 2 btag)",32, -3.15, 3.15 );
445     hjets["trijetmassm1j6b2"] = new TH1F("trijetmassm1j6b2"+hname,"top mass (1 #mu & #geq 6 jets & #geq 2 btag)", 100, 0, 1000 );
446     hjets["trijetptm1j6b2"] = new TH1F("trijetptm1j6b2"+hname,"top p_{T} (1 #mu & #geq 6 jets & #geq 2 btag)", 50, 0, 500);
447     hjets["deltaRmindijetm1j6b2"] = new TH1F("deltaRmindijetm1j6b2"+hname,"min #DeltaR(j,j) (1 #mu & #geq 6 jets & #geq 2 btag)", 40,0.,4.);
448     hjets["deltaRmu2jetm1j6b2"] = new TH1F("deltaRmu2jetm1j6b2"+hname,"#DeltaR(#mu,2nd j) (1 #mu & #geq 6 jets & #geq 2 btag)", 40,0.,4.);
449     hjets["deltaPhidijetm1j6b2"] = new TH1F("deltaPhidijetm1j6b2"+hname,"#Delta #phi(j,j) (1 #mu & #geq 6 jets & #geq 2 btag)", 32, -3.15, 3.15);
450     hjets["deltaPhimu2jetm1j6b2"] = new TH1F("deltaPhimu2jetm1j6b2"+hname,"#Delta #phi(#mu,2nd j) (1 #mu & #geq 6 jets & #geq 2 btag)", 32, -3.15, 3.15);
451     hjets["Stlepm1j6b2"] = new TH1F("Stlepm1j6b2"+hname,"S_{t}^{lep} (1 #mu & #geq 6 jets & #geq 2 btag)", 100, 0, 1000);
452     hjets["Htm1j6b2"] = new TH1F("Htm1j6b2"+hname,"H_{T} (1 #mu & #geq 6 jets & #geq 2 btag)", 125, 0, 2500);
453     hjets["Njetsm1j6b2"] = new TH1F("Njetsm1j6b2"+hname,"Njets (1 #mu & #geq 6 jets & #geq 2 btag)", 12,0.5,12.5);
454    
455     hjets["Stjetm2j4b0"] = new TH1F("Stjetm2j4b0"+hname,"S_{T}^{jet} (2 #mu & 4 jets & 0 btag)",70, 200, 3000 );
456     hjets["DeltaRdijetm2j4b0"] = new TH1F("DeltaRdijetm2j4b0"+hname,"#DeltaR(j,j) (2 #mu & 4 jets & 0 btag)",40,0.,4.);
457     hjets["DeltaPhiMETWlepm2j4b0"] = new TH1F("DeltaPhiMETWlepm2j4b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 4 jets & 0 btag)",32, -3.15, 3.15 );
458     hjets["trijetmassm2j4b0"] = new TH1F("trijetmassm2j4b0"+hname,"top mass (2 #mu & 4 jets & 0 btag)", 100, 0, 1000 );
459     hjets["trijetptm2j4b0"] = new TH1F("trijetptm2j4b0"+hname,"top p_{T} (2 #mu & 4 jets & 0 btag)", 50, 0, 500);
460     hjets["deltaRmindijetm2j4b0"] = new TH1F("deltaRmindijetm2j4b0"+hname,"min #DeltaR(j,j) (2 #mu & 4 jets & 0 btag)", 40,0.,4.);
461     hjets["deltaRmu2jetm2j4b0"] = new TH1F("deltaRmu2jetm2j4b0"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 4 jets & 0 btag)", 40,0.,4.);
462     hjets["deltaPhidijetm2j4b0"] = new TH1F("deltaPhidijetm2j4b0"+hname,"#Delta #phi(j,j) (2 #mu & 4 jets & 0 btag)", 32, -3.15, 3.15);
463     hjets["deltaPhimu2jetm2j4b0"] = new TH1F("deltaPhimu2jetm2j4b0"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 4 jets & 0 btag)", 32, -3.15, 3.15);
464     hjets["Stlepm2j4b0"] = new TH1F("Stlepm2j4b0"+hname,"S_{t}^{lep} (2 #mu & 4 jets & 0 btag)", 100, 0, 1000);
465     hjets["Htm2j4b0"] = new TH1F("Htm2j4b0"+hname,"H_{T} (2 #mu & 4 jets & 0 btag)", 125, 0, 2500);
466     hjets["Njetsm2j4b0"] = new TH1F("Njetsm2j4b0"+hname,"Njets (2 #mu & 4 jets & 0 btag)", 12,0.5,12.5);
467     hjets["Stjetm2j5b0"] = new TH1F("Stjetm2j5b0"+hname,"S_{T}^{jet} (2 #mu & 5 jets & 0 btag)",70, 200, 3000 );
468     hjets["DeltaRdijetm2j5b0"] = new TH1F("DeltaRdijetm2j5b0"+hname,"#DeltaR(j,j) (2 #mu & 5 jets & 0 btag)",40,0.,4.);
469     hjets["DeltaPhiMETWlepm2j5b0"] = new TH1F("DeltaPhiMETWlepm2j5b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 5 jets & 0 btag)",32, -3.15, 3.15 );
470     hjets["trijetmassm2j5b0"] = new TH1F("trijetmassm2j5b0"+hname,"top mass (2 #mu & 5 jets & 0 btag)", 100, 0, 1000 );
471     hjets["trijetptm2j5b0"] = new TH1F("trijetptm2j5b0"+hname,"top p_{T} (2 #mu & 5 jets & 0 btag)", 50, 0, 500);
472     hjets["deltaRmindijetm2j5b0"] = new TH1F("deltaRmindijetm2j5b0"+hname,"min #DeltaR(j,j) (2 #mu & 5 jets & 0 btag)", 40,0.,4.);
473     hjets["deltaRmu2jetm2j5b0"] = new TH1F("deltaRmu2jetm2j5b0"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 5 jets & 0 btag)", 40,0.,4.);
474     hjets["deltaPhidijetm2j5b0"] = new TH1F("deltaPhidijetm2j5b0"+hname,"#Delta #phi(j,j) (2 #mu & 5 jets & 0 btag)", 32, -3.15, 3.15);
475     hjets["deltaPhimu2jetm2j5b0"] = new TH1F("deltaPhimu2jetm2j5b0"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 5 jets & 0 btag)", 32, -3.15, 3.15);
476     hjets["Stlepm2j5b0"] = new TH1F("Stlepm2j5b0"+hname,"S_{t}^{lep} (2 #mu & 5 jets & 0 btag)", 100, 0, 1000);
477     hjets["Htm2j5b0"] = new TH1F("Htm2j5b0"+hname,"H_{T} (2 #mu & 5 jets & 0 btag)", 125, 0, 2500);
478     hjets["Njetsm2j5b0"] = new TH1F("Njetsm2j5b0"+hname,"Njets (2 #mu & 5 jets & 0 btag)", 12,0.5,12.5);
479     hjets["Stjetm2j6b0"] = new TH1F("Stjetm2j6b0"+hname,"S_{T}^{jet} (2 #mu & #geq 6 jets & 0 btag)",70, 200, 3000 );
480     hjets["DeltaRdijetm2j6b0"] = new TH1F("DeltaRdijetm2j6b0"+hname,"#DeltaR(j,j) (2 #mu & #geq 6 jets & 0 btag)",40,0.,4.);
481     hjets["DeltaPhiMETWlepm2j6b0"] = new TH1F("DeltaPhiMETWlepm2j6b0"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & #geq 6 jets & 0 btag)",32, -3.15, 3.15 );
482     hjets["trijetmassm2j6b0"] = new TH1F("trijetmassm2j6b0"+hname,"top mass (2 #mu & #geq 6 jets & 0 btag)", 100, 0, 1000 );
483     hjets["trijetptm2j6b0"] = new TH1F("trijetptm2j6b0"+hname,"top p_{T} (2 #mu & #geq 6 jets & 0 btag)", 50, 0, 500);
484     hjets["deltaRmindijetm2j6b0"] = new TH1F("deltaRmindijetm2j6b0"+hname,"min #DeltaR(j,j) (2 #mu & #geq 6 jets & 0 btag)", 40,0.,4.);
485     hjets["deltaRmu2jetm2j6b0"] = new TH1F("deltaRmu2jetm2j6b0"+hname,"#DeltaR(#mu,2nd j) (2 #mu & #geq 6 jets & 0 btag)", 40,0.,4.);
486     hjets["deltaPhidijetm2j6b0"] = new TH1F("deltaPhidijetm2j6b0"+hname,"#Delta #phi(j,j) (2 #mu & #geq 6 jets & 0 btag)", 32, -3.15, 3.15);
487     hjets["deltaPhimu2jetm2j6b0"] = new TH1F("deltaPhimu2jetm2j6b0"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & #geq 6 jets & 0 btag)", 32, -3.15, 3.15);
488     hjets["Stlepm2j6b0"] = new TH1F("Stlepm2j6b0"+hname,"S_{t}^{lep} (2 #mu & #geq 6 jets & 0 btag)", 100, 0, 1000);
489     hjets["Htm2j6b0"] = new TH1F("Htm2j6b0"+hname,"H_{T} (2 #mu & #geq 6 jets & 0 btag)", 125, 0, 2500);
490     hjets["Njetsm2j6b0"] = new TH1F("Njetsm2j6b0"+hname,"Njets (2 #mu & #geq 6 jets & 0 btag)", 12,0.5,12.5);
491    
492    
493     hjets["Stjetm2j4b1"] = new TH1F("Stjetm2j4b1"+hname,"S_{T}^{jet} (2 #mu & 4 jets & 1 btag)",70, 200, 3000 );
494     hjets["DeltaRdijetm2j4b1"] = new TH1F("DeltaRdijetm2j4b1"+hname,"#DeltaR(j,j) (2 #mu & 4 jets & 1 btag)",40,0.,4.);
495     hjets["DeltaPhiMETWlepm2j4b1"] = new TH1F("DeltaPhiMETWlepm2j4b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 4 jets & 1 btag)",32, -3.15, 3.15 );
496     hjets["trijetmassm2j4b1"] = new TH1F("trijetmassm2j4b1"+hname,"top mass (2 #mu & 4 jets & 1 btag)", 100, 0, 1000 );
497     hjets["trijetptm2j4b1"] = new TH1F("trijetptm2j4b1"+hname,"top p_{T} (2 #mu & 4 jets & 1 btag)", 50, 0, 500);
498     hjets["deltaRmindijetm2j4b1"] = new TH1F("deltaRmindijetm2j4b1"+hname,"min #DeltaR(j,j) (2 #mu & 4 jets & 1 btag)", 40,0.,4.);
499     hjets["deltaRmu2jetm2j4b1"] = new TH1F("deltaRmu2jetm2j4b1"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 4 jets & 1 btag)", 40,0.,4.);
500     hjets["deltaPhidijetm2j4b1"] = new TH1F("deltaPhidijetm2j4b1"+hname,"#Delta #phi(j,j) (2 #mu & 4 jets & 1 btag)", 32, -3.15, 3.15);
501     hjets["deltaPhimu2jetm2j4b1"] = new TH1F("deltaPhimu2jetm2j4b1"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 4 jets & 1 btag)", 32, -3.15, 3.15);
502     hjets["Stlepm2j4b1"] = new TH1F("Stlepm2j4b1"+hname,"S_{t}^{lep} (2 #mu & 4 jets & 1 btag)", 100, 0, 1000);
503     hjets["Htm2j4b1"] = new TH1F("Htm2j4b1"+hname,"H_{T} (2 #mu & 4 jets & 1 btag)", 125, 0, 2500);
504     hjets["Njetsm2j4b1"] = new TH1F("Njetsm2j4b1"+hname,"Njets (2 #mu & 4 jets & 1 btag)", 12,0.5,12.5);
505     hjets["Stjetm2j5b1"] = new TH1F("Stjetm2j5b1"+hname,"S_{T}^{jet} (2 #mu & 5 jets & 1 btag)",70, 200, 3000 );
506     hjets["DeltaRdijetm2j5b1"] = new TH1F("DeltaRdijetm2j5b1"+hname,"#DeltaR(j,j) (2 #mu & 5 jets & 1 btag)",40,0.,4.);
507     hjets["DeltaPhiMETWlepm2j5b1"] = new TH1F("DeltaPhiMETWlepm2j5b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 5 jets & 1 btag)",32, -3.15, 3.15 );
508     hjets["trijetmassm2j5b1"] = new TH1F("trijetmassm2j5b1"+hname,"top mass (2 #mu & 5 jets & 1 btag)", 100, 0, 1000 );
509     hjets["trijetptm2j5b1"] = new TH1F("trijetptm2j5b1"+hname,"top p_{T} (2 #mu & 5 jets & 1 btag)", 50, 0, 500);
510     hjets["deltaRmindijetm2j5b1"] = new TH1F("deltaRmindijetm2j5b1"+hname,"min #DeltaR(j,j) (2 #mu & 5 jets & 1 btag)", 40,0.,4.);
511     hjets["deltaRmu2jetm2j5b1"] = new TH1F("deltaRmu2jetm2j5b1"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 5 jets & 1 btag)", 40,0.,4.);
512     hjets["deltaPhidijetm2j5b1"] = new TH1F("deltaPhidijetm2j5b1"+hname,"#Delta #phi(j,j) (2 #mu & 5 jets & 1 btag)", 32, -3.15, 3.15);
513     hjets["deltaPhimu2jetm2j5b1"] = new TH1F("deltaPhimu2jetm2j5b1"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 5 jets & 1 btag)", 32, -3.15, 3.15);
514     hjets["Stlepm2j5b1"] = new TH1F("Stlepm2j5b1"+hname,"S_{t}^{lep} (2 #mu & 5 jets & 1 btag)", 100, 0, 1000);
515     hjets["Htm2j5b1"] = new TH1F("Htm2j5b1"+hname,"H_{T} (2 #mu & 5 jets & 1 btag)", 125, 0, 2500);
516     hjets["Njetsm2j5b1"] = new TH1F("Njetsm2j5b1"+hname,"Njets (2 #mu & 5 jets & 1 btag)", 12,0.5,12.5);
517     hjets["Stjetm2j6b1"] = new TH1F("Stjetm2j6b1"+hname,"S_{T}^{jet} (2 #mu & #geq 6 jets & 1 btag)",70, 200, 3000 );
518     hjets["DeltaRdijetm2j6b1"] = new TH1F("DeltaRdijetm2j6b1"+hname,"#DeltaR(j,j) (2 #mu & #geq 6 jets & 1 btag)",40,0.,4.);
519     hjets["DeltaPhiMETWlepm2j6b1"] = new TH1F("DeltaPhiMETWlepm2j6b1"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & #geq 6 jets & 1 btag)",32, -3.15, 3.15 );
520     hjets["trijetmassm2j6b1"] = new TH1F("trijetmassm2j6b1"+hname,"top mass (2 #mu & #geq 6 jets & 1 btag)", 100, 0, 1000 );
521     hjets["trijetptm2j6b1"] = new TH1F("trijetptm2j6b1"+hname,"top p_{T} (2 #mu & #geq 6 jets & 1 btag)", 50, 0, 500);
522     hjets["deltaRmindijetm2j6b1"] = new TH1F("deltaRmindijetm2j6b1"+hname,"min #DeltaR(j,j) (2 #mu & #geq 6 jets & 1 btag)", 40,0.,4.);
523     hjets["deltaRmu2jetm2j6b1"] = new TH1F("deltaRmu2jetm2j6b1"+hname,"#DeltaR(#mu,2nd j) (2 #mu & #geq 6 jets & 1 btag)", 40,0.,4.);
524     hjets["deltaPhidijetm2j6b1"] = new TH1F("deltaPhidijetm2j6b1"+hname,"#Delta #phi(j,j) (2 #mu & #geq 6 jets & 1 btag)", 32, -3.15, 3.15);
525     hjets["deltaPhimu2jetm2j6b1"] = new TH1F("deltaPhimu2jetm2j6b1"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & #geq 6 jets & 1 btag)", 32, -3.15, 3.15);
526     hjets["Stlepm2j6b1"] = new TH1F("Stlepm2j6b1"+hname,"S_{t}^{lep} (2 #mu & #geq 6 jets & 1 btag)", 100, 0, 1000);
527     hjets["Htm2j6b1"] = new TH1F("Htm2j6b1"+hname,"H_{T} (2 #mu & #geq 6 jets & 1 btag)", 125, 0, 2500);
528     hjets["Njetsm2j6b1"] = new TH1F("Njetsm2j6b1"+hname,"Njets (2 #mu & #geq 6 jets & 1 btag)", 12,0.5,12.5);
529    
530     hjets["Stjetm2j4b2"] = new TH1F("Stjetm2j4b2"+hname,"S_{T}^{jet} (2 #mu & 4 jets & #geq 2 btag)",70, 200, 3000 );
531     hjets["DeltaRdijetm2j4b2"] = new TH1F("DeltaRdijetm2j4b2"+hname,"#DeltaR(j,j) (2 #mu & 4 jets & #geq 2 btag)",40,0.,4.);
532     hjets["DeltaPhiMETWlepm2j4b2"] = new TH1F("DeltaPhiMETWlepm2j4b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 4 jets & #geq 2 btag)",32, -3.15, 3.15 );
533     hjets["trijetmassm2j4b2"] = new TH1F("trijetmassm2j4b2"+hname,"top mass (2 #mu & 4 jets & #geq 2 btag)", 100, 0, 1000 );
534     hjets["trijetptm2j4b2"] = new TH1F("trijetptm2j4b2"+hname,"top p_{T} (2 #mu & 4 jets & #geq 2 btag)", 50, 0, 500);
535     hjets["deltaRmindijetm2j4b2"] = new TH1F("deltaRmindijetm2j4b2"+hname,"min #DeltaR(j,j) (2 #mu & 4 jets & #geq 2 btag)", 40,0.,4.);
536     hjets["deltaRmu2jetm2j4b2"] = new TH1F("deltaRmu2jetm2j4b2"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 4 jets & #geq 2 btag)", 40,0.,4.);
537     hjets["deltaPhidijetm2j4b2"] = new TH1F("deltaPhidijetm2j4b2"+hname,"#Delta #phi(j,j) (2 #mu & 4 jets & #geq 2 btag)", 32, -3.15, 3.15);
538     hjets["deltaPhimu2jetm2j4b2"] = new TH1F("deltaPhimu2jetm2j4b2"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 4 jets & #geq 2 btag)", 32, -3.15, 3.15);
539     hjets["Stlepm2j4b2"] = new TH1F("Stlepm2j4b2"+hname,"S_{t}^{lep} (2 #mu & 4 jets & #geq 2 btag)", 100, 0, 1000);
540     hjets["Htm2j4b2"] = new TH1F("Htm2j4b2"+hname,"H_{T} (2 #mu & 4 jets & #geq 2 btag)", 125, 0, 2500);
541     hjets["Njetsm2j4b2"] = new TH1F("Njetsm2j4b2"+hname,"Njets (2 #mu & 4 jets & #geq 2 btag)", 12,0.5,12.5);
542     hjets["Stjetm2j5b2"] = new TH1F("Stjetm2j5b2"+hname,"S_{T}^{jet} (2 #mu & 5 jets & #geq 2 btag)",70, 200, 3000 );
543     hjets["DeltaRdijetm2j5b2"] = new TH1F("DeltaRdijetm2j5b2"+hname,"#DeltaR(j,j) (2 #mu & 5 jets & #geq 2 btag)",40,0.,4.);
544     hjets["DeltaPhiMETWlepm2j5b2"] = new TH1F("DeltaPhiMETWlepm2j5b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & 5 jets & #geq 2 btag)",32, -3.15, 3.15 );
545     hjets["trijetmassm2j5b2"] = new TH1F("trijetmassm2j5b2"+hname,"top mass (2 #mu & 5 jets & #geq 2 btag)", 100, 0, 1000 );
546     hjets["trijetptm2j5b2"] = new TH1F("trijetptm2j5b2"+hname,"top p_{T} (2 #mu & 5 jets & #geq 2 btag)", 50, 0, 500);
547     hjets["deltaRmindijetm2j5b2"] = new TH1F("deltaRmindijetm2j5b2"+hname,"min #DeltaR(j,j) (2 #mu & 5 jets & #geq 2 btag)", 40,0.,4.);
548     hjets["deltaRmu2jetm2j5b2"] = new TH1F("deltaRmu2jetm2j5b2"+hname,"#DeltaR(#mu,2nd j) (2 #mu & 5 jets & #geq 2 btag)", 40,0.,4.);
549     hjets["deltaPhidijetm2j5b2"] = new TH1F("deltaPhidijetm2j5b2"+hname,"#Delta #phi(j,j) (2 #mu & 5 jets & #geq 2 btag)", 32, -3.15, 3.15);
550     hjets["deltaPhimu2jetm2j5b2"] = new TH1F("deltaPhimu2jetm2j5b2"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & 5 jets & #geq 2 btag)", 32, -3.15, 3.15);
551     hjets["Stlepm2j5b2"] = new TH1F("Stlepm2j5b2"+hname,"S_{t}^{lep} (2 #mu & 5 jets & #geq 2 btag)", 100, 0, 1000);
552     hjets["Htm2j5b2"] = new TH1F("Htm2j5b2"+hname,"H_{T} (2 #mu & 5 jets & #geq 2 btag)", 125, 0, 2500);
553     hjets["Njetsm2j5b2"] = new TH1F("Njetsm2j5b2"+hname,"Njets (2 #mu & 5 jets & #geq 2 btag)", 12,0.5,12.5);
554     hjets["Stjetm2j6b2"] = new TH1F("Stjetm2j6b2"+hname,"S_{T}^{jet} (2 #mu & #geq 6 jets & #geq 2 btag)",70, 200, 3000 );
555     hjets["DeltaRdijetm2j6b2"] = new TH1F("DeltaRdijetm2j6b2"+hname,"#DeltaR(j,j) (2 #mu & #geq 6 jets & #geq 2 btag)",40,0.,4.);
556     hjets["DeltaPhiMETWlepm2j6b2"] = new TH1F("DeltaPhiMETWlepm2j6b2"+hname,"#Delta #phi(MET,W(#mu,#nu)) (2 #mu & #geq 6 jets & #geq 2 btag)",32, -3.15, 3.15 );
557     hjets["trijetmassm2j6b2"] = new TH1F("trijetmassm2j6b2"+hname,"top mass (2 #mu & #geq 6 jets & #geq 2 btag)", 100, 0, 1000 );
558     hjets["trijetptm2j6b2"] = new TH1F("trijetptm2j6b2"+hname,"top p_{T} (2 #mu & #geq 6 jets & #geq 2 btag)", 50, 0, 500);
559     hjets["deltaRmindijetm2j6b2"] = new TH1F("deltaRmindijetm2j6b2"+hname,"min #DeltaR(j,j) (2 #mu & #geq 6 jets & #geq 2 btag)", 40,0.,4.);
560     hjets["deltaRmu2jetm2j6b2"] = new TH1F("deltaRmu2jetm2j6b2"+hname,"#DeltaR(#mu,2nd j) (2 #mu & #geq 6 jets & #geq 2 btag)", 40,0.,4.);
561     hjets["deltaPhidijetm2j6b2"] = new TH1F("deltaPhidijetm2j6b2"+hname,"#Delta #phi(j,j) (2 #mu & #geq 6 jets & #geq 2 btag)", 32, -3.15, 3.15);
562     hjets["deltaPhimu2jetm2j6b2"] = new TH1F("deltaPhimu2jetm2j6b2"+hname,"#Delta #phi(#mu,2nd j) (2 #mu & #geq 6 jets & #geq 2 btag)", 32, -3.15, 3.15);
563     hjets["Stlepm2j6b2"] = new TH1F("Stlepm2j6b2"+hname,"S_{t}^{lep} (2 #mu & #geq 6 jets & #geq 2 btag)", 100, 0, 1000);
564     hjets["Htm2j6b2"] = new TH1F("Htm2j6b2"+hname,"H_{T} (2 #mu & #geq 6 jets & #geq 2 btag)", 125, 0, 2500);
565     hjets["Njetsm2j6b2"] = new TH1F("Njetsm2j6b2"+hname,"Njets (2 #mu & #geq 6 jets & #geq 2 btag)", 12,0.5,12.5);
566    
567 algomez 1.16 hjets["Stjet41"] = new TH1F("Stjet41"+hname,"#geq 4 jets, Stjet < 1000", 60, 400, 1000 );
568     hjets["Stjet51"] = new TH1F("Stjet51"+hname,"#geq 5 jets, Stjet < 1000", 60, 400, 1000 );
569     hjets["Stjet61"] = new TH1F("Stjet61"+hname,"#geq 6 jets, Stjet < 1000", 60, 400, 1000 );
570     hjets["Stjet42"] = new TH1F("Stjet42"+hname,"#geq 4 jets, Stjet > 1000", 50, 1000, 3000 );
571     hjets["Stjet52"] = new TH1F("Stjet52"+hname,"#geq 5 jets, Stjet > 1000", 50, 1000, 3000 );
572     hjets["Stjet62"] = new TH1F("Stjet62"+hname,"#geq 6 jets, Stjet > 1000", 50, 1000, 3000 );
573 algomez 1.8
574 algomez 1.1
575     map<string,TH1* > allhistos = hmuons;
576     allhistos.insert( helectrons.begin(), helectrons.end() );
577     allhistos.insert( hMET.begin(), hMET.end() );
578     allhistos.insert( hM.begin(), hM.end() );
579     allhistos.insert( hjets.begin(), hjets.end() );
580    
581     for ( map<string,TH1* >::const_iterator imap=allhistos.begin(); imap!=allhistos.end(); ++imap )
582     {
583     TH1 *temp = imap->second;
584     temp->Sumw2();
585     temp->SetXTitle( temp->GetTitle() );
586     }
587    
588 algomez 1.13 //------- Store information in a Tree
589     MyStoreTree = new StoreTreeVariable();
590    
591     if(fChannel == 1){
592     MyStoreTree->SetElectronFalse();
593     //MyStoreTree->SetJetFalse();
594     MyStoreTree->SetVertexFalse();
595     MyStoreTree->SetTriggerFalse();
596     //MyStoreTree->SetMetFalse();
597 algomez 1.17 //MyStoreTree->SetMuonFalse();
598 algomez 1.13 }
599    
600     MyStoreTree->InitialAll();
601     //Get the Store Tree
602     MyStoreTree->GetStoreTree()->SetDirectory(fFile);
603     MyStoreTree->GetStoreTree()->AutoSave();
604     //////////////////////////////////////////
605    
606 algomez 1.1 // cut flow
607     if (fChannel==1)
608     { //muon +jets
609     fCutLabels.push_back("Processed");
610     fCutLabels.push_back("OneIsoMu");
611 algomez 1.16 fCutLabels.push_back("LooseMuVeto");
612 algomez 1.17 //fCutLabels.push_back("ZMassVeto");
613 algomez 1.1 fCutLabels.push_back("ElectronVeto");
614 algomez 1.16 fCutLabels.push_back("MET");
615 algomez 1.13 fCutLabels.push_back("4Jet");
616 algomez 1.12 fCutLabels.push_back("Ht");
617 algomez 1.15 fCutLabels.push_back("4Jet0b");
618 algomez 1.13 fCutLabels.push_back("4Jet1b");
619 algomez 1.14 fCutLabels.push_back("4JetCut");
620     fCutLabels.push_back("Stjet");
621 algomez 1.1 }
622     else
623     { //electron+jets
624     }
625     hcutflow = new TH1D("cutflow","cut flow", fCutLabels.size(), 0.5, fCutLabels.size() +0.5 );
626    
627     for ( vector<string>::const_iterator ivec= fCutLabels.begin(); ivec!=fCutLabels.end(); ++ivec)
628     {
629     cutmap[ *ivec ] = 0;
630     }
631    
632 algomez 1.9
633 algomez 1.15 if(fIsMC){
634 algomez 1.17 LumiWeights_ = edm::Lumi3DReWeighting("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/PUMC_dist.root",
635     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/NewPileUp/MyCert_160404_180252_pileupTruth_finebin.root",
636     "pileup",
637     "pileup",
638     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Weight_3Dnew.root");
639     LumiWeights_.weight3D_init( 1.08 );
640     LumiWeightsup_ = edm::Lumi3DReWeighting("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/PUMC_dist.root",
641     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/NewPileUp/MyCert_160404_180252_pileupTruth_finebin.root",
642     "pileup",
643     "pileup",
644     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Weight_3Dup.root");
645     LumiWeightsup_.weight3D_init( 1.167 );//up
646     LumiWeightsdown_ = edm::Lumi3DReWeighting("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/PUMC_dist.root",
647     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/NewPileUp/MyCert_160404_180252_pileupTruth_finebin.root",
648     "pileup",
649     "pileup",
650     "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Weight_3Ddown.root");
651     LumiWeightsdown_.weight3D_init( 0.994 );//down
652 algomez 1.15 }
653    
654     //btag efficiency file and 2D histogram
655     TString btagefffilename = "/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/BtagEff.root";
656     btagefffile = new TFile(btagefffilename,"read");
657     //ttbar
658     f2Dttbarbtag = (TH2D*) btagefffile->Get("ttbar_csv_btageff");
659     f2Dttbarctag = (TH2D*) btagefffile->Get("ttbar_csv_ctageff");
660     f2Dttbarlighttag = (TH2D*) btagefffile->Get("ttbar_csv_lighttageff");
661    
662     // For JEC uncertainties
663     JetCorrectorParameters *jcp = new JetCorrectorParameters("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/JEC11_V10_AK5PF_UncertaintySources.txt","Total");
664     if (fdoJECunc) fJECunc = new JetCorrectionUncertainty( *jcp );
665    
666     //Medium
667     bSF_table.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_beff_SF.txt");
668     bSF_table_error.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_beff_SF_Error.txt");
669     lSF_table.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_lmistag_SF.txt");
670     lSF_table_error_down.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_lmistag_SF_Error_Down.txt");
671     lSF_table_error_up.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_lmistag_SF_Error_Up.txt");
672     leff_table.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVM_lmistag_Eff.txt");
673    
674     //Loose
675     bSF_table_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_beff_SF.txt");
676     bSF_table_error_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_beff_SF_Error.txt");
677     lSF_table_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_lmistag_SF.txt");
678     lSF_table_error_down_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_lmistag_SF_Error_Down.txt");
679     lSF_table_error_up_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_lmistag_SF_Error_Up.txt");
680     leff_table_loose.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVL_lmistag_Eff.txt");
681    
682     //Tight
683     bSF_table_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_beff_SF.txt");
684     bSF_table_error_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_beff_SF_Error.txt");
685     lSF_table_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_lmistag_SF.txt");
686     lSF_table_error_down_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_lmistag_SF_Error_Down.txt");
687     lSF_table_error_up_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_lmistag_SF_Error_Up.txt");
688     leff_table_tight.LoadTable("/uscms/home/weizou/work/NtupleMaker/CMSSW_4_2_4/src/Yumiceva/TreeAnalyzer/test_4top/Table_CSVT_lmistag_Eff.txt");
689 algomez 1.1 }
690    
691     Bool_t Analyzer::Process(Long64_t entry)
692     {
693     // The Process() function is called for each entry in the tree (or possibly
694     // keyed object in the case of PROOF) to be processed. The entry argument
695     // specifies which entry in the currently loaded tree is to be processed.
696     // It can be passed to either Analyzer::GetEntry() or TBranch::GetEntry()
697     // to read either all or the required parts of the data. When processing
698     // keyed objects with PROOF, the object is already loaded and is available
699     // via the fObject pointer.
700     //
701     // This function should contain the "body" of the analysis. It can contain
702     // simple or elaborate selection criteria, run algorithms on the data
703     // of the event and typically fill histograms.
704     //
705     // The processing can be stopped by calling Abort().
706     //
707     // Use fStatus to set the return value of TTree::Process().
708     //
709     // The return value is currently not used.
710    
711     //TString option = GetOption();
712    
713 algomez 1.13 //if ( entry % 100 == 0 )
714     //cout<< "process entry " << entry << endl;
715 algomez 1.1
716     //TString sEntry = Form("%f", float(entry) );
717     // Info("Process",
718     //"entry # %s", Form("%f", float(entry) ) );
719    
720     //fChain->GetTree()->GetEntry(entry);
721     fChain->GetEntry(entry);
722    
723     //if (entry>10) return kTRUE;
724    
725     // event info
726     //cout << "run: " << ntuple->run << " lumi: " << ntuple->lumi << endl;
727    
728     // get collections
729     vector< TopVertexEvent > primaryVertices = ntuple->vertices;
730     vector< TopMuonEvent > muons = ntuple->muons;
731 algomez 1.2 vector< TopElectronEvent > electrons = ntuple->PFelectrons; // use PF electrons (gsf collection is called "electrons")
732 algomez 1.1 vector< TopJetEvent > jets = ntuple->PFjets;
733    
734 algomez 1.2 // USE PF Isolation
735     fMuSelector.UsePFIsolation(true);
736     fEleSelector.UsePFIsolation(true);
737    
738 algomez 1.1 size_t total_pvs = primaryVertices.size();
739     size_t total_muons = muons.size();
740     size_t total_electrons = electrons.size();
741     size_t total_jets = jets.size();
742    
743     float PVz = 0.;
744     TLorentzVector p4muon, p4ele, p4lepton, p4MET;
745     TLorentzVector p4Nu, p4OtherNu;
746     TLorentzVector p4QCDmuon;
747    
748     vector< TLorentzVector > p4jets;
749 algomez 1.15 vector< TLorentzVector > p4bjetscsvl;
750     vector< TLorentzVector > p4bjetscsvm;
751 algomez 1.6 vector< TLorentzVector > p4Othermuon; // leading muon
752 algomez 1.1
753 algomez 1.13 // FILTER OUT DATA events
754     int testrun = ntuple->run;
755     if ( fSample =="data" && ( testrun == 176765 || testrun == 176771 || testrun == 176795 || testrun == 176796 || testrun == 176545 || testrun == 176547 || testrun == 176928 || testrun == 176982 ) ) return kTRUE;
756     if ( fSample =="dataMissing" && ( testrun != 176765 && testrun != 176771 && testrun != 176795 && testrun != 176796 && testrun != 176545 && testrun != 176547 && testrun != 176928 && testrun != 176982 ) ) return kTRUE;
757    
758    
759 algomez 1.2 ////////////////////
760     // GENERATOR
761     ///////////////////
762 algomez 1.17 if (fIsMC && fSample.Contains("tttt") )
763 algomez 1.2 {
764     TLorentzVector p4genLepton;
765     TLorentzVector p4genNu;
766     TLorentzVector p4genb;
767     if (ntuple->gen.bLep_pt>0)
768     {
769     p4genLepton.SetPtEtaPhiE(ntuple->gen.mu_pt,ntuple->gen.mu_eta,ntuple->gen.mu_phi,ntuple->gen.mu_e);
770     p4genNu.SetPtEtaPhiE(ntuple->gen.nu_pt,ntuple->gen.nu_eta,ntuple->gen.nu_phi,ntuple->gen.nu_e);
771     p4genb.SetPtEtaPhiE(ntuple->gen.bLep_pt,ntuple->gen.bLep_eta,ntuple->gen.bLep_phi,ntuple->gen.bLep_e);
772    
773     hjets["gen_deltaR_mub"]->Fill( p4genLepton.DeltaR( p4genb ) );
774     }
775     }
776 algomez 1.15
777     //////////Seperate the Wbb, Wcc and Wlight///////////////////////////
778     //before the selection, We should seperate the samples
779     //if(fSample.Contains("WJets"))
780     if(fSample.Contains("Wbb") && !fSample.Contains("Wbbpartonflavor") )
781     {
782     int FH = ntuple->flavorHistory;
783     if(FH != 1 && FH!= 2 && FH != 5 && FH != 7 && FH != 9)
784     return kTRUE;
785     }
786    
787     if(fSample.Contains("Wcc") && !fSample.Contains("Wccpartonflavor") )
788     {
789     int FH = ntuple->flavorHistory;
790     if(FH != 3 && FH != 4 && FH !=6 && FH !=8 && FH != 10)
791     return kTRUE;
792     }
793    
794     if(fSample.Contains("Wlight") && !fSample.Contains("Wlightpartonflavor") )
795     {
796     int FH = ntuple->flavorHistory;
797     //if(FH != 11) //Wlight = Wjet - Wcc - Wbb
798     if(FH == 1 || FH == 2 || FH == 5 || FH == 7 || FH == 9 || FH == 3 || FH == 4 || FH ==6 || FH ==8 || FH == 10)
799     return kTRUE;
800     }
801    
802     int numberb = 0;
803     int numberc = 0;
804     int numberl = 0;
805    
806     for ( size_t ijet=0; ijet < total_jets; ++ijet)
807     {
808     TopJetEvent jet = jets[ijet];
809     int listflavor = jet.mc.flavor;
810     if(abs(listflavor) == 5){numberb++;}
811     if(abs(listflavor) == 4){numberc++;}
812     if(abs(listflavor) == 1 || abs(listflavor) == 2 || abs(listflavor) == 3 || abs(listflavor) == 21){numberl++;}
813    
814     }
815    
816     //begin this we are using the jet parton flovar to determine the Wbb Wcc and Wlight
817     if(fSample.Contains("Wlightpartonflavor"))
818     {
819     if((numberb > 0 || numberc > 0))
820     return kTRUE;
821     }
822    
823     if(fSample.Contains("Wccpartonflavor"))
824     {
825     if(numberc == 0 || numberb > 0 )
826     return kTRUE;
827     }
828    
829     if(fSample.Contains("Wbbpartonflavor"))
830     {
831     if(numberb == 0)
832     return kTRUE;
833     }
834    
835     //////////Seperate the Wbb, Wcc and Wlight///////////////////////////
836 algomez 1.1 ////////////////////////////////////
837     // PRIMARY VERTICES
838     ///////////////////////////////////
839    
840 algomez 1.15 Int_t npvs = 0;
841 algomez 1.6 for ( size_t ipv=0; ipv < total_pvs; ++ipv)
842     {
843     if (ipv==0) PVz = primaryVertices[ipv].vz;
844 algomez 1.15 if (primaryVertices[ipv].IsGood == 1) {
845     npvs++;
846     }
847 algomez 1.6 }
848 algomez 1.1
849    
850 algomez 1.15 Double_t PUweight = 1.;
851 algomez 1.2
852 algomez 1.17 if(fIsMC && !fSample.Contains("tttt")){
853 algomez 1.13
854 algomez 1.15 Int_t mc_npvminus1 = ntuple->gen.Bx_minus1;
855     Int_t mc_npv0 = ntuple->gen.Bx_0;
856     Int_t mc_npvplus1 = ntuple->gen.Bx_plus1;
857    
858     PUweight = LumiWeights_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
859 algomez 1.17 if (fpu_down) PUweight = LumiWeightsdown_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
860     if (fpu_up) PUweight = LumiWeightsup_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
861 algomez 1.15 //PUweight = 1.0;//This is just for test_4top
862     }
863    
864 algomez 1.17 if(fIsMC && fSample.Contains("tttt")){
865 algomez 1.1
866 algomez 1.15 Int_t mc_npvminus1 = ntuple->gen.Bx_0;
867     Int_t mc_npv0 = ntuple->gen.Bx_0;
868     Int_t mc_npvplus1 = ntuple->gen.Bx_0;
869    
870     PUweight = LumiWeights_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
871 algomez 1.17 if (fpu_down) PUweight = LumiWeightsdown_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
872     if (fpu_up) PUweight = LumiWeightsup_.weight3D(mc_npvminus1,mc_npv0,mc_npvplus1);
873 algomez 1.15 //PUweight = 1.0;//This is just for test_4top
874     }
875 algomez 1.5
876 algomez 1.2 /////////////
877     // HLT scale factor for MC
878     ////////////
879     double SF_hlt = 1.;
880 algomez 1.9 if (fIsMC) SF_hlt = 0.97; //0.966;
881     double SF_iso = 1.;
882     if (fIsMC) SF_iso = 0.996;
883     PUweight = PUweight*SF_hlt*SF_iso; // LETS INCLUDE THE TRIGGER SF INTO THE PU WEIGHTS
884    
885 algomez 1.16 hPVs["Nreweight_cut0"]->Fill( total_pvs, PUweight );
886 algomez 1.13
887 algomez 1.9 //TEMP
888     //PUweight = 1.;
889 algomez 1.2
890 algomez 1.1 cutmap["Processed"] += PUweight;
891    
892     if (fVerbose) cout << "done pv" << endl;
893 algomez 1.6
894 algomez 1.1 //////////////////////////////////
895     // MUONS
896     //////////////////////////////////
897 algomez 1.2 int ngoodIDmuons = 0;
898 algomez 1.1 int nloosemuons = 0;
899     int ntightmuons = 0;
900     int nqcdmuons = 0;
901 algomez 1.9 int nmuonID[8] = {0};
902 algomez 1.1
903 algomez 1.17 //bool IsZevent = false;
904    
905 algomez 1.1 double RelIso = -1.;
906     double deltaR = -1.;
907     double QCDRelIso = -1.;
908     double QCDdeltaR = -1;
909    
910     for ( size_t imu=0; imu < total_muons; ++imu) {
911    
912 algomez 1.6 TopMuonEvent muon = muons[imu];
913 algomez 1.9
914 algomez 1.6 h1test->Fill( muon.pt );
915 algomez 1.9
916     if (muon.pt > 32. && fabs(muon.eta)<2.1 && muon.IsTrackerMuon==1 ) {
917     nmuonID[0] += 1;
918     if (fabs(muon.d0)<0.02 ) {
919     nmuonID[1] += 1;
920     if (muon.trackerhits>=11 ) {
921     nmuonID[2] += 1;
922     if (muon.normchi2<10 ) {
923     nmuonID[3] +=1;
924     if (muon.muonhits>0 ) {
925     nmuonID[4] += 1;
926     if (muon.pixelhits >= 1 ) {
927     nmuonID[5] += 1;
928     if (muon.muonstations > 1 ) {
929     nmuonID[6] +=1;
930     if (fabs(muon.vz - PVz) < 1.) {
931     nmuonID[7] +=1;
932     }
933     }
934     }
935     }
936     }
937     }
938     }
939     }
940 algomez 1.6
941     if ( fMuSelector.MuonID( muon, PVz ) ) ngoodIDmuons++;
942 algomez 1.9
943 algomez 1.6 // select only good muons
944 algomez 1.9
945 algomez 1.6 if ( fMuSelector.MuonLoose( muon ) ) {
946 algomez 1.9
947 algomez 1.6 nloosemuons++;
948 algomez 1.9
949 algomez 1.15 if ( fMuSelector.MuonTight( muon, PVz) ) hmuons["charge_tiso"]->Fill( muon.charge, PUweight );
950 algomez 1.6 //hmuons["N_tisomuons"]->Fill( nloosemuons );
951     if ( fMuSelector.MuonTightDeltaR( muon, PVz, jets) ) {
952     ntightmuons++;
953     deltaR = fMuSelector.GetDeltaR();
954     }
955 algomez 1.1
956 algomez 1.17
957 algomez 1.6 p4muon.SetPtEtaPhiE( muon.pt, muon.eta, muon.phi, muon.e );
958 algomez 1.17 p4Othermuon.push_back( p4muon ); // for leading muon
959 algomez 1.6 RelIso = muon.pfreliso; //muon.reliso03;
960 algomez 1.9 }
961 algomez 1.4
962 algomez 1.6 // check muon in QCD control region
963     if ( fMuSelector.MuonRelax02IsoQCD( muon, PVz, jets ) ) {
964     nqcdmuons++;
965 algomez 1.9
966 algomez 1.6 // keep the leading muon for selection
967     if (nqcdmuons==1) {
968     p4QCDmuon.SetPtEtaPhiE( muon.pt, muon.eta, muon.phi, muon.e );
969     QCDRelIso = muon.pfreliso; //muon.reliso03;
970     QCDdeltaR = fMuSelector.GetDeltaR();
971     }
972 algomez 1.1 }
973 algomez 1.6 }
974 algomez 1.1
975 algomez 1.6 if (fVerbose) cout << "done muons" << endl;
976 algomez 1.1
977     //////////////////////////////////
978     // ELECTRONS
979     //////////////////////////////////
980     int nlooseelectrons = 0;
981     int ntightelectrons = 0;
982     bool IsConversion = false;
983    
984     for ( size_t iele=0; iele < total_electrons; ++iele) {
985    
986 algomez 1.6 TopElectronEvent electron = electrons[iele];
987 algomez 1.1
988 algomez 1.6 if ( fEleSelector.ElectronLoose(electron) ) nlooseelectrons++;
989 algomez 1.1
990 algomez 1.6 if ( fEleSelector.ElectronTight(electron, PVz ) ) {
991 algomez 1.1
992 algomez 1.6 if (ntightelectrons == 0) {
993     IsConversion = electron.IsConversion;
994     p4ele.SetPtEtaPhiE( electron.pt, electron.eta, electron.phi, electron.e );
995 algomez 1.12 /*helectrons["pt_cut2"]->Fill( p4ele.Pt(), PUweight );
996 algomez 1.6 helectrons["eta_cut2"]->Fill( p4ele.Eta(), PUweight );
997 algomez 1.12 helectrons["phi_cut2"]->Fill( p4ele.Phi(), PUweight );*/
998 algomez 1.6 }
999     ntightelectrons++;
1000     }
1001 algomez 1.1 }
1002     if (fVerbose) cout << "done electron" << endl;
1003    
1004 algomez 1.6 /////////////////////////////////////
1005     // MUON/ELECTRON + JETS
1006     /////////////////////////////////////
1007 algomez 1.1
1008 algomez 1.6 if ( fChannel == 1 ) {
1009 algomez 1.1
1010 algomez 1.6 if (fdoQCD2SideBand) {
1011 algomez 1.1
1012 algomez 1.6 if (nqcdmuons == 0) return kTRUE;
1013     cutmap["OneIsoMu"] += PUweight;
1014 algomez 1.1
1015 algomez 1.6 p4lepton = p4QCDmuon;
1016     RelIso = QCDRelIso;
1017     deltaR = QCDdeltaR;
1018     }
1019     else {
1020 algomez 1.2
1021 algomez 1.6 if ( ngoodIDmuons > 0 ) hmuons["Ngood"]->Fill( total_pvs, PUweight);
1022     if ( ntightmuons > 0 ) hmuons["Niso"]->Fill( total_pvs, PUweight);
1023 algomez 1.16
1024 algomez 1.17 //if ( ntightmuons != 2 ) return kTRUE;
1025 algomez 1.6 if ( ntightmuons != 1 ) return kTRUE;
1026 algomez 1.16 //if ( ntightmuons < 1 ) return kTRUE;
1027 algomez 1.6 cutmap["OneIsoMu"] += PUweight;
1028 algomez 1.2
1029 algomez 1.6 if ( nloosemuons > 1 ) return kTRUE;
1030 algomez 1.17 //if ( nloosemuons > 2 ) return kTRUE;
1031 algomez 1.16 cutmap["LooseMuVeto"] += PUweight;
1032     hmuons["N0"]->Fill( total_muons, PUweight );
1033 algomez 1.1
1034 algomez 1.6 if ( nlooseelectrons > 0 ) return kTRUE;
1035 algomez 1.16 hmuons["Nelectrons_cut0"]->Fill( nlooseelectrons, PUweight );
1036 algomez 1.6 cutmap["ElectronVeto"] += PUweight;
1037 algomez 1.1
1038 algomez 1.17 /*
1039     TLorentzVector zboson = p4Othermuon[0] + p4Othermuon[1];
1040     double zbosonmass = zboson.M();
1041     if ( abs(zbosonmass - 91.2 ) < 10.0) IsZevent = true;
1042     if (IsZevent) return kTRUE;
1043     cutmap["ZMassVeto"] += PUweight;*/
1044    
1045 algomez 1.6 p4lepton = p4muon;
1046     if (fVerbose) cout << "got a good lepton" << endl;
1047     }
1048    
1049 algomez 1.16
1050     hmuons["pt_cut0"]->Fill( p4lepton.Pt(), PUweight );
1051     hmuons["eta_cut0"]->Fill( p4lepton.Eta(), PUweight );
1052     hmuons["phi_cut0"]->Fill( p4lepton.Phi(), PUweight );
1053 algomez 1.6 hmuons["reliso"]->Fill( RelIso, PUweight );
1054 algomez 1.16 hmuons["deltaR_cut0"]->Fill( deltaR, PUweight );
1055 algomez 1.1
1056 algomez 1.6 }
1057 algomez 1.1 else // electron+jets
1058     {
1059     // pending ...
1060     }
1061    
1062     if (fVerbose) cout << "done lepton selection " << endl;
1063    
1064     /////////////////////////////////
1065 algomez 1.6 // MET + Ht
1066 algomez 1.1 /////////////////////////////////
1067    
1068     p4MET.SetPtEtaPhiE( ntuple->PFMET,
1069     0.,
1070     ntuple->PFMETphi,
1071     ntuple->PFMET );
1072    
1073     //temporal check using genMET
1074     //p4MET.SetPtEtaPhiE( ntuple->gen.MET,
1075     // 0.,
1076     // ntuple->gen.METPhi,
1077     // ntuple->gen.MET );
1078    
1079 algomez 1.16 //if (fdoQCD1SideBand && p4MET.Et() > 20.) return kTRUE;
1080     //else if ( p4MET.Et() <= 20. && fdoQCD2SideBand==false ) return kTRUE;
1081 algomez 1.17 // if ( p4MET.Et() <= 20.) return kTRUE;
1082     // if (fVerbose) cout << "pass MET cut" << endl;
1083 algomez 1.1
1084    
1085     //cutmap["MET"] += PUweight;
1086 algomez 1.16 hMET["MET_cut0"]->Fill( p4MET.Pt(), PUweight );
1087     hMET["phi_cut0"]->Fill( p4MET.Phi(), PUweight );
1088 algomez 1.6
1089 algomez 1.1
1090     double Wpt = p4lepton.Pt() + p4MET.Pt();
1091     double Wpx = p4lepton.Px() + p4MET.Px();
1092     double Wpy = p4lepton.Py() + p4MET.Py();
1093     double WMt = sqrt(Wpt*Wpt-Wpx*Wpx-Wpy*Wpy);
1094 algomez 1.16 hM["WMt_cut0"]->Fill( WMt, PUweight );
1095 algomez 1.3
1096 algomez 1.1
1097     /////////////////////////////////
1098     // JETS
1099     ////////////////////////////////
1100    
1101 algomez 1.6 //JetCombinatorics myCombi = JetCombinatoric();
1102 algomez 1.1
1103     int njets = 0;
1104 algomez 1.8 MyStoreTree->GetJetVariable()->numjets = 0;
1105 algomez 1.11 MyStoreTree->GetJetVariable()->numBjets_csvl = 0;
1106 algomez 1.14 MyStoreTree->GetJetVariable()->numBjets_csvm = 0;
1107 algomez 1.15 MyStoreTree->GetJetVariable()->numBjets_csvt = 0;
1108 algomez 1.13
1109 algomez 1.1 map< string, vector<float> > bdisc;
1110     map< string, vector<bool> > isTagb;
1111 algomez 1.9 map< string, vector<bool> > isTagbUp;
1112     map< string, vector<bool> > isTagbDown;
1113 algomez 1.1 vector<int> listflavor;
1114 algomez 1.8
1115 algomez 1.13 Float_t metcorpx = p4MET.Px();
1116     Float_t metcorpy = p4MET.Py();
1117     Float_t totJERptadd = 0.;
1118     Float_t totJERptminus = 0;
1119    
1120     vector< TopJetEvent > tmp_corrjets;
1121 algomez 1.1
1122 algomez 1.17 ////////////////////////////////
1123     ///// JES, JER
1124     //////////////////////////////
1125 algomez 1.6 for ( size_t ijet=0; ijet < total_jets; ++ijet) {
1126 algomez 1.1
1127 algomez 1.6 TopJetEvent jet = jets[ijet];
1128     double SF_JEC = 1.;
1129 algomez 1.13
1130     //JER
1131     Float_t factor = 1.0;
1132     Float_t ptscale = 1.0;
1133    
1134 algomez 1.6 if (fdoJECunc){
1135 algomez 1.13
1136     metcorpx = metcorpx + jet.uncorrpx;
1137     metcorpy = metcorpy + jet.uncorrpy;
1138    
1139 algomez 1.6 fJECunc->setJetEta( jet.eta);
1140     fJECunc->setJetPt( jet.pt);
1141 algomez 1.13 double jec_unc = 0.;
1142     if (fdoJECup) jec_unc = fJECunc->getUncertainty(true);
1143     if (!fdoJECup) jec_unc = fJECunc->getUncertainty(false);
1144 algomez 1.6 if (fVerbose) cout << "JEC uncertainty is " << jec_unc << endl;
1145     if (fdoJECup) SF_JEC = 1.+jec_unc;
1146     else SF_JEC = 1.-jec_unc;
1147 algomez 1.13
1148     metcorpx = metcorpx - jet.uncorrpx * SF_JEC;
1149     metcorpy = metcorpy - jet.uncorrpy * SF_JEC;
1150     }
1151    
1152     if(fIsMC && fdoJERunc) {
1153     if(fdoJERunc && !fdoJERup && !fdoJERdown){
1154     if(fabs(jet.eta) < 1.5) factor = 0.1;
1155     if(fabs(jet.eta) >= 1.5 && fabs(jet.eta) < 2.0) factor = 0.1;
1156     if(fabs(jet.eta) >= 2.0) factor = 0.1;
1157     }
1158    
1159     if(fdoJERunc && fdoJERup){
1160     if(fabs(jet.eta) < 1.5) factor = 0.2;
1161     if(fabs(jet.eta) >= 1.5 && fabs(jet.eta) < 2.0) factor = 0.25;
1162     if(fabs(jet.eta) >= 2.0) factor = 0.3;
1163     }
1164    
1165     if(fdoJERunc && fdoJERdown){
1166     if(fabs(jet.eta) < 1.5) factor = 0.0;
1167     if(fabs(jet.eta) >= 1.5 && fabs(jet.eta) < 2.0) factor = -0.05;
1168     if(fabs(jet.eta) >= 2.0) factor = -0.1;
1169     }
1170    
1171     //if (jet.mc.pt < 15) continue;
1172     if (jet.mc.pt >= 15 ) {
1173     metcorpx += jet.uncorrpx;
1174     metcorpy += jet.uncorrpy;
1175     totJERptadd += TMath::Sqrt(jet.uncorrpx*jet.uncorrpx + jet.uncorrpy*jet.uncorrpy);
1176    
1177     //if ( ntuple->run == 1 && ntuple->lumi == 4 && ntuple->event == 3611988 ) {
1178     // TString outstring = "Add:";
1179     // outstring += TString(Form("%f", TMath::Sqrt(jet.uncorrpx*jet.uncorrpx + jet.uncorrpy*jet.uncorrpy) ));
1180     // Info("MET", outstring);
1181     //}
1182    
1183     Float_t deltapt = (jet.pt - jet.mc.pt) * factor;
1184     ptscale = TMath::Max( Float_t (0.) , (jet.pt + deltapt)/jet.pt );
1185    
1186     metcorpx -= jet.uncorrpx * ptscale;
1187     metcorpy -= jet.uncorrpy * ptscale;
1188    
1189     totJERptminus -= ptscale*TMath::Sqrt(jet.uncorrpx*jet.uncorrpx + jet.uncorrpy*jet.uncorrpy);
1190    
1191     //if (ntuple->run == 1 && ntuple->lumi == 4 && ntuple->event == 3611988 ) {
1192     // TString outstring = "Subtract:";
1193     // outstring += TString(Form("%f", ptscale*TMath::Sqrt(jet.uncorrpx*jet.uncorrpx + jet.uncorrpy*jet.uncorrpy) ));
1194     // Info("MET", outstring);
1195     //}
1196    
1197     }
1198    
1199     if (jet.pt > 30 && fabs(jet.eta)< 2.4 ) {
1200     jet.pt = SF_JEC * ptscale * jet.pt;
1201     jet.e = SF_JEC * ptscale * jet.e;
1202     }
1203 algomez 1.1 }
1204    
1205 algomez 1.13 if (jet.pt > 30 && fabs(jet.eta)< 2.4 ) tmp_corrjets.push_back( jet );
1206    
1207     } // jets
1208 algomez 1.17
1209     //p4MET.SetPtEtaPhiE( tmpmet + totJERptadd + totJERptminus, tmpeta, tmpphi, tmpmet + totJERptadd + totJERptminus ); //// previous way
1210     p4MET.SetPxPyPzE( metcorpx, metcorpy, 0, TMath::Sqrt((metcorpx * metcorpx ) + ( metcorpy * metcorpy)) );
1211 algomez 1.13
1212    
1213     //if (ntuple->run == 1 && ntuple->lumi == 4 && ntuple->event == 3611988 ) {
1214     // TString outstring ="MET after ";
1215     // outstring += TString(Form("%f", p4MET.Pt() ));
1216     // Info("MET", outstring);
1217     // outstring = "tot add = "+TString(Form("%f", totJERptadd))+ " tot minus = "+TString(Form("%f", totJERptminus));
1218     // Info("MET", outstring );
1219     //}
1220 algomez 1.17 //
1221     if ( p4MET.Et() <= 20.) return kTRUE;
1222     cutmap["MET"] += PUweight;
1223     if (fVerbose) cout << "pass MET cut" << endl;
1224    
1225    
1226     //////////////////////////////////////////////
1227     ////// Jets info
1228     /////////////////////////////////////////////
1229 algomez 1.13
1230     jets = tmp_corrjets;
1231     sort( jets.begin(), jets.end(), mysortPt );
1232    
1233     for ( size_t ijet=0; ijet < jets.size() ; ++ijet) {
1234    
1235     TopJetEvent jet = jets[ijet];
1236    
1237     bool jetpass = jets.size()>1 && jet.pt > 40. && fabs(jet.eta) < 2.4 && jets[0].pt > 100. && jets[1].pt > 60.;
1238    
1239     if ( jetpass ) {
1240 algomez 1.6
1241 algomez 1.8 //if (fVerbose) cout << " jet pt " << SF_JEC*jet.pt << endl;
1242 algomez 1.6
1243 algomez 1.16 hjets["pt"]->Fill( jet.pt, PUweight );
1244     hjets["eta"]->Fill( jet.eta, PUweight );
1245     hjets["phi"]->Fill( jet.phi, PUweight );
1246 algomez 1.6
1247 algomez 1.15 TLorentzVector tmpjet, tmpbjetcsvl, tmpbjetcsvm;
1248 algomez 1.13 tmpjet.SetPtEtaPhiE(jet.pt, jet.eta, jet.phi, jet.e);
1249 algomez 1.6 p4jets.push_back( tmpjet);
1250     listflavor.push_back( jet.mc.flavor );
1251    
1252     if (fVerbose) {
1253     cout << "done storing njets " << njets << endl;
1254 algomez 1.15 cout << " bdisc " << jet.btag_TCHP << endl;
1255 algomez 1.6 cout << " bdisc " << jet.btag_CSV << endl;
1256     }
1257    
1258 algomez 1.7 // store discriminators
1259 algomez 1.16 bdisc["TCHP"].push_back( jet.btag_TCHP );
1260 algomez 1.6 bdisc["CSV"].push_back( jet.btag_CSV );
1261     if (fVerbose) cout << "store bdisc" << endl;
1262 algomez 1.15 if ( jet.btag_TCHP > 1.93 ) isTagb["TCHPM"].push_back(true);
1263     else isTagb["TCHPM"].push_back(false);
1264     if (fVerbose) cout << "done tchpl" << endl;
1265     if ( jet.btag_CSV > 0.679){
1266     isTagb["CSVM"].push_back(true);
1267 algomez 1.16 tmpbjetcsvm.SetPtEtaPhiE(jet.pt, jet.eta, jet.phi, jet.e);
1268 algomez 1.15 p4bjetscsvm.push_back(tmpbjetcsvm);
1269     //p4bjetscsvm.push_back(tmpjet);
1270     }
1271     else isTagb["CSVM"].push_back(false);
1272     if ( jet.btag_CSV > 0.679) isTagbUp["CSVM"].push_back(true);
1273     else isTagbUp["CSVM"].push_back(false);
1274     if ( jet.btag_CSV > 0.679) isTagbDown["CSVM"].push_back(true);
1275     else isTagbDown["CSVM"].push_back(false);
1276     //CSV Loose Tagger at 0.244
1277     if ( jet.btag_CSV > 0.244){
1278     isTagb["CSVL"].push_back(true);
1279     tmpbjetcsvl.SetPtEtaPhiE(jet.pt, jet.eta, jet.phi, jet.e);
1280     p4bjetscsvl.push_back(tmpbjetcsvl);
1281     }
1282     else isTagb["CSVL"].push_back(false);
1283     if ( jet.btag_CSV > 0.244) isTagbUp["CSVL"].push_back(true);
1284     else isTagbUp["CSVL"].push_back(false);
1285     if ( jet.btag_CSV > 0.244) isTagbDown["CSVL"].push_back(true);
1286     else isTagbDown["CSVL"].push_back(false);
1287     //CSV Tight Tagger at 0.898
1288     if ( jet.btag_CSV > 0.898) isTagb["CSVT"].push_back(true);
1289     else isTagb["CSVT"].push_back(false);
1290     if ( jet.btag_CSV > 0.898) isTagbUp["CSVT"].push_back(true);
1291     else isTagbUp["CSVT"].push_back(false);
1292     if ( jet.btag_CSV > 0.898) isTagbDown["CSVT"].push_back(true);
1293     else isTagbDown["CSVT"].push_back(false);
1294    
1295 algomez 1.11 if (fVerbose) cout << "done csv" << endl;
1296 algomez 1.7
1297 algomez 1.6 njets++;
1298     }
1299     }
1300 algomez 1.1
1301 algomez 1.16
1302 algomez 1.13 /////////////////////////////////
1303 algomez 1.17 // estimate Pz of neutrino
1304 algomez 1.13 ////////////////////////////////
1305    
1306     fzCalculator.SetMET(p4MET);
1307     fzCalculator.SetLepton(p4lepton);
1308    
1309     double pzNu = fzCalculator.Calculate();
1310     double pzOtherNu = fzCalculator.getOther();
1311 algomez 1.17 p4Nu.SetPxPyPzE(p4MET.Px(), p4MET.Py(), pzNu, sqrt(p4MET.Px()*p4MET.Px()+p4MET.Py()*p4MET.Py()+pzNu*pzNu));
1312     p4OtherNu.SetPxPyPzE( p4MET.Px(), p4MET.Py(),pzOtherNu,sqrt(p4MET.Px()*p4MET.Px()+p4MET.Py()*p4MET.Py()+pzOtherNu*pzOtherNu));
1313    
1314 algomez 1.13 if (fabs(pzNu) > fabs(pzOtherNu) ) {
1315     double tmppzNu = pzNu;
1316     double tmppzOtherNu = pzOtherNu;
1317     pzNu = tmppzOtherNu;
1318     pzOtherNu = tmppzNu;
1319     }
1320    
1321 algomez 1.17 //p4Nu = TLorentzVector();
1322     //p4OtherNu = TLorentzVector();
1323 algomez 1.13
1324    
1325     //double WmassNoPt = (p4Nu+p4lepton).M();
1326    
1327     if ( fzCalculator.IsComplex() ) {
1328     double ptNu1 = fzCalculator.getPtneutrino(1);
1329     double ptNu2 = fzCalculator.getPtneutrino(2);
1330     TLorentzVector p4Nu1tmp;
1331     TLorentzVector p4Nu2tmp;
1332    
1333     p4Nu1tmp.SetPxPyPzE( ptNu1*p4MET.Px()/p4MET.Pt(), ptNu1*p4MET.Py()/p4MET.Pt(), pzNu, sqrt(ptNu1*ptNu1+pzNu*pzNu));
1334     p4Nu2tmp.SetPxPyPzE( ptNu2*p4MET.Px()/p4MET.Pt(), ptNu2*p4MET.Py()/p4MET.Pt(), pzNu, sqrt(ptNu2*ptNu2+pzNu*pzNu));
1335    
1336     TLorentzVector Wtmp;
1337     Wtmp = p4lepton + p4Nu1tmp;
1338     double Wm1 = 0;
1339     double Wm2 = 0;
1340     Wm1 = Wtmp.M();
1341     Wtmp = p4lepton + p4Nu2tmp;
1342     Wm2 = Wtmp.M();
1343     if ( fabs( Wm1 - 80.4) < fabs( Wm2 - 80.4) ) p4Nu = p4Nu1tmp;
1344     else p4Nu = p4Nu2tmp;
1345    
1346     p4OtherNu = p4Nu; // since we chose the real part, the two solutions are the same.
1347     }
1348    
1349    
1350     hMET["PzNu"]->Fill(pzNu, PUweight ); //change this to 2d with two sol and as a function of jets
1351 algomez 1.17
1352     TLorentzVector nup4[2];
1353     nup4[0] = p4Nu;
1354     nup4[1] = p4OtherNu;
1355 algomez 1.13
1356    
1357 algomez 1.17 //if ( fzCalculator.IsComplex() ) hM["lepW_massComplex"]->Fill( p4LepW.M(), PUweight );
1358    
1359     ///////////////////////////////////////
1360     // SOME VARIABLES
1361     ///////////////////////////////////////
1362 algomez 1.13
1363 algomez 1.16 double Ht = 0;
1364     double Stlep = 0;
1365     double Stjet = 0;
1366     double Slep = 0;
1367     double deltaRminjj = 999.;
1368     double deltaRjj = 999.;
1369     double deltaRmu2j = 999.;
1370     double deltaPhijj = 0.;
1371     double deltaPhimu2j = 0.;
1372 algomez 1.13
1373 algomez 1.16 for (size_t mm=0; mm < p4Othermuon.size(); ++mm){
1374     Slep += p4Othermuon[mm].Pt();
1375     for ( size_t kkk=0; kkk < p4jets.size(); ++kkk) {
1376     deltaRmu2j = p4Othermuon[0].DeltaR(p4jets[1]);
1377     deltaPhimu2j = p4Othermuon[0].DeltaPhi(p4jets[1]);
1378     }
1379     }
1380 algomez 1.1
1381 algomez 1.16 for ( size_t kkk=0; kkk < p4jets.size(); ++kkk) {
1382     // Ht calculation
1383     Ht += p4jets[kkk].Pt();
1384    
1385     // deltaR(jet,jet)
1386     for ( vector< TopJetEvent>::iterator ijet=jets.begin(); ijet != jets.end(); ++ijet) {
1387    
1388     TopJetEvent jet = *ijet;
1389     TLorentzVector tmpp4Jet;
1390     tmpp4Jet.SetPtEtaPhiE(jet.pt, jet.eta, jet.phi, jet.e );
1391     double tmpdeltaR = p4jets[kkk].DeltaR(tmpp4Jet);
1392     if ( tmpdeltaR < 0.3 ) continue;
1393     if ( tmpdeltaR < deltaRminjj ) deltaRminjj = tmpdeltaR;
1394     }
1395 algomez 1.17 deltaRjj = p4jets[0].DeltaR(p4jets[1]);
1396     deltaPhijj = p4jets[0].DeltaPhi(p4jets[1]);
1397 algomez 1.1
1398 algomez 1.16 }
1399 algomez 1.1
1400 algomez 1.16 // St Calculation
1401     Stlep = p4MET.Pt() + Slep ;
1402     Stjet = Stlep + Ht ;
1403 algomez 1.1
1404 algomez 1.16 // calculate dijet mass closest to W mass
1405    
1406     double dileadjet_mass = 0;
1407 algomez 1.17 double hadW_mass = 0;
1408 algomez 1.16 double Htop_mass = 0;
1409 algomez 1.17 double Leptop_mass = 0;
1410     double Leptop_pt = 0;
1411     double diWdeltaphi =0;
1412     double diWdeltaR =0;
1413 algomez 1.16 double DeltaPhiMETWlep = 0;
1414     double DeltaPhiMETlep = 0;
1415     double DeltaPhiNulep = 0;
1416     double sigma2 = 10.5*10.5;
1417     double sigma2top = 19.2 * 19.2;
1418     double tmpchi2 = 999999999.;
1419 algomez 1.17 double lepW_pt = 0;
1420     double lepW_mass = 0;
1421 algomez 1.16 TLorentzVector p4dileadjet, p4HadW, p4HadTop;
1422    
1423     if ( njets < 4 ) return kTRUE;
1424     if ( njets > 3) {
1425 algomez 1.7
1426 algomez 1.17 cutmap["4Jet"] += PUweight;
1427 algomez 1.7
1428 algomez 1.8
1429 algomez 1.17 //////////////////////////////////
1430 algomez 1.16 // Btagging
1431 algomez 1.17 /////////////////////////////////
1432 algomez 1.16
1433 algomez 1.15 Double_t SFb0only = 1.0;
1434     Double_t SFb1only = 1.0;
1435     Double_t SFb_2btag = 1.0;// weight factor
1436     Double_t SFb_1btag = 1.0; // at least one btag TCHPM jet
1437     Double_t SFb_only1tag_syst[2] = {1.0,1.0};
1438     Double_t SFb_1tag_syst[2] = {1.0,1.0};
1439     Double_t SFb_2tag_syst[2] = {1.0,1.0};
1440     //For Btag Systematic error
1441     Int_t NbtagsUp_CSVM = 0;
1442     Int_t NbtagsDown_CSVM = 0;
1443     Int_t Nbtags_CSVM = 0;
1444     Int_t myNbtags_CSVM = 0;
1445     Int_t NbtagsUp_CSVL = 0;
1446     Int_t NbtagsDown_CSVL = 0;
1447     Int_t Nbtags_CSVL = 0;
1448     Int_t NbtagsUp_CSVT = 0;
1449     Int_t NbtagsDown_CSVT = 0;
1450     Int_t Nbtags_CSVT = 0;
1451    
1452     // count partons
1453     Int_t number_of_b = 0;
1454     Int_t number_of_c = 0;
1455     //Int_t number_of_l = 0;
1456     Int_t number_of_b_highpt = 0;
1457     Int_t number_of_c_highpt = 0;
1458    
1459     Int_t number_of_b_all = 0;
1460     Int_t number_of_c_all = 0;
1461    
1462     for ( size_t mm=0; mm< isTagb["TCHPM"].size(); ++mm ) {
1463     if(isTagb["CSVM"][mm]) {
1464     myNbtags_CSVM = myNbtags_CSVM + 1; //We need to store the btag jey number before applying the scale factor modified
1465     }
1466     }
1467    
1468     if(fIsMC){
1469     //use the new Btag method
1470     for(size_t kk = 0; kk < p4jets.size(); ++kk){
1471    
1472    
1473     //The official Twiki of Btag Efficiency and Scale factor: https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagPOG
1474     //For the CSV Btag efficiency: x is the CSV btag discriminator
1475     //effb = -1.73338329789*x*x*x*x + 1.26161794785*x*x*x + 0.784721653518*x*x + -1.03328577451*x + 1.04305075822
1476     //effc = -1.5734604211*x*x*x*x + 1.52798999269*x*x*x + 0.866697059943*x*x + -1.66657942274*x + 0.780639301724
1477     //Tight Tagger has been Commented
1478    
1479     //For the Medium
1480     float b_data_eff = 0.730;
1481     float c_data_eff = 0.192;
1482    
1483     //For the Loose
1484     float b_data_eff_loose = 0.850;
1485     float c_data_eff_loose = 0.442;
1486    
1487     //For the tight
1488     float b_data_eff_tight = 0.534;
1489     float c_data_eff_tight = 0.0663;
1490    
1491     //Medium
1492     float b_SF = bSF_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1493     float b_SF_error = bSF_table_error.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1494     float l_SF = lSF_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1495     float l_SF_up = lSF_table_error_up.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1496     float l_SF_down = lSF_table_error_down.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1497     float l_data_eff = leff_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1498    
1499     //Loose
1500     float b_SF_loose = bSF_table_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1501     float b_SF_loose_error = bSF_table_error_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1502     float l_SF_loose = lSF_table_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1503     float l_SF_up_loose = lSF_table_error_up_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1504     float l_SF_down_loose = lSF_table_error_down_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1505     float l_data_eff_loose = leff_table_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1506    
1507     //Tight
1508     float b_SF_tight = bSF_table_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1509     float b_SF_tight_error = bSF_table_error_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1510     float l_SF_tight = lSF_table_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1511     float l_SF_up_tight = lSF_table_error_up_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1512     float l_SF_down_tight = lSF_table_error_down_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1513     float l_data_eff_tight = leff_table_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1514    
1515     Double_t ptmax = 670.;
1516     Double_t times = 2.0;
1517    
1518     if(p4jets[kk].Pt() > ptmax){
1519     //btag scale factor error > Ptmax, two times uncerntainty, This has been considered into the Txt Files
1520     //b_SF_error = times * b_SF_error;
1521     //b_SF_loose_error = times * b_SF_loose_error;
1522     //b_SF_tight_error = times * b_SF_tight_error;
1523    
1524     //mistag scale factor error
1525     l_SF_up = l_SF + times * (l_SF_up - l_SF);
1526     l_SF_down = l_SF - times * (l_SF - l_SF_down);
1527    
1528     //Loose
1529     l_SF_up_loose = l_SF_loose + times * (l_SF_up_loose - l_SF_loose);
1530     l_SF_down_loose = l_SF_loose - times * (l_SF_loose - l_SF_down_loose);
1531    
1532     //Tight
1533     l_SF_up_tight = l_SF_tight + times * (l_SF_up_tight - l_SF_tight);
1534     l_SF_down_tight = l_SF_tight - times * (l_SF_tight - l_SF_down_tight);
1535     }
1536    
1537    
1538     /*
1539     //From the twiki: https://twiki.cern.ch/twiki/pub/CMS/BtagPOG/SFb-mujet_payload.txt
1540 algomez 1.7
1541 algomez 1.15 float b_SF = bSF_table_medium.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSVMedium");
1542     float b_SF_error = bSF_table_medium.GetError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1543    
1544     float b_SF_loose = bSF_table_loose.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSVLoose");
1545     float b_SF_loose_error = bSF_table_loose.GetError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));;
1546    
1547     float b_SF_tight = bSF_table_tight.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSVTight");
1548     float b_SF_tight_error = bSF_table_tight.GetError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));;
1549    
1550     //for Mediem tagger
1551     float l_SF = leff_SF_table_medium.GetLightSFValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M");
1552     float l_SF_up = leff_SF_table_medium.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M","Up");
1553     float l_SF_down = leff_SF_table_medium.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M","Down");
1554     float l_data_eff = leff_SF_table_medium.GetMistagValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M");
1555    
1556     //for Loose tagger
1557     float l_SF_loose = leff_SF_table_loose.GetLightSFValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","L");
1558     float l_SF_up_loose = leff_SF_table_loose.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","L","Up");
1559     float l_SF_down_loose = leff_SF_table_loose.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","L","Down");
1560     float l_data_eff_loose = leff_SF_table_loose.GetMistagValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","L");
1561    
1562    
1563     //for Tight tagger
1564     float l_SF_tight = leff_SF_table_tight.GetLightSFValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","T");
1565     float l_SF_up_tight = leff_SF_table_tight.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","T","Up");
1566     float l_SF_down_tight = leff_SF_table_tight.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","T","Down");
1567     float l_data_eff_tight = leff_SF_table_tight.GetMistagValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","T");
1568     */
1569    
1570     double seed = abs(static_cast<int>(sin(p4jets[kk].Phi()*1000000)*100000));
1571     BTagSFUtil btsfutil = BTagSFUtil( seed );
1572    
1573     //b jet
1574     if ( fIsMC && abs(listflavor[kk])==5 ){
1575    
1576     //Medium
1577     bool tmp_IsTag = isTagb["CSVM"][kk];
1578     isTagb["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF, b_data_eff, l_SF, l_data_eff);
1579    
1580     //Loose
1581     bool tmp_IsTag_loose = isTagb["CSVL"][kk];
1582     isTagb["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose, b_data_eff_loose, l_SF, l_data_eff);
1583    
1584    
1585     //Tight
1586     bool tmp_IsTag_tight = isTagb["CSVT"][kk];
1587     isTagb["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight, b_data_eff_tight, l_SF, l_data_eff);
1588    
1589    
1590     //the uncerntainty has been considered when getting the value
1591 algomez 1.9 tmp_IsTag = isTagbUp["CSVM"][kk];
1592 algomez 1.15 isTagbUp["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag , abs(listflavor[kk]), b_SF + b_SF_error, b_data_eff, l_SF, l_data_eff);
1593 algomez 1.9 tmp_IsTag = isTagbDown["CSVM"][kk];
1594 algomez 1.15 isTagbDown["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag , abs(listflavor[kk]), b_SF - b_SF_error, b_data_eff, l_SF, l_data_eff);
1595    
1596     tmp_IsTag_loose = isTagbUp["CSVL"][kk];
1597     isTagbUp["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose + b_SF_loose_error, b_data_eff_loose, l_SF, l_data_eff);
1598     tmp_IsTag_loose = isTagbDown["CSVL"][kk];
1599     isTagbDown["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose - b_SF_loose_error, b_data_eff_loose, l_SF, l_data_eff);
1600    
1601    
1602     tmp_IsTag_tight = isTagbUp["CSVT"][kk];
1603     isTagbUp["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight + b_SF_tight_error, b_data_eff_tight, l_SF, l_data_eff);
1604     tmp_IsTag_tight = isTagbDown["CSVT"][kk];
1605     isTagbDown["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight - b_SF_tight_error, b_data_eff_tight, l_SF, l_data_eff);
1606     }
1607    
1608     if ( fIsMC && abs(listflavor[kk])==4 ) {
1609    
1610     bool tmp_IsTag = isTagb["CSVM"][kk];
1611     isTagb["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF, c_data_eff,l_SF, l_data_eff );
1612    
1613     //For the Loose
1614     bool tmp_IsTag_loose = isTagb["CSVL"][kk];
1615     isTagb["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose, c_data_eff_loose,l_SF, l_data_eff );
1616    
1617     //For the Tight
1618     bool tmp_IsTag_tight = isTagb["CSVT"][kk];
1619     isTagb["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight, c_data_eff_tight,l_SF, l_data_eff );
1620    
1621    
1622     //use uncerntainty on the cjet, two times of B btag error
1623 algomez 1.9 tmp_IsTag = isTagbUp["CSVM"][kk];
1624 algomez 1.15 isTagbUp["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF + 2.0 * b_SF_error , c_data_eff, l_SF, l_data_eff);
1625 algomez 1.9 tmp_IsTag = isTagbDown["CSVM"][kk];
1626 algomez 1.15 isTagbDown["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF - 2.0 * b_SF_error, c_data_eff, l_SF, l_data_eff);
1627    
1628     //use uncerntainty on the cjet
1629     tmp_IsTag_loose = isTagbUp["CSVL"][kk];
1630     isTagbUp["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose + 2.0 * b_SF_loose_error, c_data_eff_loose, l_SF, l_data_eff);
1631     tmp_IsTag_loose = isTagbDown["CSVL"][kk];
1632     isTagbDown["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose - 2.0 * b_SF_loose_error, c_data_eff_loose, l_SF, l_data_eff);
1633    
1634    
1635     //use uncerntainty on the cjet
1636     tmp_IsTag_tight = isTagbUp["CSVT"][kk];
1637     isTagbUp["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight + 2.0 * b_SF_tight_error, c_data_eff_tight, l_SF, l_data_eff);
1638     tmp_IsTag_tight = isTagbDown["CSVT"][kk];
1639     isTagbDown["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight - 2.0 * b_SF_tight_error, c_data_eff_tight, l_SF, l_data_eff);
1640 algomez 1.9 }
1641    
1642 algomez 1.15 if ( fIsMC && (abs(listflavor[kk])==1 || abs(listflavor[kk])==2 || abs(listflavor[kk])==3 || abs(listflavor[kk])==21 )){
1643    
1644     bool tmp_IsTag = isTagb["CSVM"][kk];
1645     isTagb["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF, b_data_eff, l_SF, l_data_eff);
1646    
1647     //for loose
1648     bool tmp_IsTag_loose = isTagb["CSVL"][kk];
1649     isTagb["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose, b_data_eff_loose, l_SF_loose, l_data_eff_loose);
1650    
1651     //for tight
1652     bool tmp_IsTag_tight = isTagb["CSVT"][kk];
1653     isTagb["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight, b_data_eff_tight, l_SF_tight, l_data_eff_tight);
1654    
1655    
1656 algomez 1.9 tmp_IsTag = isTagbUp["CSVM"][kk];
1657 algomez 1.15 isTagbUp["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF, b_data_eff, l_SF_up , l_data_eff);
1658 algomez 1.9 tmp_IsTag = isTagbDown["CSVM"][kk];
1659 algomez 1.15 isTagbDown["CSVM"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag, abs(listflavor[kk]), b_SF, b_data_eff, l_SF_down, l_data_eff);
1660    
1661     //for Loose
1662     tmp_IsTag_loose = isTagbUp["CSVL"][kk];
1663     isTagbUp["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose , abs(listflavor[kk]), b_SF_loose, b_data_eff_loose, l_SF_up_loose, l_data_eff_loose);
1664     tmp_IsTag_loose = isTagbDown["CSVL"][kk];
1665     isTagbDown["CSVL"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_loose, abs(listflavor[kk]), b_SF_loose, b_data_eff_loose, l_SF_down_loose, l_data_eff_loose);
1666    
1667    
1668     //for tight
1669     tmp_IsTag_tight = isTagbUp["CSVT"][kk];
1670     isTagbUp["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight , abs(listflavor[kk]), b_SF_tight, b_data_eff_tight, l_SF_up_tight, l_data_eff_tight);
1671     tmp_IsTag_tight = isTagbDown["CSVT"][kk];
1672     isTagbDown["CSVT"][kk] = btsfutil.modifyBTagsWithSF( tmp_IsTag_tight, abs(listflavor[kk]), b_SF_tight, b_data_eff_tight, l_SF_down_tight, l_data_eff_tight);
1673 algomez 1.9 }
1674     }
1675 algomez 1.15 }
1676 algomez 1.9
1677 algomez 1.15
1678     if( fIsMC ){
1679     //zero btag
1680     BTagWeight b0(0,0); // number of tags 1 to 3
1681    
1682     //Using the Pt and Eta dependent Btag efficiency
1683     vector<BTagWeight::JetInfo> j;
1684     //for systematic Btag
1685     vector<BTagWeight::JetInfo> jj;//UP
1686     vector<BTagWeight::JetInfo> jk;//DOWN
1687    
1688     //New Recommendtion from the Btag Group
1689     for(size_t kk = 0; kk < p4jets.size(); ++kk){
1690     //Still Support for the Medium
1691     //For the Mediem
1692     float b_data_eff = 0.730;
1693     float c_data_eff = 0.192;
1694    
1695     float b_SF1 = bSF_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1696     float b_SF_error1 = bSF_table_error.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1697    
1698     float l_SF1 = lSF_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1699     float l_SF_up1 = lSF_table_error_up.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1700     float l_SF_down1 = lSF_table_error_down.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1701     float l_data_eff1 = leff_table.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1702    
1703     Double_t ptmax = 670.;
1704    
1705     if(p4jets[kk].Pt() > ptmax){
1706     //btag scale factor error > Ptmax, two times uncerntainty
1707     b_SF_error1 = 2.0 * b_SF_error1;
1708    
1709     //mistag scale factor error
1710     l_SF_up1 = l_SF1 + 2.0 * (l_SF_up1 - l_SF1);
1711     l_SF_down1 = l_SF1 - 2.0 * (l_SF1 - l_SF_down1);
1712     }
1713    
1714     /*//From the twiki: https://twiki.cern.ch/twiki/pub/CMS/BtagPOG/SFb-mujet_payload.txt
1715     float b_SF1 = bSF_table_medium.GetValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSVMedium");
1716     float b_SF_error1 = bSF_table_medium.GetError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()));
1717    
1718     //for Mediem tagger
1719     float l_SF1 = leff_SF_table_medium.GetLightSFValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M");
1720     float l_SF_up1 = leff_SF_table_medium.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M","Up");
1721     float l_SF_down1 = leff_SF_table_medium.GetLightSFError(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M","Down");
1722     float l_data_eff1 = leff_SF_table_medium.GetMistagValue(p4jets[kk].Pt(),fabs(p4jets[kk].Eta()),"CSV","M");
1723     */
1724    
1725     if(abs(listflavor[kk]) == 5) {
1726     Double_t tageff = b_data_eff;
1727     Double_t b_SF = b_SF1;
1728     Double_t b_SF_error = b_SF_error1;
1729    
1730     BTagWeight::JetInfo bjlow(tageff,b_SF);
1731     BTagWeight::JetInfo bjlowUP(tageff,b_SF + b_SF_error);
1732     BTagWeight::JetInfo bjlowDOWN(tageff,b_SF - b_SF_error);
1733     j.push_back(bjlow);
1734     jj.push_back(bjlowUP);
1735     jk.push_back(bjlowDOWN);
1736     }
1737    
1738     if(abs(listflavor[kk]) == 4){
1739     Double_t tageff = c_data_eff;
1740     Double_t b_SF = b_SF1;
1741     Double_t b_SF_error = b_SF_error1;
1742    
1743     BTagWeight::JetInfo cjlow(tageff,b_SF);
1744     BTagWeight::JetInfo cjlowUP(tageff,b_SF + 2.0 * b_SF_error);
1745     BTagWeight::JetInfo cjlowDOWN(tageff,b_SF - 2.0 * b_SF_error);
1746     j.push_back(cjlow);
1747     jj.push_back(cjlowUP);
1748     jk.push_back(cjlowDOWN);
1749     }
1750    
1751     if(abs(listflavor[kk]) == 1 || abs(listflavor[kk]) == 2 || abs(listflavor[kk]) == 3 || abs(listflavor[kk]) == 21) {
1752     Double_t tageff = l_data_eff1;
1753     Double_t l_SF = l_SF1;
1754     Double_t l_SF_up = l_SF_up1;
1755     Double_t l_SF_down = l_SF_down1;
1756    
1757     BTagWeight::JetInfo lightj(tageff,l_SF);
1758     BTagWeight::JetInfo lightjUP(tageff,l_SF_up);
1759     BTagWeight::JetInfo lightjDOWN(tageff,l_SF_down);
1760    
1761     j.push_back(lightj);
1762     jj.push_back(lightjUP);
1763     jk.push_back(lightjDOWN);
1764 algomez 1.9 }
1765 algomez 1.15 }//LOOP of Jet
1766    
1767     //changed from TCHPM to CSVM
1768     if(myNbtags_CSVM == 0){
1769     SFb0only = b0.weight(j,0);
1770     }
1771    
1772     if(myNbtags_CSVM == 1){
1773     BTagWeight b11(1,1);
1774     SFb1only = b11.weight(j,1);
1775    
1776     SFb_only1tag_syst[0] = b11.weight(jj,1); //UP
1777     SFb_only1tag_syst[1] = b11.weight(jk,1);//DOWN
1778 algomez 1.9 }
1779 algomez 1.1
1780 algomez 1.15 if(myNbtags_CSVM >= 1){
1781     BTagWeight b1(1,Nbtags_CSVM);
1782     SFb_1btag = b1.weight(j,1);
1783    
1784     SFb_1tag_syst[0] = b1.weight(jj,1); //UP
1785     SFb_1tag_syst[1] = b1.weight(jk,1);//DOWN
1786     }
1787    
1788     if(myNbtags_CSVM >= 2) {
1789     BTagWeight b2(2,myNbtags_CSVM);
1790     SFb_2btag = b2.weight(j,2);
1791    
1792     SFb_2tag_syst[0] = b2.weight(jj,2); //UP
1793     SFb_2tag_syst[1] = b2.weight(jk,2);//DOWN
1794     }
1795     }//MC sample
1796 algomez 1.9
1797 algomez 1.15 number_of_b_all = number_of_b + number_of_b_highpt;
1798     number_of_c_all = number_of_c + number_of_c_highpt;
1799 algomez 1.9
1800 algomez 1.7 // count number of b-tags
1801 algomez 1.15 Int_t Nbtags_TCHPM = 0;
1802 algomez 1.10
1803 algomez 1.15 //This number of btag jet has been applied the scale factor, so be careful!!!!!!!!!!!!!!!!!!
1804     for ( size_t itag=0; itag< isTagb["TCHPM"].size(); ++itag ){
1805     if ( isTagb["TCHPM"][itag] ) Nbtags_TCHPM++;
1806     if ( isTagb["CSVM"][itag] ) Nbtags_CSVM++;
1807 algomez 1.11 if ( isTagb["CSVL"][itag] ) Nbtags_CSVL++;
1808 algomez 1.15 if ( isTagb["CSVT"][itag] ) Nbtags_CSVT++;
1809     if ( isTagbUp["CSVL"][itag] ) NbtagsUp_CSVL++;
1810     if ( isTagbDown["CSVL"][itag] ) NbtagsDown_CSVL++;
1811     if ( isTagbUp["CSVT"][itag] ) NbtagsUp_CSVT++;
1812     if ( isTagbDown["CSVT"][itag] ) NbtagsDown_CSVT++;
1813 algomez 1.10 if ( isTagbUp["CSVM"][itag] ) NbtagsUp_CSVM++;
1814     if ( isTagbDown["CSVM"][itag] ) NbtagsDown_CSVM++;
1815 algomez 1.17 }///////////////////////////////////////////////////////////////// end btaging
1816    
1817     p4dileadjet = p4jets[0] + p4jets[1];
1818     dileadjet_mass = p4dileadjet.M();
1819    
1820     //calculate cloest di jet mass which is the cloest to W mass
1821     Int_t bestjetTopindex[3] = {-1,-1,-1};
1822    
1823     for ( Int_t iijet = 0; iijet < (njets - 2); ++iijet ) {
1824     for ( Int_t jjjet = iijet + 1; jjjet < njets - 1; ++jjjet ) {
1825     for(Int_t kkjet = iijet + 2; kkjet < njets; ++kkjet){
1826     TLorentzVector tmpvv = p4jets[iijet] + p4jets[jjjet];
1827     Double_t tmpmass = tmpvv.M();
1828     TLorentzVector tmptop = p4jets[iijet] + p4jets[jjjet] + p4jets[kkjet];
1829     Double_t tmptopmass = tmptop.M();
1830     Double_t reconstructionchi2 = TMath::Abs(tmpmass - 80.4) * TMath::Abs(tmpmass - 80.4)/sigma2 + TMath::Abs(tmptopmass - 172.5) * TMath::Abs(tmptopmass - 172.5)/sigma2top;
1831     if( tmpchi2 > reconstructionchi2){
1832     tmpchi2 = reconstructionchi2;
1833     bestjetTopindex[0] = iijet;
1834     bestjetTopindex[1] = jjjet;
1835     bestjetTopindex[2] = kkjet;
1836     }
1837     }
1838     }
1839     }
1840    
1841     p4HadW = p4jets[bestjetTopindex[0]] + p4jets[bestjetTopindex[1]];
1842     p4HadTop = p4jets[bestjetTopindex[0]] + p4jets[bestjetTopindex[1]] + p4jets[bestjetTopindex[2]];
1843     hadW_mass = p4HadW.M();
1844     Htop_mass = p4HadTop.M();
1845    
1846    
1847     // Leptonic Top
1848     Int_t index[2] = {-1, -1}; // best index combination cloest to the Top mass
1849     Double_t mindeltamass = 100000000.;
1850     vector<Double_t> topmasscombination;
1851     topmasscombination.clear();
1852    
1853     for(Int_t l = 0; l < 2; l++){
1854     for(Int_t m = 0; m < njets; m++){
1855     TLorentzVector sum;
1856     sum = p4lepton + nup4[l] + p4jets[m];
1857    
1858     topmasscombination.push_back(sum.M());
1859    
1860     if (mindeltamass > TMath::Abs(sum.M()- 172.5)) {
1861     mindeltamass = TMath::Abs(sum.M()- 172.5);
1862     Leptop_mass = sum.M();
1863     Leptop_pt = sum.Pt();
1864     index[0] = l;
1865     index[1] = m;
1866     }
1867     }
1868     }
1869    
1870 algomez 1.16
1871 algomez 1.17 TLorentzVector p4LepW = p4lepton + nup4[index[0]];
1872 algomez 1.6
1873 algomez 1.17 TLorentzVector hadwbosonp4 = p4jets[bestjetTopindex[0]] + p4jets[bestjetTopindex[1]];
1874     diWdeltaphi = p4LepW.DeltaPhi(hadwbosonp4);
1875     diWdeltaR = p4LepW.DeltaR(hadwbosonp4);
1876     DeltaPhiMETWlep = p4LepW.DeltaPhi(p4MET);
1877     DeltaPhiMETlep = p4lepton.DeltaPhi(p4MET);
1878     DeltaPhiNulep = p4lepton.DeltaPhi(p4Nu);
1879    
1880     lepW_pt = p4LepW.Pt();
1881     lepW_mass = p4LepW.M();
1882    
1883    
1884    
1885     hMET["Ht_cut0"]->Fill( Ht, PUweight );
1886     hMET["Stlep_cut0"]->Fill( Stlep , PUweight );
1887     hMET["Stjet_cut0"]->Fill( Stjet , PUweight );
1888     hM["dileadjet_cut0"]->Fill( dileadjet_mass, PUweight );
1889     hM["hadW_mass_cut0"]->Fill( hadW_mass, PUweight );
1890     hM["top_mass_cut0"]->Fill( Htop_mass, PUweight );
1891     hM["top_pt_cut0"]->Fill( p4HadTop.Pt(), PUweight );
1892     hjets["1st_pt_cut0"]->Fill( p4jets[0].Pt(), PUweight );
1893     hjets["1st_eta_cut0"]->Fill( p4jets[0].Eta(), PUweight );
1894     hjets["2nd_pt_cut0"]->Fill( p4jets[1].Pt(), PUweight );
1895     hjets["2nd_eta_cut0"]->Fill( p4jets[1].Eta(), PUweight );
1896     hjets["3rd_pt_cut0"]->Fill( p4jets[2].Pt(), PUweight );
1897     hjets["4th_pt_cut0"]->Fill( p4jets[3].Pt(), PUweight );
1898     hjets["5th_pt_cut0"]->Fill( p4jets[4].Pt(), PUweight );
1899     hjets["6th_pt_cut0"]->Fill( p4jets[5].Pt(), PUweight );
1900     hjets["7th_pt_cut0"]->Fill( p4jets[6].Pt(), PUweight );
1901     hjets["Njets_cut0"]->Fill( njets, PUweight );
1902     hjets["Nbtags_CSVL_cut0"]->Fill( Nbtags_CSVL, PUweight );
1903     hjets["Nbtags_CSVM_cut0"]->Fill( Nbtags_CSVM, PUweight );
1904     hjets["Nbtags_CSVT_cut0"]->Fill( Nbtags_CSVT, PUweight );
1905     hjets["Nbtags_TCHPM_cut0"]->Fill( Nbtags_TCHPM, PUweight );
1906     hjets["deltaPhijj_cut0"]->Fill( deltaPhijj, PUweight );
1907    
1908     if ( total_muons == 1){
1909     if ( Nbtags_CSVL == 0 ){
1910     if (njets == 4){
1911     hjets["Stjetm1j4b0"]->Fill( Stjet , PUweight );
1912     hjets["DeltaRdijetm1j4b0"]->Fill( deltaRjj , PUweight );
1913     hjets["DeltaPhiMETWlepm1j4b0"]->Fill( DeltaPhiMETWlep , PUweight );
1914     hjets["trijetmassm1j4b0"]->Fill( Htop_mass , PUweight );
1915     hjets["trijetptm1j4b0"]->Fill( p4HadTop.Pt() , PUweight );
1916     hjets["deltaRmindijetm1j4b0"]->Fill( deltaRminjj , PUweight );
1917     hjets["deltaRmu2jetm1j4b0"]->Fill( deltaRmu2j , PUweight );
1918     hjets["deltaPhidijetm1j4b0"]->Fill( deltaPhijj , PUweight );
1919     hjets["deltaPhimu2jetm1j4b0"]->Fill( deltaPhimu2j , PUweight );
1920     hjets["Stlepm1j4b0"]->Fill( Stlep, PUweight );
1921     hjets["Htm1j4b0"]->Fill( Ht, PUweight );
1922     hjets["Njetsm1j4b0"]->Fill( njets, PUweight );
1923     }
1924     if (njets == 5){
1925     hjets["Stjetm1j5b0"]->Fill( Stjet , PUweight );
1926     hjets["DeltaRdijetm1j5b0"]->Fill( deltaRjj , PUweight );
1927     hjets["DeltaPhiMETWlepm1j5b0"]->Fill( DeltaPhiMETWlep , PUweight );
1928     hjets["trijetmassm1j5b0"]->Fill( Htop_mass , PUweight );
1929     hjets["trijetptm1j5b0"]->Fill( p4HadTop.Pt() , PUweight );
1930     hjets["deltaRmindijetm1j5b0"]->Fill( deltaRminjj , PUweight );
1931     hjets["deltaRmu2jetm1j5b0"]->Fill( deltaRmu2j , PUweight );
1932     hjets["deltaPhidijetm1j5b0"]->Fill( deltaPhijj , PUweight );
1933     hjets["deltaPhimu2jetm1j5b0"]->Fill( deltaPhimu2j , PUweight );
1934     hjets["Stlepm1j5b0"]->Fill( Stlep, PUweight );
1935     hjets["Htm1j5b0"]->Fill( Ht, PUweight );
1936     hjets["Njetsm1j5b0"]->Fill( njets, PUweight );
1937     }
1938     if (njets >= 6){
1939     hjets["Stjetm1j6b0"]->Fill( Stjet , PUweight );
1940     hjets["DeltaRdijetm1j6b0"]->Fill( deltaRjj , PUweight );
1941     hjets["DeltaPhiMETWlepm1j6b0"]->Fill( DeltaPhiMETWlep , PUweight );
1942     hjets["trijetmassm1j6b0"]->Fill( Htop_mass , PUweight );
1943     hjets["trijetptm1j6b0"]->Fill( p4HadTop.Pt() , PUweight );
1944     hjets["deltaRmindijetm1j6b0"]->Fill( deltaRminjj , PUweight );
1945     hjets["deltaRmu2jetm1j6b0"]->Fill( deltaRmu2j , PUweight );
1946     hjets["deltaPhidijetm1j6b0"]->Fill( deltaPhijj , PUweight );
1947     hjets["deltaPhimu2jetm1j6b0"]->Fill( deltaPhimu2j , PUweight );
1948     hjets["Stlepm1j6b0"]->Fill( Stlep, PUweight );
1949     hjets["Htm1j6b0"]->Fill( Ht, PUweight );
1950     hjets["Njetsm1j6b0"]->Fill( njets, PUweight );
1951     }
1952     }
1953    
1954     if ( Nbtags_CSVL == 1 ){
1955     if (njets == 4){
1956     hjets["Stjetm1j4b1"]->Fill( Stjet , PUweight );
1957     hjets["DeltaRdijetm1j4b1"]->Fill( deltaRjj , PUweight );
1958     hjets["DeltaPhiMETWlepm1j4b1"]->Fill( DeltaPhiMETWlep , PUweight );
1959     hjets["trijetmassm1j4b1"]->Fill( Htop_mass , PUweight );
1960     hjets["trijetptm1j4b1"]->Fill( p4HadTop.Pt() , PUweight );
1961     hjets["deltaRmindijetm1j4b1"]->Fill( deltaRminjj , PUweight );
1962     hjets["deltaRmu2jetm1j4b1"]->Fill( deltaRmu2j , PUweight );
1963     hjets["deltaPhidijetm1j4b1"]->Fill( deltaPhijj , PUweight );
1964     hjets["deltaPhimu2jetm1j4b1"]->Fill( deltaPhimu2j , PUweight );
1965     hjets["Stlepm1j4b1"]->Fill( Stlep, PUweight );
1966     hjets["Htm1j4b1"]->Fill( Ht, PUweight );
1967     hjets["Njetsm1j4b1"]->Fill( njets, PUweight );
1968     }
1969     if (njets == 5){
1970     hjets["Stjetm1j5b1"]->Fill( Stjet , PUweight );
1971     hjets["DeltaRdijetm1j5b1"]->Fill( deltaRjj , PUweight );
1972     hjets["DeltaPhiMETWlepm1j5b1"]->Fill( DeltaPhiMETWlep , PUweight );
1973     hjets["trijetmassm1j5b1"]->Fill( Htop_mass , PUweight );
1974     hjets["trijetptm1j5b1"]->Fill( p4HadTop.Pt() , PUweight );
1975     hjets["deltaRmindijetm1j5b1"]->Fill( deltaRminjj , PUweight );
1976     hjets["deltaRmu2jetm1j5b1"]->Fill( deltaRmu2j , PUweight );
1977     hjets["deltaPhidijetm1j5b1"]->Fill( deltaPhijj , PUweight );
1978     hjets["deltaPhimu2jetm1j5b1"]->Fill( deltaPhimu2j , PUweight );
1979     hjets["Stlepm1j5b1"]->Fill( Stlep, PUweight );
1980     hjets["Htm1j5b1"]->Fill( Ht, PUweight );
1981     hjets["Njetsm1j5b1"]->Fill( njets, PUweight );
1982     }
1983     if (njets >= 6){
1984     hjets["Stjetm1j6b1"]->Fill( Stjet , PUweight );
1985     hjets["DeltaRdijetm1j6b1"]->Fill( deltaRjj , PUweight );
1986     hjets["DeltaPhiMETWlepm1j6b1"]->Fill( DeltaPhiMETWlep , PUweight );
1987     hjets["trijetmassm1j6b1"]->Fill( Htop_mass , PUweight );
1988     hjets["trijetptm1j6b1"]->Fill( p4HadTop.Pt() , PUweight );
1989     hjets["deltaRmindijetm1j6b1"]->Fill( deltaRminjj , PUweight );
1990     hjets["deltaRmu2jetm1j6b1"]->Fill( deltaRmu2j , PUweight );
1991     hjets["deltaPhidijetm1j6b1"]->Fill( deltaPhijj , PUweight );
1992     hjets["deltaPhimu2jetm1j6b1"]->Fill( deltaPhimu2j , PUweight );
1993     hjets["Stlepm1j6b1"]->Fill( Stlep, PUweight );
1994     hjets["Htm1j6b1"]->Fill( Ht, PUweight );
1995     hjets["Njetsm1j6b1"]->Fill( njets, PUweight );
1996     }
1997     }
1998    
1999     if ( Nbtags_CSVL >= 2 ){
2000     if (njets == 4){
2001     hjets["Stjetm1j4b2"]->Fill( Stjet , PUweight );
2002     hjets["DeltaRdijetm1j4b2"]->Fill( deltaRjj , PUweight );
2003     hjets["DeltaPhiMETWlepm1j4b2"]->Fill( DeltaPhiMETWlep , PUweight );
2004     hjets["trijetmassm1j4b2"]->Fill( Htop_mass , PUweight );
2005     hjets["trijetptm1j4b2"]->Fill( p4HadTop.Pt() , PUweight );
2006     hjets["deltaRmindijetm1j4b2"]->Fill( deltaRminjj , PUweight );
2007     hjets["deltaRmu2jetm1j4b2"]->Fill( deltaRmu2j , PUweight );
2008     hjets["deltaPhidijetm1j4b2"]->Fill( deltaPhijj , PUweight );
2009     hjets["deltaPhimu2jetm1j4b2"]->Fill( deltaPhimu2j , PUweight );
2010     hjets["Stlepm1j4b2"]->Fill( Stlep, PUweight );
2011     hjets["Htm1j4b2"]->Fill( Ht, PUweight );
2012     hjets["Njetsm1j4b2"]->Fill( njets, PUweight );
2013     }
2014     if (njets == 5){
2015     hjets["Stjetm1j5b2"]->Fill( Stjet , PUweight );
2016     hjets["DeltaRdijetm1j5b2"]->Fill( deltaRjj , PUweight );
2017     hjets["DeltaPhiMETWlepm1j5b2"]->Fill( DeltaPhiMETWlep , PUweight );
2018     hjets["trijetmassm1j5b2"]->Fill( Htop_mass , PUweight );
2019     hjets["trijetptm1j5b2"]->Fill( p4HadTop.Pt() , PUweight );
2020     hjets["deltaRmindijetm1j5b2"]->Fill( deltaRminjj , PUweight );
2021     hjets["deltaRmu2jetm1j5b2"]->Fill( deltaRmu2j , PUweight );
2022     hjets["deltaPhidijetm1j5b2"]->Fill( deltaPhijj , PUweight );
2023     hjets["deltaPhimu2jetm1j5b2"]->Fill( deltaPhimu2j , PUweight );
2024     hjets["Stlepm1j5b2"]->Fill( Stlep, PUweight );
2025     hjets["Htm1j5b2"]->Fill( Ht, PUweight );
2026     hjets["Njetsm1j5b2"]->Fill( njets, PUweight );
2027     }
2028     if (njets >= 6){
2029     hjets["Stjetm1j6b2"]->Fill( Stjet , PUweight );
2030     hjets["DeltaRdijetm1j6b2"]->Fill( deltaRjj , PUweight );
2031     hjets["DeltaPhiMETWlepm1j6b2"]->Fill( DeltaPhiMETWlep , PUweight );
2032     hjets["trijetmassm1j6b2"]->Fill( Htop_mass , PUweight );
2033     hjets["trijetptm1j6b2"]->Fill( p4HadTop.Pt() , PUweight );
2034     hjets["deltaRmindijetm1j6b2"]->Fill( deltaRminjj , PUweight );
2035     hjets["deltaRmu2jetm1j6b2"]->Fill( deltaRmu2j , PUweight );
2036     hjets["deltaPhidijetm1j6b2"]->Fill( deltaPhijj , PUweight );
2037     hjets["deltaPhimu2jetm1j6b2"]->Fill( deltaPhimu2j , PUweight );
2038     hjets["Stlepm1j6b2"]->Fill( Stlep, PUweight );
2039     hjets["Htm1j6b2"]->Fill( Ht, PUweight );
2040     hjets["Njetsm1j6b2"]->Fill( njets, PUweight );
2041     }
2042     }
2043    
2044     }
2045 algomez 1.16
2046 algomez 1.17 if ( total_muons == 2){
2047     if ( Nbtags_CSVL == 0 ){
2048     if (njets == 4){
2049     hjets["Stjetm2j4b0"]->Fill( Stjet , PUweight );
2050     hjets["DeltaRdijetm2j4b0"]->Fill( deltaRjj , PUweight );
2051     hjets["DeltaPhiMETWlepm2j4b0"]->Fill( DeltaPhiMETWlep , PUweight );
2052     hjets["trijetmassm2j4b0"]->Fill( Htop_mass , PUweight );
2053     hjets["trijetptm2j4b0"]->Fill( p4HadTop.Pt() , PUweight );
2054     hjets["deltaRmindijetm2j4b0"]->Fill( deltaRminjj , PUweight );
2055     hjets["deltaRmu2jetm2j4b0"]->Fill( deltaRmu2j , PUweight );
2056     hjets["deltaPhidijetm2j4b0"]->Fill( deltaPhijj , PUweight );
2057     hjets["deltaPhimu2jetm2j4b0"]->Fill( deltaPhimu2j , PUweight );
2058     hjets["Stlepm2j4b0"]->Fill( Stlep, PUweight );
2059     hjets["Htm2j4b0"]->Fill( Ht, PUweight );
2060     hjets["Njetsm2j4b0"]->Fill( njets, PUweight );
2061     }
2062     if (njets == 5){
2063     hjets["Stjetm2j5b0"]->Fill( Stjet , PUweight );
2064     hjets["DeltaRdijetm2j5b0"]->Fill( deltaRjj , PUweight );
2065     hjets["DeltaPhiMETWlepm2j5b0"]->Fill( DeltaPhiMETWlep , PUweight );
2066     hjets["trijetmassm2j5b0"]->Fill( Htop_mass , PUweight );
2067     hjets["trijetptm2j5b0"]->Fill( p4HadTop.Pt() , PUweight );
2068     hjets["deltaRmindijetm2j5b0"]->Fill( deltaRminjj , PUweight );
2069     hjets["deltaRmu2jetm2j5b0"]->Fill( deltaRmu2j , PUweight );
2070     hjets["deltaPhidijetm2j5b0"]->Fill( deltaPhijj , PUweight );
2071     hjets["deltaPhimu2jetm2j5b0"]->Fill( deltaPhimu2j , PUweight );
2072     hjets["Stlepm2j5b0"]->Fill( Stlep, PUweight );
2073     hjets["Htm2j5b0"]->Fill( Ht, PUweight );
2074     hjets["Njetsm2j5b0"]->Fill( njets, PUweight );
2075     }
2076     if (njets >= 6){
2077     hjets["Stjetm2j6b0"]->Fill( Stjet , PUweight );
2078     hjets["DeltaRdijetm2j6b0"]->Fill( deltaRjj , PUweight );
2079     hjets["DeltaPhiMETWlepm2j6b0"]->Fill( DeltaPhiMETWlep , PUweight );
2080     hjets["trijetmassm2j6b0"]->Fill( Htop_mass , PUweight );
2081     hjets["trijetptm2j6b0"]->Fill( p4HadTop.Pt() , PUweight );
2082     hjets["deltaRmindijetm2j6b0"]->Fill( deltaRminjj , PUweight );
2083     hjets["deltaRmu2jetm2j6b0"]->Fill( deltaRmu2j , PUweight );
2084     hjets["deltaPhidijetm2j6b0"]->Fill( deltaPhijj , PUweight );
2085     hjets["deltaPhimu2jetm2j6b0"]->Fill( deltaPhimu2j , PUweight );
2086     hjets["Stlepm2j6b0"]->Fill( Stlep, PUweight );
2087     hjets["Htm2j6b0"]->Fill( Ht, PUweight );
2088     hjets["Njetsm2j6b0"]->Fill( njets, PUweight );
2089     }
2090     }
2091    
2092     if ( Nbtags_CSVL == 1 ){
2093     if (njets == 4){
2094     hjets["Stjetm2j4b1"]->Fill( Stjet , PUweight );
2095     hjets["DeltaRdijetm2j4b1"]->Fill( deltaRjj , PUweight );
2096     hjets["DeltaPhiMETWlepm2j4b1"]->Fill( DeltaPhiMETWlep , PUweight );
2097     hjets["trijetmassm2j4b1"]->Fill( Htop_mass , PUweight );
2098     hjets["trijetptm2j4b1"]->Fill( p4HadTop.Pt() , PUweight );
2099     hjets["deltaRmindijetm2j4b1"]->Fill( deltaRminjj , PUweight );
2100     hjets["deltaRmu2jetm2j4b1"]->Fill( deltaRmu2j , PUweight );
2101     hjets["deltaPhidijetm2j4b1"]->Fill( deltaPhijj , PUweight );
2102     hjets["deltaPhimu2jetm2j4b1"]->Fill( deltaPhimu2j , PUweight );
2103     hjets["Stlepm2j4b1"]->Fill( Stlep, PUweight );
2104     hjets["Htm2j4b1"]->Fill( Ht, PUweight );
2105     hjets["Njetsm2j4b1"]->Fill( njets, PUweight );
2106     }
2107     if (njets == 5){
2108     hjets["Stjetm2j5b1"]->Fill( Stjet , PUweight );
2109     hjets["DeltaRdijetm2j5b1"]->Fill( deltaRjj , PUweight );
2110     hjets["DeltaPhiMETWlepm2j5b1"]->Fill( DeltaPhiMETWlep , PUweight );
2111     hjets["trijetmassm2j5b1"]->Fill( Htop_mass , PUweight );
2112     hjets["trijetptm2j5b1"]->Fill( p4HadTop.Pt() , PUweight );
2113     hjets["deltaRmindijetm2j5b1"]->Fill( deltaRminjj , PUweight );
2114     hjets["deltaRmu2jetm2j5b1"]->Fill( deltaRmu2j , PUweight );
2115     hjets["deltaPhidijetm2j5b1"]->Fill( deltaPhijj , PUweight );
2116     hjets["deltaPhimu2jetm2j5b1"]->Fill( deltaPhimu2j , PUweight );
2117     hjets["Stlepm2j5b1"]->Fill( Stlep, PUweight );
2118     hjets["Htm2j5b1"]->Fill( Ht, PUweight );
2119     hjets["Njetsm2j5b1"]->Fill( njets, PUweight );
2120     }
2121     if (njets >= 6){
2122     hjets["Stjetm2j6b1"]->Fill( Stjet , PUweight );
2123     hjets["DeltaRdijetm2j6b1"]->Fill( deltaRjj , PUweight );
2124     hjets["DeltaPhiMETWlepm2j6b1"]->Fill( DeltaPhiMETWlep , PUweight );
2125     hjets["trijetmassm2j6b1"]->Fill( Htop_mass , PUweight );
2126     hjets["trijetptm2j6b1"]->Fill( p4HadTop.Pt() , PUweight );
2127     hjets["deltaRmindijetm2j6b1"]->Fill( deltaRminjj , PUweight );
2128     hjets["deltaRmu2jetm2j6b1"]->Fill( deltaRmu2j , PUweight );
2129     hjets["deltaPhidijetm2j6b1"]->Fill( deltaPhijj , PUweight );
2130     hjets["deltaPhimu2jetm2j6b1"]->Fill( deltaPhimu2j , PUweight );
2131     hjets["Stlepm2j6b1"]->Fill( Stlep, PUweight );
2132     hjets["Htm2j6b1"]->Fill( Ht, PUweight );
2133     hjets["Njetsm2j6b1"]->Fill( njets, PUweight );
2134     }
2135     }
2136    
2137     if ( Nbtags_CSVL >= 2 ){
2138     if (njets == 4){
2139     hjets["Stjetm2j4b2"]->Fill( Stjet , PUweight );
2140     hjets["DeltaRdijetm2j4b2"]->Fill( deltaRjj , PUweight );
2141     hjets["DeltaPhiMETWlepm2j4b2"]->Fill( DeltaPhiMETWlep , PUweight );
2142     hjets["trijetmassm2j4b2"]->Fill( Htop_mass , PUweight );
2143     hjets["trijetptm2j4b2"]->Fill( p4HadTop.Pt() , PUweight );
2144     hjets["deltaRmindijetm2j4b2"]->Fill( deltaRminjj , PUweight );
2145     hjets["deltaRmu2jetm2j4b2"]->Fill( deltaRmu2j , PUweight );
2146     hjets["deltaPhidijetm2j4b2"]->Fill( deltaPhijj , PUweight );
2147     hjets["deltaPhimu2jetm2j4b2"]->Fill( deltaPhimu2j , PUweight );
2148     hjets["Stlepm2j4b2"]->Fill( Stlep, PUweight );
2149     hjets["Htm2j4b2"]->Fill( Ht, PUweight );
2150     hjets["Njetsm2j4b2"]->Fill( njets, PUweight );
2151     }
2152     if (njets == 5){
2153     hjets["Stjetm2j5b2"]->Fill( Stjet , PUweight );
2154     hjets["DeltaRdijetm2j5b2"]->Fill( deltaRjj , PUweight );
2155     hjets["DeltaPhiMETWlepm2j5b2"]->Fill( DeltaPhiMETWlep , PUweight );
2156     hjets["trijetmassm2j5b2"]->Fill( Htop_mass , PUweight );
2157     hjets["trijetptm2j5b2"]->Fill( p4HadTop.Pt() , PUweight );
2158     hjets["deltaRmindijetm2j5b2"]->Fill( deltaRminjj , PUweight );
2159     hjets["deltaRmu2jetm2j5b2"]->Fill( deltaRmu2j , PUweight );
2160     hjets["deltaPhidijetm2j5b2"]->Fill( deltaPhijj , PUweight );
2161     hjets["deltaPhimu2jetm2j5b2"]->Fill( deltaPhimu2j , PUweight );
2162     hjets["Stlepm2j5b2"]->Fill( Stlep, PUweight );
2163     hjets["Htm2j5b2"]->Fill( Ht, PUweight );
2164     hjets["Njetsm2j5b2"]->Fill( njets, PUweight );
2165     }
2166     if (njets >= 6){
2167     hjets["Stjetm2j6b2"]->Fill( Stjet , PUweight );
2168     hjets["DeltaRdijetm2j6b2"]->Fill( deltaRjj , PUweight );
2169     hjets["DeltaPhiMETWlepm2j6b2"]->Fill( DeltaPhiMETWlep , PUweight );
2170     hjets["trijetmassm2j6b2"]->Fill( Htop_mass , PUweight );
2171     hjets["trijetptm2j6b2"]->Fill( p4HadTop.Pt() , PUweight );
2172     hjets["deltaRmindijetm2j6b2"]->Fill( deltaRminjj , PUweight );
2173     hjets["deltaRmu2jetm2j6b2"]->Fill( deltaRmu2j , PUweight );
2174     hjets["deltaPhidijetm2j6b2"]->Fill( deltaPhijj , PUweight );
2175     hjets["deltaPhimu2jetm2j6b2"]->Fill( deltaPhimu2j , PUweight );
2176     hjets["Stlepm2j6b2"]->Fill( Stlep, PUweight );
2177     hjets["Htm2j6b2"]->Fill( Ht, PUweight );
2178     hjets["Njetsm2j6b2"]->Fill( njets, PUweight );
2179     }
2180     }
2181    
2182     }
2183 algomez 1.16
2184     hjets["Stjet41"]->Fill( Stjet , PUweight );
2185     hjets["Stjet42"]->Fill( Stjet , PUweight );
2186     if (njets > 4){
2187     hjets["Stjet51"]->Fill( Stjet , PUweight );
2188     hjets["Stjet52"]->Fill( Stjet , PUweight );
2189     }
2190     if (njets > 5){
2191     hjets["Stjet61"]->Fill( Stjet , PUweight );
2192     hjets["Stjet62"]->Fill( Stjet , PUweight );
2193     }
2194 algomez 1.7 // Cuts
2195 algomez 1.14 //bool passcut = true;
2196 algomez 1.15 if ( Ht < 300. ) return kTRUE;
2197 algomez 1.6
2198 algomez 1.14 if ( Ht >= 300.0 ) {
2199 algomez 1.15 cutmap["Ht"] += PUweight;
2200 algomez 1.16 if(Nbtags_CSVM == 4){
2201     cout <<"Run : "<< ntuple->run <<", Lumi : "<< ntuple->lumi << ", Event: "<< ntuple->event << endl;
2202     for (size_t h = 0; h < p4jets.size(); ++h){
2203     TopJetEvent jet = jets[h];
2204     cout << h << " " << p4jets[h].Pt() << " " << jet.btag_CSV << endl;
2205     }
2206     }
2207    
2208 algomez 1.15
2209 algomez 1.16 /*double jet1CSVMpt = 0;
2210 algomez 1.15 double jet2CSVMpt = 0;
2211     double jet3CSVMpt = 0;
2212     double jet4CSVMpt = 0;
2213     double jet1CSVLpt = 0;
2214     double jet2CSVLpt = 0;
2215     double jet3CSVLpt = 0;
2216 algomez 1.16 double jet4CSVLpt = 0;*/
2217 algomez 1.15
2218     //if ( Nbtags_CSVM < 1 ) return kTRUE;
2219    
2220 algomez 1.16 /*if ( Nbtags_CSVL > 0 ){ jet1CSVLpt = p4bjetscsvl[0].Pt(); hjets["jet1_CSVL_pt"]->Fill ( jet1CSVLpt, PUweight ); }
2221 algomez 1.15 if ( Nbtags_CSVL > 1 ){ jet2CSVLpt = p4bjetscsvl[1].Pt(); hjets["jet2_CSVL_pt"]->Fill ( jet2CSVLpt, PUweight ); }
2222     if ( Nbtags_CSVL > 2 ){ jet3CSVLpt = p4bjetscsvl[2].Pt(); hjets["jet3_CSVL_pt"]->Fill ( jet3CSVLpt, PUweight ); }
2223     if ( Nbtags_CSVL > 3 ){ jet4CSVLpt = p4bjetscsvl[3].Pt(); hjets["jet4_CSVL_pt"]->Fill ( jet4CSVLpt, PUweight ); }
2224     if ( Nbtags_CSVM > 0 ){ jet1CSVMpt = p4bjetscsvm[0].Pt(); hjets["jet1_CSVM_pt"]->Fill ( jet1CSVMpt, PUweight ); }
2225     if ( Nbtags_CSVM > 1 ){ jet2CSVMpt = p4bjetscsvm[1].Pt(); hjets["jet2_CSVM_pt"]->Fill ( jet2CSVMpt, PUweight ); }
2226     if ( Nbtags_CSVM > 2 ){ jet3CSVMpt = p4bjetscsvl[2].Pt(); hjets["jet3_CSVM_pt"]->Fill ( jet3CSVMpt, PUweight ); }
2227 algomez 1.16 if ( Nbtags_CSVM > 3 ){ jet4CSVMpt = p4bjetscsvl[3].Pt(); hjets["jet4_CSVM_pt"]->Fill ( jet4CSVMpt, PUweight ); } */
2228    
2229 algomez 1.17
2230     if ( !fbtag_up && fbtag_down && NbtagsDown_CSVL < 1 ){ cutmap["4Jet0b"] += PUweight; return kTRUE;}
2231     if ( !fbtag_up && !fbtag_down && Nbtags_CSVL < 1 ){ cutmap["4Jet0b"] += PUweight; return kTRUE;}
2232     if ( fbtag_up && !fbtag_down && NbtagsUp_CSVL < 1 ){ cutmap["4Jet0b"] += PUweight; return kTRUE;}
2233     if ( Nbtags_CSVL > 0){
2234 algomez 1.15 cutmap["4Jet1b"] += PUweight;
2235 algomez 1.17
2236     //double jet1CSVLpt = p4bjetscsvl[0].Pt();
2237     //hjets["jet1_CSVL_pt"]->Fill ( jet1CSVLpt, PUweight );
2238    
2239     hPVs["Nreweight"]->Fill( total_pvs, PUweight );
2240     hMET["Ht"]->Fill( Ht, PUweight );
2241     hMET["MET"]->Fill( p4MET.Pt(), PUweight );
2242     hMET["phi"]->Fill( p4MET.Phi(), PUweight );
2243     hMET["Stlep"]->Fill( Stlep , PUweight );
2244     hMET["Stjet"]->Fill( Stjet , PUweight );
2245     hjets["Njets"]->Fill( njets, PUweight );
2246     hjets["1st_pt"]->Fill( p4jets[0].Pt(), PUweight );
2247     hjets["1st_eta"]->Fill( p4jets[0].Eta(), PUweight );
2248     hjets["2nd_pt"]->Fill( p4jets[1].Pt(), PUweight );
2249     hjets["2nd_eta"]->Fill( p4jets[1].Eta(), PUweight );
2250     hjets["3rd_pt"]->Fill( p4jets[2].Pt(), PUweight );
2251     hjets["3rd_eta"]->Fill( p4jets[2].Eta(), PUweight );
2252     hjets["4th_pt"]->Fill( p4jets[3].Pt(), PUweight );
2253     hjets["4th_eta"]->Fill( p4jets[3].Eta(), PUweight );
2254     hjets["5th_pt"]->Fill( p4jets[4].Pt(), PUweight );
2255     hjets["6th_pt"]->Fill( p4jets[5].Pt(), PUweight );
2256     hjets["7th_pt"]->Fill( p4jets[6].Pt(), PUweight );
2257     hjets["mindeltaRjj"]->Fill( deltaRminjj, PUweight );
2258     hjets["deltaRjj"]->Fill( deltaRjj, PUweight );
2259     hjets["deltaPhijj"]->Fill( deltaPhijj, PUweight );
2260     hjets["deltaRmu2j"]->Fill( deltaRmu2j, PUweight );
2261     hjets["deltaPhimu2j"]->Fill( deltaPhimu2j, PUweight );
2262     hmuons["N"]->Fill( total_muons, PUweight );
2263     hmuons["pt"]->Fill( p4lepton.Pt(), PUweight );
2264     hmuons["eta"]->Fill( p4lepton.Eta(), PUweight );
2265     hmuons["phi"]->Fill( p4lepton.Phi(), PUweight );
2266     hmuons["deltaR"]->Fill( deltaR, PUweight );
2267     hM["WMt"]->Fill( WMt, PUweight );
2268    
2269     // B-tagging
2270     hjets["Nbtags_CSVL"]->Fill( Nbtags_CSVL, PUweight );
2271     hjets["Nbtags_CSVM"]->Fill( Nbtags_CSVM, PUweight );
2272     hjets["Nbtags_CSVT"]->Fill( Nbtags_CSVT, PUweight );
2273     hjets["Nbtags_TCHPM"]->Fill( Nbtags_TCHPM, PUweight );
2274    
2275    
2276     hM["dileadjet"]->Fill( dileadjet_mass, PUweight );
2277     hM["hadW_mass"]->Fill( hadW_mass, PUweight );
2278     hM["top_mass"]->Fill( Htop_mass, PUweight );
2279     hM["Leptop_mass"]->Fill( Leptop_mass, PUweight );
2280     hM["top_pt"]->Fill( p4HadTop.Pt(), PUweight );
2281     hM["Leptop_pt"]->Fill( Leptop_pt, PUweight );
2282     hM["chi2"]->Fill( tmpchi2, PUweight );
2283     hM["lepW_mass"]->Fill(lepW_mass, PUweight );
2284     hM["diWdeltaphi"]->Fill( diWdeltaphi , PUweight );
2285     hM["diWdeltaR"]->Fill( diWdeltaR , PUweight );
2286     hM["lepW_pt"]->Fill( lepW_pt, PUweight );
2287     hMET["deltaPhiMETWlep"]->Fill( DeltaPhiMETWlep , PUweight );
2288     hMET["deltaPhiMETlep"]->Fill( DeltaPhiMETlep , PUweight );
2289     hMET["deltaPhiNulep"]->Fill( DeltaPhiNulep , PUweight );
2290    
2291 algomez 1.15 if ( p4jets[3].Pt() > 50.){
2292     cutmap["4JetCut"] += PUweight;
2293     if ( Stjet >= 500 ) {
2294     cutmap["Stjet"] += PUweight;
2295 algomez 1.17 hPVs["Nreweight_cut2"]->Fill( total_pvs, PUweight );
2296     hMET["Ht_cut2"]->Fill( Ht, PUweight );
2297     hMET["MET_cut2"]->Fill( p4MET.Pt(), PUweight );
2298     hMET["Stlep_cut2"]->Fill( Stlep , PUweight );
2299     hMET["Stjet_cut2"]->Fill( Stjet , PUweight );
2300     hM["lepW_mass_cut2"]->Fill(p4LepW.M(), PUweight );
2301     hMET["deltaPhiMETWlep_cut2"]->Fill( DeltaPhiMETWlep , PUweight );
2302     hMET["deltaPhiMETlep_cut2"]->Fill( DeltaPhiMETlep , PUweight );
2303     hMET["deltaPhiNulep_cut2"]->Fill( DeltaPhiNulep , PUweight );
2304     hjets["Njets_cut2"]->Fill(njets, PUweight );
2305     hjets["1st_pt_cut2"]->Fill( p4jets[0].Pt(), PUweight );
2306     hjets["1st_eta_cut2"]->Fill( p4jets[0].Eta(), PUweight );
2307     hjets["2nd_pt_cut2"]->Fill( p4jets[1].Pt(), PUweight );
2308     hjets["2nd_eta_cut2"]->Fill( p4jets[1].Eta(), PUweight );
2309     hjets["3rd_pt_cut2"]->Fill( p4jets[2].Pt(), PUweight );
2310     hjets["4th_pt_cut2"]->Fill( p4jets[3].Pt(), PUweight );
2311     hjets["5th_pt_cut2"]->Fill( p4jets[4].Pt(), PUweight );
2312     hjets["6th_pt_cut2"]->Fill( p4jets[5].Pt(), PUweight );
2313     hjets["deltaRjj_cut2"]->Fill( deltaRminjj, PUweight );
2314     hmuons["pt_cut2"]->Fill( p4lepton.Pt(), PUweight );
2315     hmuons["deltaR_cut2"]->Fill( deltaR, PUweight );
2316     hM["WMt_cut2"]->Fill( WMt, PUweight );
2317     hM["dileadjet_cut2"]->Fill( dileadjet_mass, PUweight );
2318     hM["hadW_mass_cut2"]->Fill( hadW_mass, PUweight );
2319     hM["top_mass_cut2"]->Fill( Htop_mass, PUweight );
2320     hM["top_pt_cut2"]->Fill( p4HadTop.Pt(), PUweight );
2321 algomez 1.15 } // Stjet cut
2322     } // 4 leading jet
2323    
2324 algomez 1.17 //if ( njets < 4 ) return kTRUE;
2325 algomez 1.14 // Variables in 4Tree
2326 algomez 1.10 MyStoreTree->GetGeneralVariable()->PUWeight = PUweight;
2327 algomez 1.17 MyStoreTree->GetMuonVariable()->Muonpt = p4lepton.Pt();
2328     MyStoreTree->GetMuonVariable()->Muoneta = p4lepton.Eta();
2329     MyStoreTree->GetMuonVariable()->Muonphi = p4lepton.Phi();
2330     MyStoreTree->GetMuonVariable()->MuondeltaR = deltaR;
2331 algomez 1.10 MyStoreTree->GetMetVariable()->Ht = Ht;
2332 algomez 1.15 MyStoreTree->GetMetVariable()->MET = p4MET.Pt();
2333 algomez 1.17 MyStoreTree->GetMetVariable()->METphi = p4MET.Phi();
2334 algomez 1.10 MyStoreTree->GetMetVariable()->Stlep = Stlep;
2335     MyStoreTree->GetMetVariable()->Stjet = Stjet;
2336 algomez 1.17 MyStoreTree->GetMetVariable()->diWdeltaphi = diWdeltaphi;
2337     MyStoreTree->GetMetVariable()->diWdeltaR = diWdeltaR;
2338 algomez 1.15 MyStoreTree->GetMetVariable()->DeltaPhiMETWlep = DeltaPhiMETWlep;
2339     MyStoreTree->GetMetVariable()->DeltaPhiMETlep = DeltaPhiMETlep;
2340     MyStoreTree->GetMetVariable()->DeltaPhiNulep = DeltaPhiNulep;
2341 algomez 1.17 MyStoreTree->GetMetVariable()->LepWPt = lepW_pt;
2342     MyStoreTree->GetMetVariable()->topmass = Htop_mass;
2343     MyStoreTree->GetMetVariable()->toppt = p4HadTop.Pt();
2344 algomez 1.10 MyStoreTree->GetJetVariable()->numjets= njets;
2345 algomez 1.11 MyStoreTree->GetJetVariable()->numBjets_csvl= Nbtags_CSVL;
2346 algomez 1.14 MyStoreTree->GetJetVariable()->numBjets_csvm= Nbtags_CSVM;
2347     MyStoreTree->GetJetVariable()->numBjets_csvt= Nbtags_CSVT;
2348     MyStoreTree->GetJetVariable()->jet1pt = p4jets[0].Pt() ;
2349     MyStoreTree->GetJetVariable()->jet2pt = p4jets[1].Pt() ;
2350     MyStoreTree->GetJetVariable()->jet3pt = p4jets[2].Pt() ;
2351     MyStoreTree->GetJetVariable()->jet4pt = p4jets[3].Pt() ;
2352 algomez 1.16 MyStoreTree->GetJetVariable()->deltaRmindijet = deltaRminjj ;
2353 algomez 1.15 MyStoreTree->GetJetVariable()->deltaRdijet = deltaRjj ;
2354 algomez 1.16 MyStoreTree->GetJetVariable()->deltaPhidijet = deltaPhijj ;
2355     MyStoreTree->GetJetVariable()->deltaRmu2jet = deltaRmu2j ;
2356     MyStoreTree->GetJetVariable()->deltaPhimu2jet = deltaPhimu2j ;
2357 algomez 1.17 //MyStoreTree->GetJetVariable()->jet1CSVLpt = jet1CSVLpt ;
2358     /*if (p4bjetscsvl[1].Pt() < 1000 && p4bjetscsvl[1].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet2CSVLpt = p4bjetscsvl[1].Pt() ;
2359 algomez 1.16 if (p4bjetscsvl[2].Pt() < 1000 && p4bjetscsvl[2].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet3CSVLpt = p4bjetscsvl[2].Pt() ;
2360     if (p4bjetscsvl[3].Pt() < 1000 && p4bjetscsvl[3].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet4CSVLpt = p4bjetscsvl[3].Pt() ;
2361     if (p4bjetscsvm[0].Pt() < 1000 && p4bjetscsvm[0].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet1CSVMpt = p4bjetscsvm[0].Pt() ;
2362     if (p4bjetscsvm[1].Pt() < 1000 && p4bjetscsvm[1].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet2CSVMpt = p4bjetscsvm[1].Pt() ;
2363     if (p4bjetscsvm[2].Pt() < 1000 && p4bjetscsvm[2].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet3CSVMpt = p4bjetscsvm[2].Pt() ;
2364     if (p4bjetscsvm[3].Pt() < 1000 && p4bjetscsvm[3].Pt() > 40 ) MyStoreTree->GetJetVariable()->jet4CSVMpt = p4bjetscsvm[3].Pt() ;*/
2365 algomez 1.10 //////////////////////////////////////////////////////////////////////////////////
2366 algomez 1.17
2367     } // 1 btag */
2368 algomez 1.15 } // Ht
2369     } // jets
2370 algomez 1.1
2371 algomez 1.9 MyStoreTree->GetGeneralVariable()->Run = ntuple->run;
2372     MyStoreTree->GetGeneralVariable()->Lumi = ntuple->lumi;
2373     MyStoreTree->GetGeneralVariable()->Event = ntuple->event;
2374 algomez 1.8
2375 algomez 1.13 MyStoreTree->GetStoreTree()->Fill();
2376 algomez 1.14
2377 algomez 1.1 if (fVerbose) cout << "done analysis" << endl;
2378     return kTRUE;
2379     }
2380    
2381     void Analyzer::SlaveTerminate()
2382     {
2383     // The SlaveTerminate() function is called after all entries or objects
2384     // have been processed. When running with PROOF SlaveTerminate() is called
2385     // on each slave server.
2386    
2387     // fill cutflow histogram
2388    
2389     int ibin = 1;
2390     for ( vector<string>::const_iterator ivec= fCutLabels.begin(); ivec != fCutLabels.end(); ++ivec )
2391     // for ( map<string, int >::const_iterator imap=cutmap.begin(); imap!=cutmap.end(); ++imap )
2392     {
2393     hcutflow->SetBinContent( ibin, cutmap[ *ivec ] );
2394     ibin++;
2395     }
2396 algomez 1.8
2397 algomez 1.1 // Write the ntuple to the file
2398     if (fFile) {
2399 algomez 1.8 Bool_t cleanup = kFALSE;
2400     TDirectory *savedir = gDirectory;
2401 algomez 1.15 if(MyStoreTree->GetStoreTree()->GetEntries() > 0){
2402 algomez 1.8 fFile->cd();
2403     h1test->Write();
2404     hcutflow->Write();
2405 algomez 1.15 MyStoreTree->GetStoreTree()->Write();
2406 algomez 1.8 //h2_pt_Wprime->Write();
2407     fFile->mkdir("muons");
2408     fFile->cd("muons");
2409     for ( map<string,TH1* >::const_iterator imap=hmuons.begin(); imap!=hmuons.end(); ++imap ) {
2410     TH1 *temp = imap->second;
2411     if ( temp->GetEntries() > 0 )
2412     temp->Write();
2413     //else cout << "Warning: empty histogram " << temp->GetName() << " will not be written to file." << endl;
2414     }
2415     fFile->cd();
2416     fFile->mkdir("PVs");
2417     fFile->cd("PVs");
2418     for ( map<string,TH1* >::const_iterator imap=hPVs.begin(); imap!=hPVs.end(); ++imap ) {
2419     TH1 *temp = imap->second;
2420     if ( temp->GetEntries() > 0 )
2421     temp->Write();
2422     //else cout << "Warning: empty histogram " << temp->GetName() << " will not be written to file." << endl;
2423     }
2424     fFile->cd();
2425     fFile->mkdir("jets");
2426     fFile->cd("jets");
2427     for ( map<string,TH1* >::const_iterator imap=hjets.begin(); imap!=hjets.end(); ++imap ) {
2428     TH1 *temp = imap->second;
2429     if ( temp->GetEntries() > 0 )
2430     temp->Write();
2431     }
2432     fFile->cd();
2433     fFile->mkdir("mass");
2434     fFile->cd("mass");
2435     for ( map<string,TH1* >::const_iterator imap=hM.begin(); imap!=hM.end(); ++imap ) {
2436     TH1 *temp = imap->second;
2437     if ( temp->GetEntries() > 0 )
2438     temp->Write();
2439     }
2440     fFile->cd();
2441     fFile->mkdir("MET");
2442     fFile->cd("MET");
2443     for ( map<string,TH1* >::const_iterator imap=hMET.begin(); imap!=hMET.end(); ++imap ) {
2444     TH1 *temp = imap->second;
2445     if ( temp->GetEntries() > 0 )
2446     temp->Write();
2447     }
2448     fFile->cd();
2449    
2450     fProofFile->Print();
2451     fOutput->Add(fProofFile);
2452     } else {
2453     cleanup = kTRUE;
2454     }
2455 algomez 1.1
2456    
2457     h1test->SetDirectory(0);
2458     hcutflow->SetDirectory(0);
2459 algomez 1.15 MyStoreTree->GetStoreTree()->SetDirectory(0);
2460 algomez 1.1 gDirectory = savedir;
2461     fFile->Close();
2462     // Cleanup, if needed
2463     if (cleanup) {
2464 algomez 1.8 TUrl uf(*(fFile->GetEndpointUrl()));
2465     SafeDelete(fFile);
2466     gSystem->Unlink(uf.GetFile());
2467     SafeDelete(fProofFile);
2468 algomez 1.1 }
2469     }
2470    
2471     }
2472    
2473     void Analyzer::Terminate()
2474     {
2475     // The Terminate() function is the last function to be called during
2476     // a query. It always runs on the client, it can be used to present
2477     // the results graphically or save the results to file.
2478    
2479     Info("Terminate","Analyzer done.");
2480     }