int main(int argc, char** argv) { std::vector<std::string> inputFileNames; std::string plotFileName; TH1D * METResolutions = 0; double doJES = 1; bool isData = false; bool applyJetPt = false; bool e_mtw = false; int smearingSkim = 1; string sample = ""; string ttDecayMode = ""; string prefix = ""; string myFlavor = ""; int ptrw = 0; int metphi = 0; int nWM = 0; int nWP = 0; int nSRP = 0; int nSRM = 0; int nSBP = 0; int nSBM = 0; TString dirName = ""; bool isStack = false; for (int f = 1; f < argc; f++) { std::string arg_fth(*(argv + f)); if (arg_fth == "prefix") { f++; std::string in(*(argv + f)); prefix = in + string("_"); } else if (arg_fth == "input") { f++; std::string in(*(argv + f)); if (dirName == "TreesEle" && in == "Data") inputFileNames.push_back(string("~/work/samples/postMoriond/Aug2013/" + prefix + in + "_Ele.root")); else inputFileNames.push_back(string("~/work/samples/postMoriond/Aug2013/" + prefix + in + ".root")); sample = in; plotFileName = prefix + in + "_plots.root"; } else if (arg_fth == "JES") { f++; std::string in(*(argv + f)); doJES = atof(in.c_str()); } else if (arg_fth == "isData") { f++; std::string in(*(argv + f)); if (in == "yes" || in == "YES" || in == "Yes" || in == "y" || in == "Y") isData = true; else isData = false; } else if (arg_fth == "METResolFileName") { f++; std::string in(*(argv + f)); TFile * METResolFileName = TFile::Open(in.c_str()); METResolutions = (TH1D*) METResolFileName->Get("METresolutions"); } else if (arg_fth == "smearingSkim") { f++; std::string in(*(argv + f)); smearingSkim = atof(in.c_str()); } else if (arg_fth == "ttDecayMode") { f++; std::string in(*(argv + f)); ttDecayMode = in; } else if (arg_fth == "dirName") { f++; std::string in(*(argv + f)); dirName = in.c_str(); } else if (arg_fth == "stack") { f++; std::string in(*(argv + f)); if (in == "yes" || in == "YES" || in == "Yes" || in == "y" || in == "Y") isStack = true; else isStack = false; } else if (arg_fth == "dojetpt") { f++; std::string in(*(argv + f)); if (in == "yes" || in == "YES" || in == "Yes" || in == "y" || in == "Y") applyJetPt = true; else applyJetPt = false; } else if (arg_fth == "flavor") { f++; std::string in(*(argv + f)); myFlavor = in; } else if (arg_fth == "ptrw") { f++; std::string in(*(argv + f)); ptrw = atof(in.c_str()); } else if (arg_fth == "metphi") { f++; std::string in(*(argv + f)); metphi = atof(in.c_str()); cout << "================ " << metphi << endl; } else if (arg_fth == "emtw") { f++; std::string in(*(argv + f)); if (in == "yes" || in == "YES" || in == "Yes" || in == "y" || in == "Y") e_mtw = true; else e_mtw = false; } } int channel = 0; if (dirName == "TreesEle") channel = 1; PVHists atLeastOnGPV("DefW_PV"); JetHists Jets("DefW_Jet", 2); if (!isStack) Jets.SetErrors(true); JetHists BJets("DefW_BJet", 2); if (!isStack) BJets.SetErrors(true); JetHists nonBJets("DefW_nonBJet", 2); if (!isStack) nonBJets.SetErrors(true); JetHists FwDJet("DefW_FwD", 2); if (!isStack) FwDJet.SetErrors(true); MuonHists GoldenFinalPUMuons("DefW_Muon", 3); if (!isStack) GoldenFinalPUMuons.SetErrors(true); MetHists MetHist("DefW_Met"); if (!isStack) MetHist.SetErrors(true); PVHists atLeastOnGPV_PuW("PuW_PV"); JetHists Jets_PuW("PuW_Jet", 2); if (!isStack) Jets_PuW.SetErrors(true); JetHists BJets_PuW("PuW_BJet", 2); if (!isStack) BJets_PuW.SetErrors(true); JetHists nonBJets_PuW("PuW_nonBJet", 2); if (!isStack) nonBJets_PuW.SetErrors(true); JetHists FwDJet_PuW("PuW_FwD", 2); if (!isStack) FwDJet_PuW.SetErrors(true); MuonHists GoldenFinalPUMuons_PuW("PuW_Muon", 3); if (!isStack) GoldenFinalPUMuons_PuW.SetErrors(true); MetHists MetHist_PuW("PuW_Met"); if (!isStack) MetHist_PuW.SetErrors(true); PVHists atLeastOnGPV_BtagPuW("BtagPuW_PV"); JetHists Jets_BtagPuW("BtagPuW_Jet", 2); if (!isStack) Jets_BtagPuW.SetErrors(true); JetHists BJets_BtagPuW("BtagPuW_BJet", 2); if (!isStack) BJets_BtagPuW.SetErrors(true); JetHists nonBJets_BtagPuW("BtagPuW_nonBJet", 2); if (!isStack) nonBJets_BtagPuW.SetErrors(true); JetHists FwDJet_BtagPuW("BtagPuW_FwD", 2); if (!isStack) FwDJet_BtagPuW.SetErrors(true); MuonHists GoldenFinalPUMuons_BtagPuW("BtagPuW_Muon", 3); if (!isStack) GoldenFinalPUMuons_BtagPuW.SetErrors(true); MetHists MetHist_BtagPuW("BtagPuW_Met"); if (!isStack) MetHist_BtagPuW.SetErrors(true); PVHists atLeastOnGPV_allW("allW_PV"); JetHists Jets_allW("allW_Jet", 2); if (!isStack) Jets_allW.SetErrors(true); JetHists BJets_allW("allW_BJet", 2); if (!isStack) BJets_allW.SetErrors(true); JetHists nonBJets_allW("allW_nonBJet", 2); if (!isStack) nonBJets_allW.SetErrors(true); JetHists FwDJet_allW("allW_FwD", 2); if (!isStack) FwDJet_allW.SetErrors(true); MuonHists GoldenFinalPUMuons_allW("allW_Muon", 3); if (!isStack) GoldenFinalPUMuons_allW.SetErrors(true); MetHists MetHist_allW("allW_Met"); if (!isStack) MetHist_allW.SetErrors(true); SingleTopHistograms Default_Def("Default_Def"); if (!isStack) Default_Def.SetErrors(true); SingleTopHistograms EtaCut_Def("EtaFwD_Def"); if (!isStack) EtaCut_Def.SetErrors(true); SingleTopHistograms HtCut_Def("HtCut_Def"); if (!isStack) HtCut_Def.SetErrors(true); SingleTopHistograms AntiEtaCut_allW("antiEtaFwD_allW"); if (!isStack) AntiEtaCut_allW.SetErrors(true); SingleTopHistograms AntiHtCut_Def("antiHtCut_Def"); if (!isStack) AntiHtCut_Def.SetErrors(true); SingleTopHistograms DefaultTrue_Def("DefaultTrue_Def"); if (!isStack) DefaultTrue_Def.SetErrors(true); SingleTopHistograms EtaCutTrue_Def("EtaFwDTrue_Def"); if (!isStack) EtaCutTrue_Def.SetErrors(true); SingleTopHistograms HtCutTrue_Def("HtCutTrue_Def"); if (!isStack) HtCutTrue_Def.SetErrors(true); SingleTopHistograms AntiEtaCutTrue_Def("antiEtaFwDTrue_Def"); if (!isStack) AntiEtaCutTrue_Def.SetErrors(true); SingleTopHistograms AntiHtCutTrue_Def("antiHtCutTrue_Def"); if (!isStack) AntiHtCutTrue_Def.SetErrors(true); SingleTopHistograms Default_PuW("Default_PuW"); if (!isStack) Default_PuW.SetErrors(true); SingleTopHistograms Default_BtagPuW("Default_BtagPuW"); if (!isStack) Default_BtagPuW.SetErrors(true); SingleTopHistograms Default_allW("Default_allW"); if (!isStack) Default_allW.SetErrors(true); SingleTopHistograms EtaCut_PuW("EtaFwD_PuW"); if (!isStack) EtaCut_PuW.SetErrors(true); SingleTopHistograms EtaCut_BtagPuW("EtaFwD_BtagPuW"); if (!isStack) EtaCut_BtagPuW.SetErrors(true); SingleTopHistograms EtaCut_allW("EtaFwD_allW"); if (!isStack) EtaCut_allW.SetErrors(true); SingleTopHistograms DefaultTrue_PuW("DefaultTrue_PuW"); if (!isStack) DefaultTrue_PuW.SetErrors(true); SingleTopHistograms DefaultTrue_BtagPuW("DefaultTrue_BtagPuW"); if (!isStack) DefaultTrue_BtagPuW.SetErrors(true); SingleTopHistograms DefaultTrue_allW("DefaultTrue_allW"); if (!isStack) DefaultTrue_allW.SetErrors(true); SingleTopHistograms EtaCutTrue_PuW("EtaFwDTrue_PuW"); if (!isStack) EtaCutTrue_PuW.SetErrors(true); SingleTopHistograms EtaCutTrue_BtagPuW("EtaFwDTrue_BtagPuW"); if (!isStack) EtaCutTrue_BtagPuW.SetErrors(true); SingleTopHistograms EtaCutTrue_allW("EtaFwDTrue_allW"); if (!isStack) EtaCutTrue_allW.SetErrors(true); DiLeptonHistograms DiLep_Default_Def("Default_Def"); if (!isStack) DiLep_Default_Def.SetErrors(true); DiLeptonHistograms DiLep_EtaCut_Def("EtaFwD_Def"); if (!isStack) DiLep_EtaCut_Def.SetErrors(true); DiLeptonHistograms DiLep_HtCut_Def("HtCut_Def"); if (!isStack) DiLep_HtCut_Def.SetErrors(true); DiLeptonHistograms DiLep_AntiEtaCut_allW("antiEtaFwD_allW"); if (!isStack) DiLep_AntiEtaCut_allW.SetErrors(true); DiLeptonHistograms DiLep_AntiHtCut_Def("antiHtCut_Def"); if (!isStack) DiLep_AntiHtCut_Def.SetErrors(true); DiLeptonHistograms DiLep_DefaultTrue_Def("DefaultTrue_Def"); if (!isStack) DiLep_DefaultTrue_Def.SetErrors(true); DiLeptonHistograms DiLep_EtaCutTrue_Def("EtaFwDTrue_Def"); if (!isStack) DiLep_EtaCutTrue_Def.SetErrors(true); DiLeptonHistograms DiLep_HtCutTrue_Def("HtCutTrue_Def"); if (!isStack) DiLep_HtCutTrue_Def.SetErrors(true); DiLeptonHistograms DiLep_AntiEtaCutTrue_Def("antiEtaFwDTrue_Def"); if (!isStack) DiLep_AntiEtaCutTrue_Def.SetErrors(true); DiLeptonHistograms DiLep_AntiHtCutTrue_Def("antiHtCutTrue_Def"); if (!isStack) DiLep_AntiHtCutTrue_Def.SetErrors(true); DiLeptonHistograms DiLep_Default_PuW("Default_PuW"); if (!isStack) DiLep_Default_PuW.SetErrors(true); DiLeptonHistograms DiLep_Default_BtagPuW("Default_BtagPuW"); if (!isStack) DiLep_Default_BtagPuW.SetErrors(true); DiLeptonHistograms DiLep_Default_allW("Default_allW"); if (!isStack) DiLep_Default_allW.SetErrors(true); DiLeptonHistograms DiLep_EtaCut_PuW("EtaFwD_PuW"); if (!isStack) DiLep_EtaCut_PuW.SetErrors(true); DiLeptonHistograms DiLep_EtaCut_BtagPuW("EtaFwD_BtagPuW"); if (!isStack) DiLep_EtaCut_BtagPuW.SetErrors(true); DiLeptonHistograms DiLep_EtaCut_allW("EtaFwD_allW"); if (!isStack) DiLep_EtaCut_allW.SetErrors(true); DiLeptonHistograms DiLep_DefaultTrue_PuW("DefaultTrue_PuW"); if (!isStack) DiLep_DefaultTrue_PuW.SetErrors(true); DiLeptonHistograms DiLep_DefaultTrue_BtagPuW("DefaultTrue_BtagPuW"); if (!isStack) DiLep_DefaultTrue_BtagPuW.SetErrors(true); DiLeptonHistograms DiLep_DefaultTrue_allW("DefaultTrue_allW"); if (!isStack) DiLep_DefaultTrue_allW.SetErrors(true); DiLeptonHistograms DiLep_EtaCutTrue_PuW("EtaFwDTrue_PuW"); if (!isStack) DiLep_EtaCutTrue_PuW.SetErrors(true); DiLeptonHistograms DiLep_EtaCutTrue_BtagPuW("EtaFwDTrue_BtagPuW"); if (!isStack) DiLep_EtaCutTrue_BtagPuW.SetErrors(true); DiLeptonHistograms DiLep_EtaCutTrue_allW("EtaFwDTrue_allW"); if (!isStack) DiLep_EtaCutTrue_allW.SetErrors(true); TH1D * HT = new TH1D("HT", " ;p_{T,jet}^{2nd}(second)", 500, 0., 500.); if (!isStack) HT->Sumw2(); TH1D * RMS = new TH1D("RMS", " ;f_{RMS}^{jet}(non-tagged)", 1000, 0., 1.); if (!isStack) RMS->Sumw2(); TH1D * def_finalMT = new TH1D("def_finalMT", "final-W-neutrino transverse mass", 100, 0., 200.); if (!isStack) def_finalMT->Sumw2(); def_finalMT->GetXaxis()->SetTitle("M_{T}(W,#nu)"); TH1D * PuW_finalMT = new TH1D("PuW_finalMT", "final-W-neutrino transverse mass", 100, 0., 200.); if (!isStack) PuW_finalMT->Sumw2(); PuW_finalMT->GetXaxis()->SetTitle("M_{T}(W,#nu)"); TH1D * BtagPuW_finalMT = new TH1D("BtagPuW_finalMT", "final-W-neutrino transverse mass", 100, 0., 200.); BtagPuW_finalMT->GetXaxis()->SetTitle("M_{T}(W,#nu)"); if (!isStack) BtagPuW_finalMT->Sumw2(); TH1D * allW_finalMT = new TH1D("allW_finalMT", "final-W-neutrino transverse mass", 100, 0., 200.); allW_finalMT->GetXaxis()->SetTitle("M_{T}(W,#nu)"); if (!isStack) allW_finalMT->Sumw2(); TH2D * nVtx_cosTheta = new TH2D("nVtxcosTheta", "nVtxcosTheta;N_{vtx};cos(#theta_{l}*)", 100, 0, 100, 100, -1., 1.); if (!isStack) nVtx_cosTheta->Sumw2(); TH1D * TOPPT = new TH1D("TOPPT", "top pt", 1000, 0., 10000.); TOPPT->GetXaxis()->SetTitle("p_{T}(top)"); if (!isStack) TOPPT->Sumw2(); TH1D * AntiTOPPT = new TH1D("AntiTOPPT", "anti top pt", 1000, 0., 10000.); AntiTOPPT->GetXaxis()->SetTitle("p_{T}(anti-top)"); if (!isStack) AntiTOPPT->Sumw2(); TH1D * hMetphi = 0; TH2D * hMetXNvtx = 0; TH2D * hMetYNvtx = 0; TH1D * hMetphiCorr = 0; TH2D * hMetXNvtxCorr = 0; TH2D * hMetYNvtxCorr = 0; if (metphi != 0) { hMetphiCorr = new TH1D("hMetphiCorr", "hMetphiCorr", 640, -3.2, 3.2); hMetXNvtxCorr = new TH2D("hMetXNvtxCorr", "hMetXNvtxCorr", 120, 0, 120, 200, 0, 200); hMetYNvtxCorr = new TH2D("hMetYNvtxCorr", "hMetYNvtxCorr", 120, 0, 120, 200, 0, 200); hMetphi = new TH1D("hMetPhi", "hMetPhi", 640, -3.2, 3.2); hMetXNvtx = new TH2D("hMetXNvtx", "hMetXNvtx", 120, 0, 120, 200, 0, 200); hMetYNvtx = new TH2D("hMetYNvtx", "hMetYNvtx", 120, 0, 120, 200, 0, 200); } // TH2D * met_cosTheta = new TH2D("metcosTheta_true", "metcosTheta;cos(#theta_{l}*);MET", 100, -1., 1., 100, 0, 300); // TH2D * mt_cosTheta = new TH2D("mtcosTheta_true", "mtcosTheta;M_{T}^{W};cos(#theta_{l}*)", 100, -1., 1., 100, 0, 300); // TH2D * met_cosTheta2 = new TH2D("metcosTheta", "metcosTheta;cos(#theta_{l}*);MET", 100, -1., 1., 100, 0, 300); // TH2D * mt_cosTheta2 = new TH2D("mtcosTheta", "mtcosTheta;M_{T}^{W};cos(#theta_{l}*)", 100, -1., 1., 100, 0, 300); cout << "START" << endl; TFile * f = 0; TApplication theApp("App", &argc, argv); double nInit = 0; double nFinal = 0; double nHLTrunB = 0; double nMt = 0; double nGoodSolution = 0; plotFileName = dirName + string("_") + myFlavor + plotFileName; #if defined ISDATA || defined Wtemplate MuonTree * myMuonTree = 0; #endif #if !defined ISDATA && !defined Wtemplate GenInfoMuonTree * myMuonTree = 0; #endif TTree * eventTree = 0; GenSingleTopMaker * genSingleTop = 0; TRootGenEventMaker * genEvtMaker = 0; TRandom3 tr(154456); for (unsigned int fNumber = 0; fNumber < inputFileNames.size(); fNumber++) { cout << "file number " << fNumber + 1 << ": " << inputFileNames.at(fNumber) << endl; TFile* f = TFile::Open(inputFileNames.at(fNumber).c_str()); #ifdef ISDATA #if !defined QCD && !defined Wtemplate myMuonTree = new MuonTree(eventTree, f, sample + "_2J_1T_noSyst", dirName); #endif /*QCD*/ #if defined QCD && !defined Wtemplate myMuonTree = new MuonTree(eventTree, f, sample + "_2J_1T_QCD_noSyst", dirName); #endif /*QCD*/ #if !defined QCD && defined Wtemplate myMuonTree = new MuonTree(eventTree, f, sample + "_2J_0T_noSyst", dirName); #endif /*Wtemplate*/ #if defined QCD && defined Wtemplate myMuonTree = new MuonTree(eventTree, f, sample + "_2J_0T_QCD_noSyst", dirName); #endif /*Wtemplate*/ #endif /*ISDATA*/ #if !defined ISDATA && !defined Wtemplate if (prefix != string("")) { cout << "sample name has _" << endl; myMuonTree = new GenInfoMuonTree(eventTree, f, sample + "_2J_1T_noSyst", dirName); } else { // cout << "sample name does not have _: " << string(sample + "_2J_0T_noSyst") << endl; if (sample.find("Comphep") != 0 && fabs(sample.find("Comphep")) < sample.size()) myMuonTree = new GenInfoMuonTree(eventTree, f, "TChannel_2J_1T_noSyst", dirName); else myMuonTree = new GenInfoMuonTree(eventTree, f, sample + "_2J_1T_noSyst", dirName); } #endif /*ISDATA*/ #if defined Wtemplate && !defined QCD myMuonTree = new MuonTree(eventTree, f, sample + "_2J_0T_noSyst", dirName); #endif if (string(myMuonTree->fChain->GetName()) == string("Data_2J_1T_QCD_noSyst") || string(myMuonTree->fChain->GetName()) == string("Data_2J_0T_QCD_noSyst")) { plotFileName = dirName + "_QCD_plots.root"; } if (string(myMuonTree->fChain->GetName()) == string("Data_2J_0T_noSyst")) { plotFileName = dirName + "_WTemplateDefFormat_plots.root"; // plotFileName = dirName + "_WTemplate_plots.root"; } cout << "tree name: " << myMuonTree->fChain->GetName() << endl; METPhiCorrector metCorr; for (int eventNumber = 0; eventNumber < myMuonTree->fChain->GetEntriesFast(); eventNumber++) { // cout << "New event: " << eventNumber << "--------------------" << endl; myMuonTree->GetEntry(eventNumber); HT->Fill(myMuonTree->secondJetPt, 1); if (metphi != 0) { hMetphi->Fill(myMuonTree->metPhi); hMetXNvtx->Fill(myMuonTree->nGoodVertices, myMuonTree->metPt * cos(myMuonTree->metPhi)); hMetYNvtx->Fill(myMuonTree->nGoodVertices, myMuonTree->metPt * sin(myMuonTree->metPhi)); if (isData) CorrectMetPhi(myMuonTree); else myMuonTree->SetMetPhi(metCorr.CorrectPhi(myMuonTree->metPt, myMuonTree->metPhi, myMuonTree->nGoodVertices)); hMetphiCorr->Fill(myMuonTree->metPhi); hMetXNvtxCorr->Fill(myMuonTree->nGoodVertices, myMuonTree->metPt * cos(myMuonTree->metPhi)); hMetYNvtxCorr->Fill(myMuonTree->nGoodVertices, myMuonTree->metPt * sin(myMuonTree->metPhi)); } if (!myMuonTree->passExtraSelection(applyJetPt, e_mtw)) { continue; } if (!isDesiredWJetsFlavor(myMuonTree, myFlavor)) continue; // cout << "I passed" << endl; nFinal++; #if defined Wtemplate && defined ISDATA // if (!myMuonTree->jetsForWtemplate()) { // continue; // } #endif /*Wtemplate*/ bool isLeptonicTop = false; bool isHadronicTop = false; std::vector<int> nonTopW; #if !defined ISDATA && !defined Wtemplate if (myMuonTree->SampleRecognizer(sample) > 0) { cout << "I am a top-contained sample :-)" << endl; genEvtMaker = new TRootGenEventMaker(myMuonTree, sample); genSingleTop = new GenSingleTopMaker(&(genEvtMaker->output), channel); isLeptonicTop = (genEvtMaker->output.tops()[0].isLeptonicMu() || genEvtMaker->output.tops()[0].isLeptonicEl()); isHadronicTop = genEvtMaker->output.tops()[0].isHadronic(); nonTopW = genEvtMaker->output.getNonTopWList(); delete genEvtMaker; } else { // cout << "I am not a top-contained sample :-(\t" << genEvtMaker << "\t" << genSingleTop << endl; } #endif /*ISDATA*/ // cout << "Number of tops at analysis level: " << genSingleTop->ntops << endl; Event myEvent_tmp = myEventPreparation(myMuonTree); double mt = myMuonTree->GetMTW(); TLorentzVector fwdJet = myMuonTree->GetMostFwDJet(); double eta = fabs(fwdJet.Eta()); double ht = myMuonTree->GetHT(); if (string(myMuonTree->fChain->GetName()) == string("Data_2J_1T_QCD_noSyst") || string(myMuonTree->fChain->GetName()) == string("Data_2J_0T_QCD_noSyst")) { // cout << "QCD template" << endl; DR<TLorentzVector> dr; dr.SetVectors(myEvent_tmp.Dmuons[0], myEvent_tmp.BPFJets[0]); if (dr.getValue() < 0.3) continue; if (dirName == "TreesEle") { dr.SetVectors(myEvent_tmp.Dmuons[0], myEvent_tmp.GPFJets[1]); if (dr.getValue() < 0.3) continue; if (myMuonTree->leptonRhoCorrectedRelIso <= 0.1) continue; if (cos(myMuonTree->leptonPhi - myMuonTree->metPhi) >= 0.8) continue; } } // if(string(myMuonTree->fChain->GetName()) == string("Data_2J_0T_QCD_noSyst")){ // if(cos(myMuonTree->leptonPhi-myMuonTree->metPhi) >= 0.8) // continue; // } double puOnlyW = 1; double btagpuW = 1; double lumiWeight3D = 1; if (genSingleTop != 0) { if (genSingleTop->isDesiredSemiLepton(channel)) { cout << genSingleTop->genSingleTop.MuCharge() << "\t" << myMuonTree->charge; if (isLeptonicTop) { cout << ": leptonic top" << endl; } else if (isHadronicTop) { cout << ": hadronic top" << endl; } else { cout << endl; } cout << "Second W status: " << endl; for (int s = 0; s < nonTopW.size(); s++) { if (nonTopW[s] == 1) cout << "\tW decays to Electron" << endl; if (nonTopW[s] == 2) cout << "\tW decays to Muon" << endl; if (nonTopW[s] == 3) cout << "\tW decays to Tau" << endl; if (nonTopW[s] == 4) cout << "\tW decays to Hadron" << endl; } } } if (!isData) { // GetWeightsNoPu(myMuonTree, lumiWeight3D, puOnlyW, btagpuW); puOnlyW *= myMuonTree->GetPUOnlyWeight(); btagpuW *= myMuonTree->GetPUbTagWeight(); lumiWeight3D = myMuonTree->GetTotalWeight(); #if !defined ISDATA && !defined Wtemplate if (ptrw != 0 && (string(myMuonTree->fChain->GetName()).find("TTBar") >= 0 && string(myMuonTree->fChain->GetName()).find("TTBar") < string(myMuonTree->fChain->GetName()).size())) { TopPtReweighter topptrw; TLorentzVector antitop; TLorentzVector top; double myTopW = 1.; if (myMuonTree->GetGenTop(1).type() == -6) { antitop = myMuonTree->GetGenTop(1); top = myMuonTree->GetGenTop(2); myTopW = topptrw.Weight(top.Pt(), antitop.Pt()); } else if (myMuonTree->GetGenTop(1).type() == 6) { antitop = myMuonTree->GetGenTop(2); top = myMuonTree->GetGenTop(1); myTopW = topptrw.Weight(top.Pt(), antitop.Pt()); } else { cout << "***************bad top id value*************" << endl; } TOPPT->Fill(top.Pt()); AntiTOPPT->Fill(antitop.Pt()); puOnlyW *= myTopW; btagpuW *= myTopW; lumiWeight3D *= myTopW; } #endif } SemiLepTopQuark myLeptonicTop(myEvent_tmp.BPFJets[0], myEvent_tmp.mets[0], myEvent_tmp.Dmuons[0], myEvent_tmp.GPFJets[1], fwdJet, METResolutions); myLeptonicTop.setMuCharge((int) myMuonTree->charge); // cout << "Before CosTheta Fill" << endl; if (myMuonTree->charge > 0) nWP++; if (myMuonTree->charge < 0) nWM++; /* * Filling CosTheta Histograms */ if (ttDecayMode == "") { if (myLeptonicTop.hasNeutrinoSolution()) { nGoodSolution++; // nVtx_cosTheta->Fill(myMuonTree->nGoodVertices, myLeptonicTop.cosThetaStar()); // met_cosTheta->Fill(myLeptonicTop.cosThetaStar(), myMuonTree->GetMET().Pt()); // mt_cosTheta->Fill(myLeptonicTop.cosThetaStar(), myMuonTree->GetMTW()); DefaultTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); DefaultTrue_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); DefaultTrue_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); DefaultTrue_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); if (ht >= 180) HtCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); else AntiHtCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); if (eta > 1.5) { EtaCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); EtaCutTrue_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); EtaCutTrue_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); EtaCutTrue_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } else AntiEtaCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); } Default_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); Default_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); Default_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); Default_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); nVtx_cosTheta->Fill(myMuonTree->nGoodVertices, myLeptonicTop.cosThetaStar()); // met_cosTheta2->Fill(myLeptonicTop.cosThetaStar(), myMuonTree->GetMET().Pt()); // mt_cosTheta2->Fill(myLeptonicTop.cosThetaStar(), myMuonTree->GetMTW()); if (ht >= 180) HtCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); else AntiHtCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); if (eta > 1.5) { EtaCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); EtaCut_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); EtaCut_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); EtaCut_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } else AntiEtaCut_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } else {//Dimuon, muTau, muE TtBar if (myLeptonicTop.hasNeutrinoSolution()) { nGoodSolution++; DiLep_DefaultTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); DiLep_DefaultTrue_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); DiLep_DefaultTrue_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); DiLep_DefaultTrue_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); if (ht >= 180) DiLep_HtCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); else DiLep_AntiHtCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); if (eta > 1.5) { DiLep_EtaCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); DiLep_EtaCutTrue_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); DiLep_EtaCutTrue_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); DiLep_EtaCutTrue_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } else DiLep_AntiEtaCutTrue_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); } DiLep_Default_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); DiLep_Default_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); DiLep_Default_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); DiLep_Default_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); if (ht >= 180) DiLep_HtCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); else DiLep_AntiHtCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); if (eta > 1.5) { DiLep_EtaCut_Def.Fill(myLeptonicTop, 1, genSingleTop, channel); DiLep_EtaCut_PuW.Fill(myLeptonicTop, puOnlyW, genSingleTop, channel); DiLep_EtaCut_BtagPuW.Fill(myLeptonicTop, btagpuW, genSingleTop, channel); DiLep_EtaCut_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } else DiLep_AntiEtaCut_allW.Fill(myLeptonicTop, lumiWeight3D, genSingleTop, channel); } // cout << "After CosTheta Fill" << endl; if (genSingleTop != NULL) { // cout << "genSingleTop: " << genSingleTop << endl; delete genSingleTop; } /* * Filling Event Histograms */ // cout << "Before Event Fill" << endl; TRootPFJet FWDJET(fwdJet); std::vector<TRootPFJet> sortedJetsbyEta; sortedJetsbyEta.push_back(FWDJET); std::vector<TRootPFJet> nonBs; nonBs.push_back(myMuonTree->GetFJet()); atLeastOnGPV.Fill(myEvent_tmp.Gpvs, myEvent_tmp.Gpvs.size(), 1); GoldenFinalPUMuons.Fill(myEvent_tmp.Dmuons, myEvent_tmp.Dmuons.size(), 1); Jets.FillPFJets(myEvent_tmp.GPFJets, myEvent_tmp.GPFJets.size(), myEvent_tmp.BPFJets.size(), false, 1); BJets.FillPFJets(myEvent_tmp.BPFJets, myEvent_tmp.BPFJets.size(), myEvent_tmp.BPFJets.size(), false, 1); nonBJets.FillPFJets(nonBs, nonBs.size(), myEvent_tmp.BPFJets.size(), false, 1); FwDJet.FillPFJets(sortedJetsbyEta, sortedJetsbyEta.size(), myEvent_tmp.BPFJets.size(), false, 1); MetHist.Fill(&myEvent_tmp.mets.at(0), 1); def_finalMT->Fill(mt, 1); atLeastOnGPV_PuW.Fill(myEvent_tmp.Gpvs, myEvent_tmp.Gpvs.size(), puOnlyW); GoldenFinalPUMuons_PuW.Fill(myEvent_tmp.Dmuons, myEvent_tmp.Dmuons.size(), puOnlyW); Jets_PuW.FillPFJets(myEvent_tmp.GPFJets, myEvent_tmp.GPFJets.size(), myEvent_tmp.BPFJets.size(), false, puOnlyW); BJets_PuW.FillPFJets(myEvent_tmp.BPFJets, myEvent_tmp.BPFJets.size(), myEvent_tmp.BPFJets.size(), false, puOnlyW); nonBJets_PuW.FillPFJets(nonBs, nonBs.size(), myEvent_tmp.BPFJets.size(), false, puOnlyW); FwDJet_PuW.FillPFJets(sortedJetsbyEta, sortedJetsbyEta.size(), myEvent_tmp.BPFJets.size(), false, puOnlyW); MetHist_PuW.Fill(&myEvent_tmp.mets.at(0), puOnlyW); PuW_finalMT->Fill(mt, puOnlyW); atLeastOnGPV_BtagPuW.Fill(myEvent_tmp.Gpvs, myEvent_tmp.Gpvs.size(), btagpuW); GoldenFinalPUMuons_BtagPuW.Fill(myEvent_tmp.Dmuons, myEvent_tmp.Dmuons.size(), btagpuW); Jets_BtagPuW.FillPFJets(myEvent_tmp.GPFJets, myEvent_tmp.GPFJets.size(), myEvent_tmp.BPFJets.size(), false, btagpuW); BJets_BtagPuW.FillPFJets(myEvent_tmp.BPFJets, myEvent_tmp.BPFJets.size(), myEvent_tmp.BPFJets.size(), false, btagpuW); nonBJets_BtagPuW.FillPFJets(nonBs, nonBs.size(), myEvent_tmp.BPFJets.size(), false, btagpuW); FwDJet_BtagPuW.FillPFJets(sortedJetsbyEta, sortedJetsbyEta.size(), myEvent_tmp.BPFJets.size(), false, btagpuW); MetHist_BtagPuW.Fill(&myEvent_tmp.mets.at(0), btagpuW); BtagPuW_finalMT->Fill(mt, btagpuW); atLeastOnGPV_allW.Fill(myEvent_tmp.Gpvs, myEvent_tmp.Gpvs.size(), lumiWeight3D); GoldenFinalPUMuons_allW.Fill(myEvent_tmp.Dmuons, myEvent_tmp.Dmuons.size(), lumiWeight3D); Jets_allW.FillPFJets(myEvent_tmp.GPFJets, myEvent_tmp.GPFJets.size(), myEvent_tmp.BPFJets.size(), false, lumiWeight3D); BJets_allW.FillPFJets(myEvent_tmp.BPFJets, myEvent_tmp.BPFJets.size(), myEvent_tmp.BPFJets.size(), false, lumiWeight3D); nonBJets_allW.FillPFJets(nonBs, nonBs.size(), myEvent_tmp.BPFJets.size(), false, lumiWeight3D); FwDJet_allW.FillPFJets(sortedJetsbyEta, sortedJetsbyEta.size(), myEvent_tmp.BPFJets.size(), false, lumiWeight3D); MetHist_allW.Fill(&myEvent_tmp.mets.at(0), lumiWeight3D); allW_finalMT->Fill(mt, lumiWeight3D); // cout<<"End of event loop --------------------"<<endl; if (myLeptonicTop.top().M() > 130 && myLeptonicTop.top().M() < 220) { if (myMuonTree->charge > 0) nSRP++; else if (myMuonTree->charge < 0) nSRM++; } else { if (myMuonTree->charge > 0) nSBP++; else if (myMuonTree->charge < 0) nSBM++; } } cout << "before closing file input " << f->GetName() << endl; f->Close(); delete f; } cout << "before endjob" << endl; TFile * fout = new TFile(plotFileName.c_str(), "recreate"); fout->cd(); atLeastOnGPV.WriteAll(fout); GoldenFinalPUMuons.WriteAll(fout); Jets.WriteAll(fout); BJets.WriteAll(fout); nonBJets.WriteAll(fout); FwDJet.WriteAll(fout); MetHist.WriteAll(fout); def_finalMT->Write(); atLeastOnGPV_PuW.WriteAll(fout); GoldenFinalPUMuons_PuW.WriteAll(fout); Jets_PuW.WriteAll(fout); BJets_PuW.WriteAll(fout); nonBJets_PuW.WriteAll(fout); FwDJet_PuW.WriteAll(fout); MetHist_PuW.WriteAll(fout); PuW_finalMT->Write(); atLeastOnGPV_BtagPuW.WriteAll(fout); GoldenFinalPUMuons_BtagPuW.WriteAll(fout); Jets_BtagPuW.WriteAll(fout); BJets_BtagPuW.WriteAll(fout); nonBJets_BtagPuW.WriteAll(fout); FwDJet_BtagPuW.WriteAll(fout); MetHist_BtagPuW.WriteAll(fout); BtagPuW_finalMT->Write(); atLeastOnGPV_allW.WriteAll(fout); GoldenFinalPUMuons_allW.WriteAll(fout); Jets_allW.WriteAll(fout); BJets_allW.WriteAll(fout); nonBJets_allW.WriteAll(fout); FwDJet_allW.WriteAll(fout); MetHist_allW.WriteAll(fout); allW_finalMT->Write(); if (ttDecayMode == "") { Default_Def.Write(fout); Default_PuW.Write(fout); Default_BtagPuW.Write(fout); Default_allW.Write(fout); EtaCut_Def.Write(fout); EtaCut_PuW.Write(fout); EtaCut_BtagPuW.Write(fout); EtaCut_allW.Write(fout); AntiEtaCut_allW.Write(fout); HtCut_Def.Write(fout); AntiHtCut_Def.Write(fout); DefaultTrue_Def.Write(fout); EtaCutTrue_Def.Write(fout); DefaultTrue_allW.Write(fout); EtaCutTrue_allW.Write(fout); AntiEtaCutTrue_Def.Write(fout); HtCutTrue_Def.Write(fout); AntiHtCutTrue_Def.Write(fout); } else { DiLep_Default_Def.Write(fout); DiLep_Default_PuW.Write(fout); DiLep_Default_BtagPuW.Write(fout); DiLep_Default_allW.Write(fout); DiLep_EtaCut_Def.Write(fout); DiLep_EtaCut_PuW.Write(fout); DiLep_EtaCut_BtagPuW.Write(fout); DiLep_EtaCut_allW.Write(fout); DiLep_AntiEtaCut_allW.Write(fout); DiLep_HtCut_Def.Write(fout); DiLep_AntiHtCut_Def.Write(fout); DiLep_DefaultTrue_Def.Write(fout); DiLep_EtaCutTrue_Def.Write(fout); DiLep_DefaultTrue_allW.Write(fout); DiLep_EtaCutTrue_allW.Write(fout); DiLep_AntiEtaCutTrue_Def.Write(fout); DiLep_HtCutTrue_Def.Write(fout); DiLep_AntiHtCutTrue_Def.Write(fout); } HT->Write(); RMS->Write(); nVtx_cosTheta->Write(); // TOPPT->Write(); // AntiTOPPT->Write(); // met_cosTheta->Write(); // mt_cosTheta->Write(); // met_cosTheta2->Write(); // mt_cosTheta2->Write(); if (metphi != 0) { hMetphi->Write(); hMetXNvtx->Write(); hMetYNvtx->Write(); hMetphiCorr->Write(); hMetXNvtxCorr->Write(); hMetYNvtxCorr->Write(); } fout->Write(); fout->Close(); cout << nInit << "\n" << nHLTrunB << "\n" << nMt << "\n" << nFinal << "\n" << nGoodSolution << endl; cout << "nW+: " << nWP << "\tnW-: " << nWM << endl; cout << "SR+" << nSRP << endl; cout << "SR-" << nSRM << endl; cout << "SB+" << nSBP << endl; cout << "SB-" << nSBM << endl; return 0; }
int main(int argc, char** argv) { std::vector<std::string> inputFileNames; std::string plotFileName; int verbosity = 0; TH1D * METResolutions = 0; bool pu3D = false; //true; double doJES = 1; bool isData = false; int smearingSkim = 1; TString sample = ""; string prefix = ""; TString dirName = ""; for (int f = 1; f < argc; f++) { std::string arg_fth(*(argv + f)); if (arg_fth == "prefix") { f++; std::string in(*(argv + f)); prefix = in + string("_"); } else if (arg_fth == "input") { f++; std::string in(*(argv + f)); if (dirName == "TreesEle" && in == "Data") inputFileNames.push_back(string("~/work/samples/postMoriond/Aug2013/" + prefix + in + "_Ele.root")); else inputFileNames.push_back(string("~/work/samples/postMoriond/Aug2013/" + prefix + in + ".root")); sample = in; plotFileName = prefix + in + "_plots.root"; } else if (arg_fth == "JES") { f++; std::string in(*(argv + f)); doJES = atof(in.c_str()); } else if (arg_fth == "isData") { f++; std::string in(*(argv + f)); if (in == "yes" || in == "YES" || in == "Yes" || in == "y" || in == "Y") isData = true; else isData = false; } else if (arg_fth == "METResolFileName") { f++; std::string in(*(argv + f)); TFile * METResolFileName = TFile::Open(in.c_str()); METResolutions = (TH1D*) METResolFileName->Get("METresolutions"); } else if (arg_fth == "smearingSkim") { f++; std::string in(*(argv + f)); smearingSkim = atof(in.c_str()); } else if (arg_fth == "dirName") { f++; std::string in(*(argv + f)); dirName = in.c_str(); } } cout << "START" << endl; int channel = 0; if (dirName == "TreesEle") channel = 1; TFile* f = 0; TApplication theApp("App", &argc, argv); double nInit = 0; double nFinal = 0; double nHLTrunB = 0; double nMt = 0; double nGoodSolution = 0; // MuonTree * myMuonTree = 0; GenInfoMuonTree * myMuonTree = 0; TTree * eventTree = 0; GenSingleTopMaker* genSingleTop = 0; TH2D * cosThetaRG = new TH2D("cosThetaRG", "cosThetaRG", 100, -1., 1., 100, -1., 1.); TH1D * cosTheta = new TH1D("cosTheta", "cosTheta", 100, -1., 1.); TH1D * cosTheta2 = new TH1D("cosTheta2", "cosTheta2", 100, -1., 1.); TH1D * cosThetaREC = new TH1D("cosThetaREC", "cosThetaREC", 100, -1., 1.); TH1D * cosThetaREC2 = new TH1D("cosThetaREC2", "cosThetaREC2", 100, -1., 1.); TH1D * TopBQuark_1 = new TH1D("TopBQuark_1_direct", "TopBQuark_1", 1500, -1200, 300); TH1D * TopBQuark_2 = new TH1D("TopBQuark_2_direct", "TopBQuark_2", 1500, -1200, 300); TH1D * TopQuark_1 = new TH1D("TopQuark_1_direct", "TopQuark_1", 1500, -1200, 300); TH1D * TopQuark_2 = new TH1D("TopQuark_2_direct", "TopQuark_2", 1500, -1200, 300); TH1D * TopQuarkBar_1 = new TH1D("TopQuarkBar_1_direct", "TopQuarkBar_1", 1500, -1200, 300); TH1D * TopQuarkBar_2 = new TH1D("TopQuarkBar_2_direct", "TopQuarkBar_2", 1500, -1200, 300); TH1D * TopLepton_1 = new TH1D("TopLepton_1_direct", "TopLepton_1", 1500, -1200, 300); TH1D * TopLepton_2 = new TH1D("TopLepton_2_direct", "TopLepton_2", 1500, -1200, 300); TH1D * TopNeutrino_1 = new TH1D("TopNeutrino_1_direct_direct", "TopNeutrino_1", 1500, -1200, 300); TH1D * TopNeutrino_2 = new TH1D("TopNeutrino_2_direct", "TopNeutrino_2", 1500, -1200, 300); TH1D * Top_1 = new TH1D("Top_1_direct", "Top_1", 1500, -1200, 300); TH1D * Top_2 = new TH1D("Top_2_direct", "Top_2", 1500, -1200, 300); TH1D * Top_1_Mass = new TH1D("Top_1_Mass_direct", "Top_1_Mass", 200, 100, 300); TH1D * Top_2_Mass = new TH1D("Top_2_Mass_direct", "Top_2_Mass", 200, 100, 300); TH1D * W_1_Mass = new TH1D("W_1_Mass_direct", "W_1_Mass", 100, 50, 150); TH1D * W_2_Mass = new TH1D("W_2_Mass_direct", "W_2_Mass", 100, 50, 150); TH2D * Top_1_IdCharge = new TH2D("Top_1_IdCharge_direct", "Top_1_IdCharge; charge; id", 3, -1, 2, 3, -1, 2); TH2D * Top_2_IdCharge = new TH2D("Top_2_IdCharge_direct", "Top_2_IdCharge; charge; id", 3, -1, 2, 3, -1, 2); TH2D * Top_12_decayChannel = new TH2D("Top_12_decayChannel_direct", "Top_12_decayChannel; top 1; top 2", 5, 0, 5, 5, 0, 5); TH1D * TopBQuark_1_viaNPgenEvent = new TH1D("TopBQuark_1_viaNPgenEvent", "TopBQuark_1", 1500, -1200, 300); TH1D * TopBQuark_2_viaNPgenEvent = new TH1D("TopBQuark_2_viaNPgenEvent", "TopBQuark_2", 1500, -1200, 300); TH1D * TopQuark_1_viaNPgenEvent = new TH1D("TopQuark_1_viaNPgenEvent", "TopQuark_1", 1500, -1200, 300); TH1D * TopQuark_2_viaNPgenEvent = new TH1D("TopQuark_2_viaNPgenEvent", "TopQuark_2", 1500, -1200, 300); TH1D * TopQuarkBar_1_viaNPgenEvent = new TH1D("TopQuarkBar_1_viaNPgenEvent", "TopQuarkBar_1", 1500, -1200, 300); TH1D * TopQuarkBar_2_viaNPgenEvent = new TH1D("TopQuarkBar_2_viaNPgenEvent", "TopQuarkBar_2", 1500, -1200, 300); TH1D * TopLepton_1_viaNPgenEvent = new TH1D("TopLepton_1_viaNPgenEvent", "TopLepton_1", 1500, -1200, 300); TH1D * TopLepton_2_viaNPgenEvent = new TH1D("TopLepton_2_viaNPgenEvent", "TopLepton_2", 1500, -1200, 300); TH1D * TopNeutrino_1_viaNPgenEvent = new TH1D("TopNeutrino_1_viaNPgenEvent_viaNPgenEvent", "TopNeutrino_1", 1500, -1200, 300); TH1D * TopNeutrino_2_viaNPgenEvent = new TH1D("TopNeutrino_2_viaNPgenEvent", "TopNeutrino_2", 1500, -1200, 300); TH1D * Top_1_viaNPgenEvent = new TH1D("Top_1_viaNPgenEvent", "Top_1", 1500, -1200, 300); TH1D * Top_2_viaNPgenEvent = new TH1D("Top_2_viaNPgenEvent", "Top_2", 1500, -1200, 300); TH1D * Top_1_Mass_viaNPgenEvent = new TH1D("Top_1_Mass_viaNPgenEvent", "Top_1_Mass", 200, 100, 300); TH1D * Top_2_Mass_viaNPgenEvent = new TH1D("Top_2_Mass_viaNPgenEvent", "Top_2_Mass", 200, 100, 300); TH1D * W_1_Mass_viaNPgenEvent = new TH1D("W_1_Mass_viaNPgenEvent", "W_1_Mass", 100, 50, 150); TH1D * W_2_Mass_viaNPgenEvent = new TH1D("W_2_Mass_viaNPgenEvent", "W_2_Mass", 100, 50, 150); TH2D * Top_1_IdCharge_viaNPgenEvent = new TH2D("Top_1_IdCharge_viaNPgenEvent", "Top_1_IdCharge; charge; id", 3, -1, 2, 3, -1, 2); TH2D * Top_2_IdCharge_viaNPgenEvent = new TH2D("Top_2_IdCharge_viaNPgenEvent", "Top_2_IdCharge; charge; id", 3, -1, 2, 3, -1, 2); TH2D * Top_12_decayChannel_viaNPgenEvent = new TH2D("Top_12_decayChannel_viaNPgenEvent", "Top_12_decayChannel; top 1; top 2", 5, 0, 5, 5, 0, 5); Top_12_decayChannel->GetXaxis()->SetBinLabel(2, "hadronic"); Top_12_decayChannel->GetXaxis()->SetBinLabel(3, "leptonic e"); Top_12_decayChannel->GetXaxis()->SetBinLabel(4, "leptonic #mu"); Top_12_decayChannel->GetXaxis()->SetBinLabel(5, "leptonic #tau"); Top_12_decayChannel->GetYaxis()->SetBinLabel(2, "hadronic"); Top_12_decayChannel->GetYaxis()->SetBinLabel(3, "leptonic e"); Top_12_decayChannel->GetYaxis()->SetBinLabel(4, "leptonic #mu"); Top_12_decayChannel->GetYaxis()->SetBinLabel(5, "leptonic #tau"); Top_12_decayChannel_viaNPgenEvent->GetXaxis()->SetBinLabel(2, "hadronic"); Top_12_decayChannel_viaNPgenEvent->GetXaxis()->SetBinLabel(3, "leptonic e"); Top_12_decayChannel_viaNPgenEvent->GetXaxis()->SetBinLabel(4, "leptonic #mu"); Top_12_decayChannel_viaNPgenEvent->GetXaxis()->SetBinLabel(5, "leptonic #tau"); Top_12_decayChannel_viaNPgenEvent->GetYaxis()->SetBinLabel(2, "hadronic"); Top_12_decayChannel_viaNPgenEvent->GetYaxis()->SetBinLabel(3, "leptonic e"); Top_12_decayChannel_viaNPgenEvent->GetYaxis()->SetBinLabel(4, "leptonic #mu"); Top_12_decayChannel_viaNPgenEvent->GetYaxis()->SetBinLabel(5, "leptonic #tau"); TRandom3 tr(154456); for (unsigned int fNumber = 0; fNumber < inputFileNames.size(); fNumber++) { cout << "file number " << fNumber + 1 << ": " << inputFileNames.at(fNumber) << endl; TFile* f = TFile::Open(inputFileNames.at(fNumber).c_str()); // myMuonTree = new MuonTree(eventTree, f, sample + "_2J_1T_noSyst"); myMuonTree = new GenInfoMuonTree(eventTree, f, sample + "_2J_1T_noSyst", dirName); bool isTTBar = (string(myMuonTree->fChain->GetName()).find("TT") < string(myMuonTree->fChain->GetName()).size() && string(myMuonTree->fChain->GetName()).find("TT") >= 0); for (int eventNumber = 0; eventNumber < myMuonTree->fChain->GetEntriesFast(); eventNumber++) { cout << "event number " << eventNumber << " -------------------" << endl; // if (!isTTBar) { // cout << "Error! " << myMuonTree->fChain->GetName() << endl; // break; // } myMuonTree->GetEntry(eventNumber); TopQuark_1->Fill(myMuonTree->MCTopQuark_1_PdgId); if (isTTBar) TopQuark_2->Fill(myMuonTree->MCTopQuark_2_PdgId); TopQuarkBar_1->Fill(myMuonTree->MCTopQuarkBar_1_PdgId); if (isTTBar) TopQuarkBar_2->Fill(myMuonTree->MCTopQuarkBar_2_PdgId); TopBQuark_1->Fill(myMuonTree->MCTopBQuark_1_PdgId); if (isTTBar) TopBQuark_2->Fill(myMuonTree->MCTopBQuark_2_PdgId); TopLepton_1->Fill(myMuonTree->MCTopLepton_1_PdgId); if (isTTBar) TopLepton_2->Fill(myMuonTree->MCTopLepton_2_PdgId); Top_1->Fill(myMuonTree->MCTop_1_PdgId); if (isTTBar) Top_2->Fill(myMuonTree->MCTop_2_PdgId); TopNeutrino_1->Fill(myMuonTree->MCTopNeutrino_1_PdgId); if (isTTBar) TopNeutrino_2->Fill(myMuonTree->MCTopNeutrino_2_PdgId); Top_1_Mass->Fill(myMuonTree->GetGenTop(1).M()); if (isTTBar) Top_2_Mass->Fill(myMuonTree->GetGenTop(2).M()); W_1_Mass->Fill(myMuonTree->GetGenTop(1).W().M()); if (isTTBar) W_2_Mass->Fill(myMuonTree->GetGenTop(2).W().M()); cout << "I am in direct part: " << endl; // if (myMuonTree->GetGenTop(1).isLeptonic()) Top_1_IdCharge->Fill(myMuonTree->isTopConsistentCharge(myMuonTree->GetGenTop(1)), myMuonTree->isTopConsistentID(myMuonTree->GetGenTop(1))); if (isTTBar) { Top_2_IdCharge->Fill(myMuonTree->isTopConsistentCharge(myMuonTree->GetGenTop(2)), myMuonTree->isTopConsistentID(myMuonTree->GetGenTop(2))); // if(myMuonTree->GetGenTop(2).type() == -6 && myMuonTree->GetGenTop(2).bquark().type() == 5){ // cout<<"Error! "<< myMuonTree->isTopConsistentID(myMuonTree->GetGenTop(2))<<endl; // break; // } } if (!isTTBar) { std::vector<TRootGenTop> gentops; gentops.push_back(myMuonTree->GetGenTop(1)); myMuonTree->DealWithTW(gentops, myMuonTree->GetAllLeptons()); Top_12_decayChannel->Fill(myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(1)), myMuonTree->WdecayInTW); if (myMuonTree->WdecayInTW == 0) { cout << "ERROR!" << endl; break; } } else { Top_12_decayChannel->Fill(myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(1)), myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(2))); } // myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(2))); // if (myMuonTree->isTopConsistentCharge(myMuonTree->GetGenTop(1)) && // !myMuonTree->isTopConsistentID(myMuonTree->GetGenTop(1))) { // cout << myMuonTree->isTopConsistentCharge(myMuonTree->GetGenTop(1)) << "\tllll " << // myMuonTree->isTopConsistentID(myMuonTree->GetGenTop(1)) << endl; // cout << "------------------------------------------------------ " << eventNumber << endl; // cout << "------------------------------------------------------ " << eventNumber << endl; // } TRootGenEventMaker NPGenMaker(myMuonTree, string(sample)); TopQuark_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].quark().type()); TopQuark_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].quark().type()); TopQuarkBar_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].quarkBar().type()); TopQuarkBar_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].quarkBar().type()); TopBQuark_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].bquark().type()); TopBQuark_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].bquark().type()); TopLepton_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].lepton().type()); TopLepton_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].lepton().type()); Top_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].type()); Top_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].type()); TopNeutrino_1_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].neutrino().type()); TopNeutrino_2_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].neutrino().type()); Top_1_Mass_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].M()); Top_2_Mass_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].M()); W_1_Mass_viaNPgenEvent->Fill((NPGenMaker.output.tops())[0].W().M()); W_2_Mass_viaNPgenEvent->Fill((NPGenMaker.output.tops())[1].W().M()); cout << "I am in indirect part: " << endl; // if (NPGenMaker.output.tops()[0].isLeptonic()) Top_1_IdCharge_viaNPgenEvent->Fill(myMuonTree->isTopConsistentCharge(NPGenMaker.output.tops()[0]), myMuonTree->isTopConsistentID(NPGenMaker.output.tops()[0])); if (NPGenMaker.output.tops().size() > 1) Top_2_IdCharge_viaNPgenEvent->Fill(myMuonTree->isTopConsistentCharge(NPGenMaker.output.tops()[1]), myMuonTree->isTopConsistentID(NPGenMaker.output.tops()[1])); Top_12_decayChannel_viaNPgenEvent->Fill(myMuonTree->GetTopDecayChannel(NPGenMaker.output.tops()[0]), myMuonTree->WdecayInTW); if (!isTTBar) { std::vector<TRootGenTop> gentops; gentops.push_back(myMuonTree->GetGenTop(1)); myMuonTree->DealWithTW(gentops, myMuonTree->GetAllLeptons()); Top_12_decayChannel_viaNPgenEvent->Fill(myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(1)), myMuonTree->WdecayInTW); if (myMuonTree->WdecayInTW == 0) { cout << "ERROR!" << endl; break; } } else { Top_12_decayChannel_viaNPgenEvent->Fill(myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(1)), myMuonTree->GetTopDecayChannel(myMuonTree->GetGenTop(2))); } // myMuonTree->GetTopDecayChannel(NPGenMaker.output.tops()[1])); std::vector<int> nonTopW = NPGenMaker.output.getNonTopWList(); cout << "Second W status: " << endl; for (int s = 0; s < nonTopW.size(); s++) { cout << "\t" << nonTopW[s] << endl; } if (!myMuonTree->passExtraSelection(false, true)) continue; genSingleTop = new GenSingleTopMaker(&(NPGenMaker.output), channel); if (genSingleTop->isDesiredSemiLepton(channel)) { cosTheta->Fill(genSingleTop->genSingleTop.cosThetaStar(0)); } if (isTTBar) cosTheta2->Fill(genSingleTop->genSingleTopSecond.cosThetaStar(0)); Event myEvent_tmp = myEventPreparation_(myMuonTree); TLorentzVector fwdJet = myMuonTree->GetMostFwDJet(); SemiLepTopQuark myLeptonicTop(myEvent_tmp.BPFJets[0], myEvent_tmp.mets[0], myEvent_tmp.Dmuons[0], myEvent_tmp.GPFJets[1], fwdJet, METResolutions); if (genSingleTop->isDesiredSemiLepton(channel)) { cosThetaREC->Fill(myLeptonicTop.cosThetaStar()); cosThetaRG->Fill(myLeptonicTop.cosThetaStar(), genSingleTop->genSingleTop.cosThetaStar(0)); } } cout << "before closing file input " << f->GetName() << endl; f->Close(); delete f; } cout << "before endjob" << endl; TFile * fout = new TFile(string(dirName + "_" + plotFileName).c_str(), "recreate"); fout->cd(); Top_1->Write(); Top_2->Write(); TopBQuark_1->Write(); TopBQuark_2->Write(); TopQuark_1->Write(); TopQuark_2->Write(); TopQuarkBar_1->Write(); TopQuarkBar_2->Write(); TopLepton_1->Write(); TopLepton_2->Write(); TopNeutrino_1->Write(); TopNeutrino_2->Write(); Top_12_decayChannel->Write(); Top_1_IdCharge->Write(); Top_1_Mass->Write(); W_1_Mass->Write(); Top_2_IdCharge->Write(); Top_2_Mass->Write(); W_2_Mass->Write(); Top_1_viaNPgenEvent->Write(); Top_2_viaNPgenEvent->Write(); TopBQuark_1_viaNPgenEvent->Write(); TopBQuark_2_viaNPgenEvent->Write(); TopQuark_1_viaNPgenEvent->Write(); TopQuark_2_viaNPgenEvent->Write(); TopQuarkBar_1_viaNPgenEvent->Write(); TopQuarkBar_2_viaNPgenEvent->Write(); TopLepton_1_viaNPgenEvent->Write(); TopLepton_2_viaNPgenEvent->Write(); TopNeutrino_1_viaNPgenEvent->Write(); TopNeutrino_2_viaNPgenEvent->Write(); Top_12_decayChannel_viaNPgenEvent->Write(); Top_1_IdCharge_viaNPgenEvent->Write(); Top_1_Mass_viaNPgenEvent->Write(); W_1_Mass_viaNPgenEvent->Write(); Top_2_IdCharge_viaNPgenEvent->Write(); Top_2_Mass_viaNPgenEvent->Write(); W_2_Mass_viaNPgenEvent->Write(); cosTheta->Write(); cosTheta2->Write(); cosThetaREC->Write(); cosThetaRG->Write(); fout->Write(); fout->Close(); cout << nInit << "\n" << nHLTrunB << "\n" << nMt << "\n" << nFinal << "\n" << nGoodSolution << endl; return 0; }