void genAnalysis( Int_t period = 1 ){ TString filesPath = "/scratch5/ceballos/ntuples_noweights/"; Double_t lumi = 0.0715; if(period == 1) lumi = 2.2; //******************************************************* //Input Files //******************************************************* vector<TString> infilenamev; vector<Int_t> infilecatv; TString puPath = ""; if (period==0){ puPath = "/home/ceballos/cms/cmssw/042/CMSSW_7_4_6/src/MitAnalysisRunII/data/puWeights_13TeV_50ns.root"; //infilenamev.push_back(Form("%sdata_AOD_50ns.root",filesPath.Data())); infilecatv.push_back(0); infilenamev.push_back(Form("%sWWTo2L2Nu_13TeV-powheg+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(1); //infilenamev.push_back(Form("%sDYJetsToLL_M-10to50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(2); //infilenamev.push_back(Form("%sDYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(2); //infilenamev.push_back(Form("%sTTTo2L2Nu_13TeV-powheg+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); //infilenamev.push_back(Form("%sST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); //infilenamev.push_back(Form("%sWZ_TuneCUETP8M1_13TeV-pythia8+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); //infilenamev.push_back(Form("%sZZ_TuneCUETP8M1_13TeV-pythia8+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); //infilenamev.push_back(Form("%sWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt50ns_MCRUN2_74_V9A-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(5); } else if(period==1){ puPath = "/home/ceballos/cms/cmssw/042/CMSSW_7_4_6/src/MitAnalysisRunII/data/puWeights_13TeV_25ns.root"; //infilenamev.push_back(Form("%sdata_AOD_25ns.root",filesPath.Data())); infilecatv.push_back(0); infilenamev.push_back(Form("%sWWTo2L2Nu_13TeV-powheg+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(1); //infilenamev.push_back(Form("%sDYJetsToLL_M-10to50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(2); //infilenamev.push_back(Form("%sDYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v3+AODSIM.root",filesPath.Data())); //infilecatv.push_back(2); //infilenamev.push_back(Form("%sTTTo2L2Nu_13TeV-powheg+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); //infilenamev.push_back(Form("%sST_tW_top_5f_//inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(3); //infilenamev.push_back(Form("%sST_tW_antitop_5f_//inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(3); //infilenamev.push_back(Form("%sZZTo2L2Nu_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sZZTo2L2Q_13TeV_amcatnloFXFX_madsp//in_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sZZTo4L_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sWZTo1L1Nu2Q_13TeV_amcatnloFXFX_madsp//in_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sWZTo2L2Q_13TeV_amcatnloFXFX_madsp//in_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v2+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sWZTo3LNu_TuneCUETP8M1_13TeV-powheg-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sWZZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sTTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madsp//in-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sTTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madsp//in-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sTTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sTTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sTTGJets_TuneCUETP8M1_13TeV-amcatnloFXFX-madsp//in-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(4); //infilenamev.push_back(Form("%sWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(5); //infilenamev.push_back(Form("%sWGToLNuG_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(6); //infilenamev.push_back(Form("%sGluGluHToWWTo2L2Nu_M125_13TeV_amcatnloFXFX_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sVBFHToWWTo2L2Nu_M125_13TeV_powheg_JHUgen_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sHWm//inusJ_HToWW_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sHWplusJ_HToWW_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sHZJ_HToWW_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sGluGluZH_HToWW_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sGluGluHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sVBFHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sWplusHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sWm//inusHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); //infilenamev.push_back(Form("%sttHJetToNonbb_M125_13TeV_amcatnloFXFX_madsp//in_pythia8_mWCutfix+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); //infilecatv.push_back(7); } else {assert(0);} //infilenamev.clear();infilecatv.clear(); //infilenamev.push_back(Form("/scratch5/ceballos/test/test.root")); infilecatv.push_back(1); if(infilenamev.size() != infilecatv.size()) assert(0); Float_t fMVACut[4][4]; InitializeJetIdCuts(fMVACut); TFile *fPUFile = TFile::Open(Form("%s",puPath.Data())); TH1D *fhDPU = (TH1D*)(fPUFile->Get("puWeights")); assert(fhDPU); fhDPU->SetDirectory(0); delete fPUFile; double xmin = 0.0; double xmax = 1.0; int nBinPlot = 200; double xminPlot = 0.0; double xmaxPlot = 200.0; const int allPlots = 160; TH1D* histo[allPlots]; for(int thePlot=0; thePlot<allPlots; thePlot++){ if (thePlot >= 0 && thePlot <= 39) {nBinPlot = 20; xminPlot = 0.0; xmaxPlot = 100.0;} else if(thePlot >= 40 && thePlot <= 79) {nBinPlot = 5; xminPlot = 0.0; xmaxPlot = 2.5;} else if(thePlot >= 80 && thePlot <= 80) {nBinPlot = 5; xminPlot =-0.5; xmaxPlot = 4.5;} else if(thePlot >= 81 && thePlot <= 90) {nBinPlot = 100; xminPlot = 0.0; xmaxPlot = 1.0;} else if(thePlot >=100 && thePlot <=109) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 100.0;} else if(thePlot >=110 && thePlot <=119) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 5.0;} else if(thePlot >=120 && thePlot <=129) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 100.0;} else if(thePlot >=130 && thePlot <=139) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 5.0;} else if(thePlot >=140 && thePlot <=149) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 100.0;} else if(thePlot >=150 && thePlot <=159) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 5.0;} TH1D* histos = new TH1D("histos", "histos", nBinPlot, xminPlot, xmaxPlot); histos->Sumw2(); histo[thePlot] = (TH1D*) histos->Clone(Form("histo%d",thePlot)); histos->Clear(); } //******************************************************* // Chain Loop //******************************************************* for(UInt_t ifile=0; ifile<infilenamev.size(); ifile++) { TFile the_input_file(infilenamev[ifile]); TTree *the_input_tree = (TTree*)the_input_file.FindObjectAny("events"); //TTree *the_input_all = (TTree*)the_input_file.FindObjectAny("all"); BareEvent eventEvent; eventEvent.setBranchAddresses(the_input_tree); BareJets eventJets; eventJets.setBranchAddresses(the_input_tree); BareLeptons eventLeptons; eventLeptons.setBranchAddresses(the_input_tree); BareTaus eventTaus; eventTaus.setBranchAddresses(the_input_tree); BareMet eventMet; eventMet.SetExtend(); eventMet.setBranchAddresses(the_input_tree); BareTrigger eventTrigger; eventTrigger.setBranchAddresses(the_input_tree); BareVertex eventVertex; eventVertex.setBranchAddresses(the_input_tree); BareMonteCarlo eventMonteCarlo; eventMonteCarlo.setBranchAddresses(the_input_tree); TNamed *triggerNames = (TNamed*)the_input_file.FindObjectAny("triggerNames"); char **tokens; size_t numtokens; tokens = strsplit(triggerNames->GetTitle(), ",", &numtokens); if(infilecatv[ifile] == 0){ for (int i = 0; i < (int)numtokens; i++) { printf("triggerNames(%2d): \"%s\"\n",(int)i,tokens[i]); } } else { printf("sampleNames(%d): %s\n",ifile,infilenamev[ifile].Data()); } double isoCut; for (int i=0; i<int(the_input_tree->GetEntries()/1.); ++i) { the_input_tree->GetEntry(i); if(i%100000==0) printf("event %d out of %d\n",i,(int)the_input_tree->GetEntries()); double totalWeight = 1;//eventMonteCarlo.mcWeight*lumi; vector<bool> isGenDupl; int nGoodGenLeptons = 0; for(int ngen0=0; ngen0<eventMonteCarlo.p4->GetEntriesFast(); ngen0++) { isGenDupl.push_back(0); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen0]) != 11 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen0]) != 13) isGenDupl[ngen0] = 1; if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen0]) != 11 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen0]) != 13) continue; for(int ngen1=ngen0+1; ngen1<eventMonteCarlo.p4->GetEntriesFast(); ngen1++) { if(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen0])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.p4)[ngen1])) < 0.02) { isGenDupl[ngen0] = 1; break; } } if(isGenDupl[ngen0] == 0) nGoodGenLeptons++; } histo[80]->Fill((double)nGoodGenLeptons,totalWeight); for(int ngen=0; ngen<eventMonteCarlo.p4->GetEntriesFast(); ngen++) { if(isGenDupl[ngen] == 1) continue; if(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt() <= 10) continue; if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()) >= 2.5) continue; int nCount = 0; if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) nCount = 10; histo[nCount+ 0]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+40]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); int whichRecoLepton = -1; for(int nlep=0; nlep<eventLeptons.p4->GetEntriesFast(); nlep++) { if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen]) && ((TLorentzVector*)(*eventLeptons.p4)[nlep])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])) < 0.1) { whichRecoLepton = nlep; break; } } if(whichRecoLepton >= 0) { if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==13) histo[81]->Fill(TMath::Min((double)(*eventLeptons.iso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) histo[82]->Fill(TMath::Min((double)(*eventLeptons.iso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==13) histo[83]->Fill(TMath::Min((double)(*eventLeptons.chIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) histo[84]->Fill(TMath::Min((double)(*eventLeptons.chIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==13) histo[85]->Fill(TMath::Min((double)(*eventLeptons.nhIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) histo[86]->Fill(TMath::Min((double)(*eventLeptons.nhIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==13) histo[87]->Fill(TMath::Min((double)(*eventLeptons.phoIso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) histo[88]->Fill(TMath::Min((double)(*eventLeptons.phoIso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==13) histo[89]->Fill(TMath::Min((double)(*eventLeptons.puIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen])==11) histo[90]->Fill(TMath::Min((double)(*eventLeptons.puIso) [whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt(),0.999),totalWeight); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepBaseline) == BareLeptons::LepBaseline) { histo[nCount+ 1]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+41]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.1260 : 0.1440); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepVeto) == BareLeptons::LepVeto && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 2]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+42]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepFake) == BareLeptons::LepFake) { histo[nCount+ 3]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+43]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.0893 : 0.1210); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepLoose) == BareLeptons::LepLoose && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 4]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+44]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.0766 : 0.0678); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepMedium) == BareLeptons::LepMedium && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 5]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+45]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.0354 : 0.0646); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepTight) == BareLeptons::LepTight && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 6]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+46]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepSoftIP) == BareLeptons::LepSoftIP) { histo[nCount+ 7]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+47]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.0766 : 0.0678); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepMediumIP) == BareLeptons::LepMediumIP && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 8]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+48]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[whichRecoLepton]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Eta()) ? 0.0354 : 0.0646); if(((int)(*eventLeptons.selBits)[whichRecoLepton] & BareLeptons::LepTightIP) == BareLeptons::LepTightIP && (double)(*eventLeptons.iso)[whichRecoLepton]/((TLorentzVector*)(*eventLeptons.p4)[whichRecoLepton])->Pt() < isoCut) { histo[nCount+ 9]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt(),99.999),totalWeight); histo[nCount+49]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()),totalWeight); } } } // end loop over gen leptons for(int nlep=0; nlep<eventLeptons.p4->GetEntriesFast(); nlep++) { int nCount = 20; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep])==11) nCount = 30; int whichGenLepton = -1; for(int ngen=0; ngen<eventMonteCarlo.p4->GetEntriesFast(); ngen++) { if(isGenDupl[ngen] == 1) continue; if(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Pt() <= 10) continue; if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])->Eta()) >= 2.5) continue; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen]) && ((TLorentzVector*)(*eventLeptons.p4)[nlep])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])) < 0.1) { whichGenLepton = nlep; break; } } if(whichGenLepton == -1) { histo[nCount+ 0]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+40]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepBaseline) == BareLeptons::LepBaseline) { histo[nCount+ 1]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+41]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.1260 : 0.1440); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepVeto) == BareLeptons::LepVeto && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 2]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+42]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepFake) == BareLeptons::LepFake) { histo[nCount+ 3]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+43]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.0893 : 0.1210); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepLoose) == BareLeptons::LepLoose && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 4]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+44]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.0766 : 0.0678); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepMedium) == BareLeptons::LepMedium && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 5]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+45]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.0354 : 0.0646); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepTight) == BareLeptons::LepTight && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 6]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+46]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepSoftIP) == BareLeptons::LepSoftIP) { histo[nCount+ 7]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+47]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.0766 : 0.0678); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepMediumIP) == BareLeptons::LepMediumIP && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 8]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+48]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } isoCut = 0.12; if(TMath::Abs((int)(*eventLeptons.pdgId)[nlep]) == 11) isoCut = (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()) ? 0.0354 : 0.0646); if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepTightIP) == BareLeptons::LepTightIP && (double)(*eventLeptons.iso)[nlep]/((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt() < isoCut) { histo[nCount+ 9]->Fill(TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt(),99.999),totalWeight); histo[nCount+49]->Fill(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),totalWeight); } } } // end loop over reco leptons vector<int> idLep; for(int nlep=0; nlep<eventLeptons.p4->GetEntriesFast(); nlep++) { if(selectIdIsoCut("medium",TMath::Abs((int)(*eventLeptons.pdgId)[nlep]),TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt()), TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),(double)(*eventLeptons.iso)[nlep],(int)(*eventLeptons.selBits)[nlep])) {idLep.push_back(nlep);} else if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepFake) == BareLeptons::LepFake ) {idLep.push_back(nlep);} } vector<int> idGenJet; for(int ngenj=0; ngenj<eventMonteCarlo.jetP4->GetEntriesFast(); ngenj++) { Bool_t isGenLepton = kFALSE; for(int ngenl=0; ngenl<eventMonteCarlo.p4->GetEntriesFast(); ngenl++) { if(TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngenl]) != 12 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngenl]) != 14 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngenl]) != 16 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngenl]) != 11 && TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngenl]) != 13) continue; if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[ngenj])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.p4)[ngenl])) < 0.3) isGenLepton = kTRUE; } if(isGenLepton == kTRUE) continue; if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[ngenj])->Eta()) >= 5) continue; idGenJet.push_back(ngenj); } vector<int> idJet; vector<int> idMVAJet; for(int nj=0; nj<eventJets.p4->GetEntriesFast(); nj++){ if(((TLorentzVector*)(*eventJets.p4)[nj])->Pt() < 10) continue; Bool_t isLepton = kFALSE; for(unsigned int nl=0; nl<idLep.size(); nl++){ if(((TLorentzVector*)(*eventJets.p4)[nj])->DeltaR(*((TLorentzVector*)(*eventLeptons.p4)[idLep[nl]])) < 0.3) isLepton = kTRUE; } if(isLepton == kTRUE) continue; if(((TLorentzVector*)(*eventJets.p4)[nj])->Pt() < 30) continue; idJet.push_back(nj); bool passId = passJetId(fMVACut, (float)(*eventJets.puId)[nj], ((TLorentzVector*)(*eventJets.p4)[nj])->Pt(), TMath::Abs(((TLorentzVector*)(*eventJets.p4)[nj])->Eta())); if(passId == false) continue; idMVAJet.push_back(nj); } for(unsigned int ngenj=0; ngenj<idGenJet.size(); ngenj++) { int nCount = 100; if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()) < 2.5) histo[nCount+ 0]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt() > 30) histo[nCount+10]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()),totalWeight); bool isRecoJet = kFALSE; for(unsigned int nj=0; nj<idJet.size(); nj++){ if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->DeltaR(*((TLorentzVector*)(*eventJets.p4)[idJet[nj]])) < 0.4) isRecoJet = kTRUE; } if(isRecoJet == kTRUE) { if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()) < 2.5) histo[nCount+ 1]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt() > 30) histo[nCount+11]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()),totalWeight); } isRecoJet = kFALSE; for(unsigned int nj=0; nj<idMVAJet.size(); nj++){ if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->DeltaR(*((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])) < 0.4) isRecoJet = kTRUE; } if(isRecoJet == kTRUE) { if(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()) < 2.5) histo[nCount+ 2]->Fill(TMath::Min(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Pt() > 30) histo[nCount+12]->Fill(TMath::Abs(((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])->Eta()),totalWeight); } } for(unsigned int nj=0; nj<idJet.size(); nj++) { int nCount = 120; if(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Eta()) < 2.5) histo[nCount+ 0]->Fill(TMath::Min(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Pt() > 30) histo[nCount+10]->Fill(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Eta()),totalWeight); bool isGenJet = kFALSE; for(unsigned int ngenj=0; ngenj<idGenJet.size(); ngenj++){ if(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])) < 0.4) isGenJet = kTRUE; } if(isGenJet == kFALSE) { if(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Eta()) < 2.5) histo[nCount+ 1]->Fill(TMath::Min(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Pt() > 30) histo[nCount+11]->Fill(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idJet[nj]])->Eta()),totalWeight); } } for(unsigned int nj=0; nj<idMVAJet.size(); nj++) { int nCount = 140; if(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Eta()) < 2.5) histo[nCount+ 0]->Fill(TMath::Min(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Pt() > 30) histo[nCount+10]->Fill(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Eta()),totalWeight); bool isGenJet = kFALSE; for(unsigned int ngenj=0; ngenj<idGenJet.size(); ngenj++){ if(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.jetP4)[idGenJet[ngenj]])) < 0.4) isGenJet = kTRUE; } if(isGenJet == kFALSE) { if(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Eta()) < 2.5) histo[nCount+ 1]->Fill(TMath::Min(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Pt(),99.999),totalWeight); if(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Pt() > 30) histo[nCount+11]->Fill(TMath::Abs(((TLorentzVector*)(*eventJets.p4)[idMVAJet[nj]])->Eta()),totalWeight); } } } // end of loop } // end of chain for(int np= 1; np<10; np++) histo[np]->Divide(histo[ 0]); for(int np=11; np<20; np++) histo[np]->Divide(histo[10]); for(int np=21; np<30; np++) histo[np]->Divide(histo[20]); for(int np=31; np<40; np++) histo[np]->Divide(histo[30]); for(int np=41; np<50; np++) histo[np]->Divide(histo[40]); for(int np=51; np<60; np++) histo[np]->Divide(histo[50]); for(int np=61; np<70; np++) histo[np]->Divide(histo[60]); for(int np=71; np<80; np++) histo[np]->Divide(histo[70]); for(int np=80; np<=90; np++) histo[np]->Scale(1./histo[np]->GetSumOfWeights()); for(int np=101; np<110; np++) histo[np]->Divide(histo[100]); for(int np=111; np<120; np++) histo[np]->Divide(histo[110]); for(int np=121; np<130; np++) histo[np]->Divide(histo[120]); for(int np=131; np<140; np++) histo[np]->Divide(histo[130]); for(int np=141; np<150; np++) histo[np]->Divide(histo[140]); for(int np=151; np<160; np++) histo[np]->Divide(histo[150]); char output[200]; sprintf(output,"histo_geneff.root"); TFile* outFilePlotsNote = new TFile(output,"recreate"); outFilePlotsNote->cd(); for(int np=0; np<160; np++) histo[np]->Write(); outFilePlotsNote->Close(); }
void QCDAnalysis( Int_t nsel = 0, Int_t typeSel = 4, Int_t applyPrescale = 1, TString typeLepSel = "medium" ){ Int_t period = 1; TString filesPath = "/scratch5/ceballos/ntuples_weights/qcd_"; Double_t lumi = 0.0715; if(period == 1) lumi = 2.2; Double_t prescale[5]; double denFRDA[5][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; double numFRDA[5][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; double denFRBG[5][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; double numFRBG[5][5] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //******************************************************* //Input Files //******************************************************* vector<TString> infilenamev; vector<Int_t> infilecatv; TString puPath = ""; if (period==0){ } else if(period==1){ if (typeSel == 11) {prescale[0]=0.00000;prescale[1]=0.00859;prescale[2]=0.00520;prescale[3]=0.00750;prescale[4]=0.00956;} else if(typeSel == 13) {prescale[0]=0.00250;prescale[1]=0.07087;prescale[2]=0.09861;prescale[3]=0.09744;prescale[4]=0.09616;} puPath = "/home/ceballos/cms/cmssw/042/CMSSW_7_4_6/src/MitAnalysisRunII/data/puWeights_13TeV_25ns.root"; infilenamev.push_back(Form("%sdata_AOD_Run2015C1_25ns.root",filesPath.Data())); infilecatv.push_back(0); infilenamev.push_back(Form("%sdata_AOD_Run2015D3_25ns.root",filesPath.Data())); infilecatv.push_back(0); infilenamev.push_back(Form("%sdata_AOD_Run2015D4_25ns.root",filesPath.Data())); infilecatv.push_back(0); infilenamev.push_back(Form("%sWWTo2L2Nu_13TeV-powheg+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(1); infilenamev.push_back(Form("%sGluGluWWTo2L2Nu_MCFM_13TeV+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(1); infilenamev.push_back(Form("%sDYJetsToLL_M-10to50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(2); infilenamev.push_back(Form("%sDYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v3+AODSIM.root",filesPath.Data())); infilecatv.push_back(2); infilenamev.push_back(Form("%sTT_TuneCUETP8M1_13TeV-powheg-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); // tt->X (not tt->2l) infilenamev.push_back(Form("%sST_tW_top_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); infilenamev.push_back(Form("%sST_tW_antitop_5f_inclusiveDecays_13TeV-powheg-pythia8_TuneCUETP8M1+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(3); infilenamev.push_back(Form("%sZZTo2L2Nu_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sZZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sZZTo4L_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo2e2mu_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo2e2tau_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo2mu2tau_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo4e_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo4mu_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sGluGluToZZTo4tau_BackgroundOnly_13TeV_MCFM+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWZTo1L1Nu2Q_13TeV_amcatnloFXFX_madspin_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWZTo3LNu_TuneCUETP8M1_13TeV-powheg-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWWZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWZZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sZZZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v2+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sTTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sTTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sTTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sTTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sTTGJets_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(4); infilenamev.push_back(Form("%sWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(5); infilenamev.push_back(Form("%sWGToLNuG_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(6); //infilenamev.push_back(Form("%sZGTo2LG_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(6); infilenamev.push_back(Form("%sGluGluHToWWTo2L2Nu_M125_13TeV_powheg_JHUgen_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v3+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); infilenamev.push_back(Form("%sVBFHToWWTo2L2Nu_M125_13TeV_powheg_JHUgen_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); infilenamev.push_back(Form("%sGluGluHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); infilenamev.push_back(Form("%sVBFHToTauTau_M125_13TeV_powheg_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); /////infilenamev.push_back(Form("%sVHToNonbb_M125_13TeV_amcatnloFXFX_madspin_pythia8+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); /////infilenamev.push_back(Form("%sttHJetToNonbb_M125_13TeV_amcatnloFXFX_madspin_pythia8_mWCutfix+RunIISpring15DR74-Asympt25ns_MCRUN2_74_V9-v1+AODSIM.root",filesPath.Data())); infilecatv.push_back(7); } //infilenamev.push_back(Form("nero.root")); infilecatv.push_back(0); if(infilenamev.size() != infilecatv.size()) assert(0); Float_t fMVACut[4][4]; InitializeJetIdCuts(fMVACut); TFile *fPUFile = TFile::Open(Form("%s",puPath.Data())); TH1D *fhDPU = (TH1D*)(fPUFile->Get("puWeights")); assert(fhDPU); fhDPU->SetDirectory(0); delete fPUFile; double xmin = 0.0; double xmax = 1.0; int nBinPlot = 200; double xminPlot = 0.0; double xmaxPlot = 200.0; const int allPlots = 11; const int histBins = 8; TH1D* histo[allPlots][histBins]; for(int thePlot=0; thePlot<allPlots; thePlot++){ if (thePlot >= 0 && thePlot <= 5) {nBinPlot = 200; xminPlot = 0.0; xmaxPlot = 200.0;} else if(thePlot >= 6 && thePlot <= 6) {nBinPlot = 7; xminPlot =-0.5; xmaxPlot = 6.5;} else if(thePlot >= 7 && thePlot <= 7) {nBinPlot = 40; xminPlot = 0.0; xmaxPlot = 40.0;} else if(thePlot >= 8 && thePlot <= 8) {nBinPlot = 40; xminPlot =-0.5; xmaxPlot = 39.5;} else if(thePlot >= 9 && thePlot <= 9) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 50.0;} else if(thePlot >= 10 && thePlot <= 10) {nBinPlot = 50; xminPlot = 0.0; xmaxPlot = 2.5;} TH1D* histos = new TH1D("histos", "histos", nBinPlot, xminPlot, xmaxPlot); histos->Sumw2(); for(int i=0; i<histBins; i++) histo[thePlot][i] = (TH1D*) histos->Clone(Form("histo%d",i)); histos->Clear(); } //******************************************************* // Chain Loop //******************************************************* for(UInt_t ifile=0; ifile<infilenamev.size(); ifile++) { TFile the_input_file(infilenamev[ifile]); TTree *the_input_tree = (TTree*)the_input_file.FindObjectAny("events"); //TTree *the_input_all = (TTree*)the_input_file.FindObjectAny("all"); BareMonteCarlo eventMonteCarlo; eventMonteCarlo.setBranchAddresses(the_input_tree); BareEvent eventEvent; eventEvent.setBranchAddresses(the_input_tree); BareJets eventJets; eventJets.setBranchAddresses(the_input_tree); BareLeptons eventLeptons; eventLeptons.setBranchAddresses(the_input_tree); BareTaus eventTaus; eventTaus.setBranchAddresses(the_input_tree); BareMet eventMet; eventMet.SetExtend(); eventMet.setBranchAddresses(the_input_tree); BareTrigger eventTrigger; eventTrigger.setBranchAddresses(the_input_tree); BareVertex eventVertex; eventVertex.setBranchAddresses(the_input_tree); TNamed *triggerNames = (TNamed*)the_input_file.FindObjectAny("triggerNames"); char **tokens; size_t numtokens; tokens = strsplit(triggerNames->GetTitle(), ",", &numtokens); if(infilecatv[ifile] == 0){ for (int i = 0; i < (int)numtokens; i++) { printf("triggerNames(%2d): \"%s\"\n",(int)i,tokens[i]); } } else { printf("sampleNames(%d): %s\n",ifile,infilenamev[ifile].Data()); } Int_t nPassTrigger[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; Int_t nPassCuts[10] = {0,0,0,0,0,0,0,0,0,0}; double theMCPrescale = mcPrescale; if(infilecatv[ifile] == 0) theMCPrescale = 1.0; for (int i=0; i<int(the_input_tree->GetEntries()/theMCPrescale); ++i) { the_input_tree->GetEntry(i); if(i%100000==0) printf("event %d out of %d\n",i,(int)the_input_tree->GetEntries()); if(typeSel != 11 && typeSel != 13) assert(0); Bool_t passFilter = kFALSE; Bool_t passTrigger = kFALSE; for (int nt = 0; nt < (int)numtokens; nt++) { if(typeSel == 11 && (strcmp(tokens[nt],"HLT_Ele12_CaloIdL_TrackIdL_IsoVL_PFJet30_v*") == 0 || strcmp(tokens[nt],"HLT_Ele18_CaloIdL_TrackIdL_IsoVL_PFJet30_v*") == 0 || strcmp(tokens[nt],"HLT_Ele23_CaloIdL_TrackIdL_IsoVL_PFJet30_v*") == 0 || strcmp(tokens[nt],"HLT_Ele33_CaloIdL_TrackIdL_IsoVL_PFJet30_v*") == 0) && (*eventTrigger.triggerFired)[nt] == 1) passTrigger = kTRUE; if(typeSel == 13 && (strcmp(tokens[nt],"HLT_Mu8_TrkIsoVVL_v*") == 0 || strcmp(tokens[nt],"HLT_Mu17_TrkIsoVVL_v*") == 0 || strcmp(tokens[nt],"HLT_Mu24_TrkIsoVVL_v*") == 0 || strcmp(tokens[nt],"HLT_Mu34_TrkIsoVVL_v*") == 0) && (*eventTrigger.triggerFired)[nt] == 1) passTrigger = kTRUE; } if(passTrigger == kTRUE && eventLeptons.p4->GetEntriesFast() >= 1 && ((TLorentzVector*)(*eventLeptons.p4)[0])->Pt() > 10 && (double)((TLorentzVector*)(*eventMet.p4)[0])->Pt() < 30.0) passFilter = kTRUE; if(passTrigger == kTRUE) nPassCuts[0]++; if(passFilter == kTRUE) nPassCuts[1]++; if(passFilter == kFALSE) continue; Bool_t passSel = kFALSE; TLorentzVector dilep;double deltaPhiDileptonMet = -999.0; double mtW = -999.0; vector<int> idLep; vector<int> idTight; for(int nlep=0; nlep<eventLeptons.p4->GetEntriesFast(); nlep++) { if(selectIdIsoCut(typeLepSel.Data(),TMath::Abs((int)(*eventLeptons.pdgId)[nlep]),TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Pt()), TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[nlep])->Eta()),(double)(*eventLeptons.iso)[nlep],(int)(*eventLeptons.selBits)[nlep])) {idTight.push_back(1); idLep.push_back(nlep);} else if(((int)(*eventLeptons.selBits)[nlep] & BareLeptons::LepFake) == BareLeptons::LepFake ) {idTight.push_back(0); idLep.push_back(nlep);} } vector<int> isGenLep; for(unsigned nl=0; nl<idLep.size(); nl++){ bool isGenLepton = false; for(int ngen=0; ngen<eventMonteCarlo.p4->GetEntriesFast(); ngen++) { if(TMath::Abs((int)(*eventLeptons.pdgId)[idLep[nl]]) == TMath::Abs((int)(*eventMonteCarlo.pdgId)[ngen]) && ((TLorentzVector*)(*eventLeptons.p4)[idLep[nl]])->DeltaR(*((TLorentzVector*)(*eventMonteCarlo.p4)[ngen])) < 0.1) { isGenLepton = true; break; } } if(isGenLepton == true) isGenLep.push_back(nl); } vector<int> idJet20,idJet30; for(int nj=0; nj<eventJets.p4->GetEntriesFast(); nj++){ if(((TLorentzVector*)(*eventJets.p4)[nj])->Pt() < 10) continue; bool passId = passJetId(fMVACut, (float)(*eventJets.puId)[nj], ((TLorentzVector*)(*eventJets.p4)[nj])->Pt(), TMath::Abs(((TLorentzVector*)(*eventJets.p4)[nj])->Eta())); //if(passId == false) continue; Bool_t isLepton = kFALSE; for(unsigned int nl=0; nl<idLep.size(); nl++){ if(((TLorentzVector*)(*eventJets.p4)[nj])->DeltaR(*((TLorentzVector*)(*eventLeptons.p4)[idLep[nl]])) < 0.3) isLepton = kTRUE; } if(isLepton == kTRUE) continue; if(((TLorentzVector*)(*eventJets.p4)[nj])->Pt() > 20) idJet20.push_back(nj); if(((TLorentzVector*)(*eventJets.p4)[nj])->Pt() > 30) idJet30.push_back(nj); } if (nsel == 0){ // Z->ll if(idLep.size() == 2) nPassCuts[2]++; if(idLep.size() == 2 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[1]])->Pt() > 10) nPassCuts[3]++; if(idLep.size() == 2 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[1]])->Pt() > 10 && (int)(*eventLeptons.pdgId)[idLep[0]]*(int)(*eventLeptons.pdgId)[idLep[1]] < 0 && TMath::Abs((int)(*eventLeptons.pdgId)[idLep[0]]) == TMath::Abs((int)(*eventLeptons.pdgId)[idLep[1]]) && TMath::Abs((int)(*eventLeptons.pdgId)[idLep[0]]) == typeSel && (infilecatv[ifile] == 0 || isGenLep.size() == 2)) { nPassCuts[4]++; dilep = ( ( *(TLorentzVector*)(eventLeptons.p4->At(idLep[0])) ) + ( *(TLorentzVector*)(eventLeptons.p4->At(idLep[1])) ) ); if(TMath::Abs(dilep.M()-91.1876)<15.0) passSel = kTRUE; } } else if(nsel == 1){ // fake if(idLep.size() == 1) nPassCuts[2]++; if(idLep.size() == 1 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10) nPassCuts[3]++; if(idLep.size() == 1 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10 && ((typeSel == 11 && idJet30.size() >= 1) ||(typeSel == 13 && idJet20.size() >= 1)) && TMath::Abs((int)(*eventLeptons.pdgId)[idLep[0]]) == typeSel && (infilecatv[ifile] == 0 || isGenLep.size() == 1)) { dilep = ( *(TLorentzVector*)(eventLeptons.p4->At(idLep[0])) ); nPassCuts[4]++; deltaPhiDileptonMet = TMath::Abs(dilep.DeltaPhi(*((TLorentzVector*)(*eventMet.p4)[0]))); mtW = TMath::Sqrt(2.0*dilep.Pt()*((TLorentzVector*)(*eventMet.p4)[0])->Pt()*(1.0 - cos(deltaPhiDileptonMet))); if(mtW < 20) passSel = kTRUE; } } else if(nsel == 2){ // W->ln if(idLep.size() == 1 && idTight[0] == 1) nPassCuts[2]++; if(idLep.size() == 1 && idTight[0] == 1 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10) nPassCuts[3]++; if(idLep.size() == 1 && idTight[0] == 1 && ((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() > 10 && TMath::Abs((int)(*eventLeptons.pdgId)[idLep[0]]) == typeSel && (infilecatv[ifile] == 0 || isGenLep.size() == 1)) { dilep = ( *(TLorentzVector*)(eventLeptons.p4->At(idLep[0])) ); nPassCuts[4]++; deltaPhiDileptonMet = TMath::Abs(dilep.DeltaPhi(*((TLorentzVector*)(*eventMet.p4)[0]))); mtW = TMath::Sqrt(2.0*dilep.Pt()*((TLorentzVector*)(*eventMet.p4)[0])->Pt()*(1.0 - cos(deltaPhiDileptonMet))); if(mtW > 50) passSel = kTRUE; } } if(passSel == kTRUE) nPassCuts[5]++; if(passSel == kFALSE) continue; if(mtW < 0){ deltaPhiDileptonMet = TMath::Abs(dilep.DeltaPhi(*((TLorentzVector*)(*eventMet.p4)[0]))); mtW = TMath::Sqrt(2.0*dilep.Pt()*((TLorentzVector*)(*eventMet.p4)[0])->Pt()*(1.0 - cos(deltaPhiDileptonMet))); } double mcWeight = eventMonteCarlo.mcWeight; if(infilecatv[ifile] == 0) mcWeight = 1.0; double theLumi = lumi; if(infilecatv[ifile] == 0) theLumi = 1.0; double puWeight = nPUScaleFactor(fhDPU, (double)eventVertex.npv); if(infilecatv[ifile] == 0) puWeight = 1.0; double effSF = 1.0; if(infilecatv[ifile] != 0){ for(unsigned int nl=0; nl<idLep.size(); nl++){ effSF = effSF * effScaleFactor(((TLorentzVector*)(*eventLeptons.p4)[idLep[nl]])->Pt(),TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[nl]])->Eta()),TMath::Abs((int)(*eventLeptons.pdgId)[idLep[nl]]),period,typeLepSel); } } int iPt = -1; if (((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() < 15){ iPt = 0; } else if(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() < 20){ iPt = 1; } else if(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() < 25){ iPt = 2; } else if(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt() < 30){ iPt = 3; } else { iPt = 4; } int iEta = -1; if (TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Eta()) < 0.5){ iEta = 0; } else if(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Eta()) < 1.0){ iEta = 1; } else if(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Eta()) < 1.5){ iEta = 2; } else if(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Eta()) < 2.0){ iEta = 3; } else { iEta = 4; } if(nsel == 0) iEta = 0; double thePrescale = 1.0; if(infilecatv[ifile] != 0 && applyPrescale == 1) thePrescale = prescale[iPt]; double totalWeight = mcWeight*theLumi*puWeight*effSF*thePrescale*theMCPrescale; if(infilecatv[ifile] == 0) { denFRDA[iPt][iEta] = denFRDA[iPt][iEta] + totalWeight; if(idTight[0] == 1) numFRDA[iPt][iEta] = numFRDA[iPt][iEta] + totalWeight; } else { denFRBG[iPt][iEta] = denFRBG[iPt][iEta] + totalWeight; if(idTight[0] == 1) numFRBG[iPt][iEta] = numFRBG[iPt][iEta] + totalWeight; } for(int thePlot=0; thePlot<allPlots; thePlot++){ double theVar = 0.0; if (thePlot == 0) theVar = TMath::Min(dilep.M(),199.999); else if(thePlot == 1) theVar = TMath::Min((double)((TLorentzVector*)(*eventMet.p4)[0])->Pt(),199.999); else if(thePlot == 2) theVar = TMath::Min((double)eventMet.metNoMu->Pt(),199.999); else if(thePlot == 3) theVar = TMath::Min((double)((TLorentzVector*)(*eventMet.p4)[0])->Pt(),199.999); else if(thePlot == 4) theVar = TMath::Min(dilep.Pt(),199.999); else if(thePlot == 5) theVar = TMath::Min(mtW,199.999); else if(thePlot == 6) theVar = TMath::Min((double)0.0,6.499); else if(thePlot == 7) theVar = TMath::Min((double)eventEvent.rho,39.999); else if(thePlot == 8) theVar = TMath::Min((double)eventVertex.npv,39.499); else if(thePlot == 9) theVar = TMath::Min(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Pt(),49.999); else if(thePlot == 10) theVar = TMath::Min(TMath::Abs(((TLorentzVector*)(*eventLeptons.p4)[idLep[0]])->Eta()),2.499); histo[thePlot][infilecatv[ifile]]->Fill(theVar,totalWeight); } } printf("eff_cuts: "); for(int nc=0; nc<6; nc++){ double nminusone = the_input_tree->GetEntries(); if(nc>0) nminusone = nPassCuts[nc-1]; printf("(%d): %8.5f(%8.5f) | ",nc,100*(double)nPassCuts[nc]/the_input_tree->GetEntries(),100*(double)nPassCuts[nc]/nminusone); } printf("\n"); } // end of chain for(int nc=0; nc<8; nc++){ printf("(%d): %5.2f | ",nc,histo[0][nc]->GetSumOfWeights()); } double sumTot[2] = {0.,0.}; printf("totalMC: %5.2f\n",histo[0][1]->GetSumOfWeights()+histo[0][2]->GetSumOfWeights()+histo[0][3]->GetSumOfWeights()+ histo[0][4]->GetSumOfWeights()+histo[0][5]->GetSumOfWeights()+histo[0][6]->GetSumOfWeights()+histo[0][7]->GetSumOfWeights()); for(int iEta=0; iEta<5; iEta++){ for(int iPt=0; iPt<5; iPt++){ sumTot[0] = sumTot[0] + denFRDA[iPt][iEta]; sumTot[1] = sumTot[1] + denFRBG[iPt][iEta]; printf("(%d,%d): (%6.1f-%6.1f)/(%6.1f-%6.1f)=%4.3f | ",iPt,iEta,numFRDA[iPt][iEta],numFRBG[iPt][iEta] , denFRDA[iPt][iEta],denFRBG[iPt][iEta], (numFRDA[iPt][iEta]-numFRBG[iPt][iEta])/(denFRDA[iPt][iEta]-denFRBG[iPt][iEta])); if(iPt==4) printf("\n"); } } printf("sumTot(da/bg) = %f / %f = %f\n",sumTot[0],sumTot[1],sumTot[0]/sumTot[1]); if(nsel == 0){ for(int iEta=0; iEta<5; iEta++){ for(int iPt=0; iPt<5; iPt++){ printf("(%d,%d): (%6.1f)/(%6.1f)=%7.5f | ",iPt,iEta,denFRDA[iPt][iEta],denFRBG[iPt][iEta],denFRDA[iPt][iEta]/denFRBG[iPt][iEta]); if(iPt==4) printf("\n"); } } } else { for(int iEta=0; iEta<5; iEta++){ for(int iPt=0; iPt<5; iPt++){ printf("(%d,%d): (%6.1f)/(%6.1f)=%4.3f | ",iPt,iEta,numFRDA[iPt][iEta] , denFRDA[iPt][iEta], (numFRDA[iPt][iEta])/(denFRDA[iPt][iEta])); if(iPt==4) printf("\n"); } } } if(typeSel == 11) printf("double fake_rate_e[%d][%d] = {\n",5,5); else printf("double fake_rate_m[%d][%d] = {\n",5,5); for(int iEta=0; iEta<5; iEta++){ for(int iPt=0; iPt<5; iPt++){ printf("%4.3f",TMath::Abs((numFRDA[iPt][iEta]-numFRBG[iPt][iEta])/(denFRDA[iPt][iEta]-denFRBG[iPt][iEta]))); if(iPt!=4||iEta!=4) printf(","); if(iPt==4) printf("\n"); } } printf("};\n"); for(int thePlot=0; thePlot<allPlots; thePlot++){ char output[200]; sprintf(output,"histo_fake_%d_%d_%d.root",thePlot,nsel,typeSel); TFile* outFilePlotsNote = new TFile(output,"recreate"); outFilePlotsNote->cd(); for(int np=0; np<histBins; np++) histo[thePlot][np]->Write(); outFilePlotsNote->Close(); } }
int CR5(){ TH1::SetDefaultSumw2(true); if(pcp)cout<<"going to set inputs"<<endl; TFile* srFile = new TFile( "../SearchRegions/SearchRegions.root", "READ"); TTree* srTree; srFile->GetObject( "SearchRegions", srTree); Int_t ID = 0; Float_t nJetCut = 0.; Float_t mtCut = 0.; Float_t dphiCut = 0.; Float_t centralityCut = 0.; Float_t metCut = 0.; Float_t yCut = 0.; Float_t mlbCut = 0.; Float_t m3Cut = 0.; Float_t mt2wCut = 0.; Float_t drlblCut = 10.; srTree->SetBranchAddress( "ID", &ID); srTree->SetBranchAddress( "nJetCut", &nJetCut); srTree->SetBranchAddress( "mtCut", &mtCut); srTree->SetBranchAddress( "dphiCut", &dphiCut); srTree->SetBranchAddress( "centralityCut", ¢ralityCut); srTree->SetBranchAddress( "metCut", &metCut); srTree->SetBranchAddress( "yCut", &yCut); srTree->SetBranchAddress( "mlbCut", &mlbCut); srTree->SetBranchAddress( "m3Cut", &m3Cut); srTree->SetBranchAddress( "mt2wCut", &mt2wCut); const int NSamples = 5; const int NLep = 3; TString sample[NSamples]; sample[0] = "Data"; sample[1] = "DiLep"; sample[2] = "OneLep"; sample[3] = "WJets"; sample[4] = "Rare"; bool lepFlag[NLep]; TString lep[NLep]; lep[0] = "El"; lep[1] = "Mu"; lep[2] = "ElAndMu"; Int_t n1 = 0; Int_t n2 = 0; Int_t n3 = 0; Int_t n4 = 0; Double_t integral = 0.; Double_t error = 0.; TString outFileName = "./CR5.root"; TFile* outFile = new TFile( outFileName, "RECREATE"); outFile->cd(); Float_t SFLep[NLep] = {}; Float_t SFLepErr[NLep] = {}; Float_t peakSFPre = 0.; Float_t peakSFPreErr = 0.; Float_t peakSFPost = 0.; Float_t peakSFPostErr = 0.; Float_t tailData = 0.; Float_t tailDataErr = 0.; Float_t tailMC = 0.; Float_t tailMCErr = 0.; Float_t tailDiLep = 0.; Float_t tailDiLepErr = 0.; Float_t SF = 0.; Float_t SFErr = 0.; TTree* tree[3]; for(int ilep = 0; ilep < NLep; ilep++){ tree[ilep] = new TTree( lep[ilep], lep[ilep]); tree[ilep]->Branch( "peakSFPre", &peakSFPre); tree[ilep]->Branch( "peakSFPreErr", &peakSFPreErr); tree[ilep]->Branch( "peakSFPost", &peakSFPost); tree[ilep]->Branch( "peakSFPostErr", &peakSFPostErr); tree[ilep]->Branch( "tailData", &tailData); tree[ilep]->Branch( "tailDataErr", &tailDataErr); tree[ilep]->Branch( "tailMC", &tailMC); tree[ilep]->Branch( "tailMCErr", &tailMCErr); tree[ilep]->Branch( "tailDiLep", &tailDiLep); tree[ilep]->Branch( "tailDiLepErr", &tailDiLepErr); tree[ilep]->Branch( "SF", &SF); tree[ilep]->Branch( "SFErr", &SFErr); } TString histoName = ""; TH1D* peakPreh[NSamples]; TH1D* peakSFPreh[NSamples]; TH1D* peakPosth[NSamples]; TH1D* peakSFPosth[NSamples]; TH1D* tailh[NSamples]; TH1D* SFh = new TH1D( "SF", "SF", 1, 0., 1.); for ( int iSample = 0; iSample < NSamples; iSample++){ peakPreh[iSample] = new TH1D( TString("peakPre") + sample[iSample], TString("peakPre") + sample[iSample], 1, 0., 1.); peakSFPreh[iSample] = new TH1D( TString("peakSFPre") + sample[iSample], TString("peakSFPre") + sample[iSample], 1, 0., 1.); peakPosth[iSample] = new TH1D( TString("peakPost") + sample[iSample], TString("peakPost") + sample[iSample], 1, 0., 1.); peakSFPosth[iSample] = new TH1D( TString("peakSFPost") + sample[iSample], TString("peakSFPost") + sample[iSample], 1, 0., 1.); tailh[iSample] = new TH1D( TString("tail") + sample[iSample], TString("tail") + sample[iSample], 1, 0., 1.); } int N = srTree->GetEntries(); TFile* inFile[NSamples]; TDirectory* inBaseDir[NSamples]; TH1D* mth[NSamples]; for (int iSample = 0; iSample < NSamples; iSample++){ TString inFileName = "./MakeHistos/"+sample[iSample]+".root"; inFile[iSample]= new TFile( inFileName,"READ"); } TH1D* numh = new TH1D( "num", "num", 1, 0., 1.); TH1D* denh = new TH1D( "den", "den", 1, 0., 1.); TH1D* tmph = new TH1D( "tmp", "tmp", 1, 0., 1.); for (int ilep = 0; ilep < NLep; ilep++){ for ( int iSR = 0; iSR < N; iSR++){ srTree->GetEntry(iSR); TString baseDirName = ""; baseDirName += iSR; for (int iSample = 0; iSample < NSamples; iSample++) inBaseDir[iSample] = inFile[iSample]->GetDirectory(baseDirName); //////////////////// // Cleaning //////////////////// numh->Clear(); numh->Reset(); denh->Clear(); denh->Reset(); tmph->Clear(); tmph->Reset(); SFh->Clear(); SFh->Reset(); for ( int iSample = 0; iSample < NSamples; iSample++){ peakPreh[iSample]->Clear(); peakPreh[iSample]->Reset(); peakSFPreh[iSample]->Clear(); peakSFPreh[iSample]->Reset(); peakPosth[iSample]->Clear(); peakPosth[iSample]->Reset(); peakSFPosth[iSample]->Clear(); peakSFPosth[iSample]->Reset(); tailh[iSample]->Clear(); tailh[iSample]->Reset(); } //////////////////// // Reading input //////////////////// for (int iSample = 0; iSample < NSamples; iSample++){ TString histoName = lep[ilep]; histoName += "-SearchRegionPreIsoTrackVeto/Mt"; inBaseDir[iSample]->GetObject(histoName, mth[iSample]); n1 = mth[0]->FindBin(50.); n2 = mth[0]->FindBin(79.99); n3 = mth[0]->FindBin(mtCut); n4 = mth[0]->GetNbinsX() + 1; integral = mth[iSample]->IntegralAndError( n1, n2, error); peakPreh[iSample]->SetBinContent(1, integral); peakPreh[iSample]->SetBinError(1, error); } for (int iSample = 0; iSample < NSamples; iSample++){ TString histoName = lep[ilep]; histoName += "-CR5/Mt"; inBaseDir[iSample]->GetObject(histoName, mth[iSample]); n1 = mth[0]->FindBin(50.); n2 = mth[0]->FindBin(79.99); n3 = mth[0]->FindBin(mtCut); n4 = mth[0]->GetNbinsX() + 1; integral = mth[iSample]->IntegralAndError( n1, n2, error); peakPosth[iSample]->SetBinContent(1, integral); peakPosth[iSample]->SetBinError(1, error); integral = mth[iSample]->IntegralAndError( n3, n4, error); tailh[iSample]->SetBinContent(1, integral); tailh[iSample]->SetBinError(1, error); } /////////////////////////////////////////// // Mt peak weight /////////////////////////////////////////// // peak SF Pre peakSFPreh[1]->Add(peakPreh[0]); peakSFPreh[1]->Add(peakPreh[3], -1.); peakSFPreh[1]->Add(peakPreh[4], -1.); denh->Clear(); denh->Reset(); denh->Add(peakPreh[1]); denh->Add(peakPreh[2]); peakSFPreh[1]->Divide(denh); peakSFPre = peakSFPreh[1]->GetBinContent(1); peakSFPreErr = peakSFPreh[1]->GetBinError(1); peakSFPreh[2]->SetBinContent( 1, peakSFPre); peakSFPreh[2]->SetBinError( 1, peakSFPreErr); // peak SF Post peakSFPosth[2]->Add(peakPosth[0]); tmph->Clear(); tmph->Reset(); peakSFPosth[2]->Add(peakPosth[3], -1.); peakSFPosth[2]->Add(peakPosth[4], -1.); tmph->Add(peakPosth[1]); tmph->Multiply(peakSFPreh[1]); tmph->Add(peakPosth[2]); peakSFPosth[2]->Divide(tmph); peakSFPost = peakSFPosth[2]->GetBinContent(1); peakSFPostErr = peakSFPosth[2]->GetBinError(1); /////////////////////////////////////////// // Tail and SF /////////////////////////////////////////// tailData = tailh[0]->GetBinContent(1); tailDataErr = tailh[0]->GetBinError(1); tmph->Clear(); tmph->Reset(); denh->Clear(); denh->Reset(); denh->Add(tailh[1]); denh->Multiply(peakSFPreh[1]); tmph->Add(tailh[2]); tmph->Multiply(peakSFPosth[2]); denh->Add(tmph); denh->Add(tailh[3]); denh->Add(tailh[4]); tailMC = denh->GetBinContent(1); tailMCErr = denh->GetBinError(1); tailDiLep = tailh[2]->GetBinContent(1); tailDiLepErr = tailh[2]->GetBinError(1); SFh->Add(tailh[0]); SFh->Divide(denh); SF = SFh->GetBinContent(1); SFErr = SFh->GetBinError(1); /////////////////////////////////////////////// // Fill outTree /////////////////////////////////////////////// tree[ilep]->Fill(); ////////////////////////////////// // Pritn some output ////////////////////////////////// cout<<ID<<"\t"; cout<<iSR<<" "<<ilep<<"\t"; cout<<peakSFPre<<"+-"<<peakSFPreErr<<"\t"; cout<<peakSFPost<<"+-"<<peakSFPostErr<<"\t"; cout<<SF<<"+-"<<SFErr<<endl; } } for (int iSample = 0; iSample < NSamples; iSample++) inFile[iSample]->Close(); for (int ilep = 0; ilep < NLep; ilep++){ outFile->cd(); tree[ilep]->Write(); } return 0; }
void compareTrig(){ TFile *f1 = TFile::Open("hltmenu_1TeV_1.0e10_startup_run122314_PD_MinBias_ohlt_all_2009_12_3.root"); TFile *f2 = TFile::Open("hltmenu_1TeV_1.0e10_startup_pythiaD6T_ohlt_30k_2009_12_3.root"); TH2F *overlap_data = (TH2F *) f1->Get("overlap"); TH2F *overlap_mc = (TH2F *) f2->Get("overlap"); TH2F *num_data = (TH2F *) f1->Get("trigCorrNum"); TH2F *num_mc = (TH2F *) f2->Get("trigCorrNum"); int nbin = num_data->GetNbinsY(); for(int i=1 ; i <= nbin ;i++){ string t = int2string(i); string name = "c"+t; TCanvas *c = new TCanvas(name.c_str(),"c",1); char *na = num_data->GetYaxis()->GetBinLabel(i); TH1D *x = overlap_data->ProjectionY("xh",i,i); TH1D *y = overlap_mc->ProjectionY("yh",i,i); //get denominators double de_data = num_data->GetBinContent(i,i); double de_mc = num_mc->GetBinContent(i,i); if(debug) { cout << na << endl; cout << "data= " << de_data << " mc= " << de_mc << endl; } //Set error from overlap plot for(int j=1; j <= nbin; j++){ //get numerators double nu_data = num_data->GetBinContent(i,j); double nu_mc = num_mc->GetBinContent(i,j); double xerr = sigma(nu_data, de_data, 3); double yerr = sigma(nu_mc, de_mc, 3); if(debug){ cout << "data= " << nu_data << " err= " << xerr << endl; cout << "mc= " << nu_mc << " err= " << yerr << endl; } x->SetBinError(j,xerr); y->SetBinError(j,yerr); } //Set histograms x->SetStats(0); x->Draw("P"); y->Draw("PSame"); x->SetMarkerStyle(20); y->SetMarkerStyle(22); x->SetMarkerSize(1.2); y->SetMarkerSize(1.2); x->SetMarkerColor(2); y->SetMarkerColor(4); x->SetLineColor(2); y->SetLineColor(4); x->GetXaxis()->LabelsOption("v"); y->GetXaxis()->LabelsOption("v"); c->SetBottomMargin(0.35); TLegend *l= new TLegend(0.6,0.91,1.0,1.0); l->SetHeader(na); l->AddEntry(x,"Data","pl"); l->AddEntry(y,"MC","pl"); l->SetFillColor(0); l->SetLineColor(0); l->Draw(); x->Clear(); y->Clear(); } }
void fitX(TString infname="/data/twang/BfinderRun2/DoubleMu/BfinderData_pp_20151202_bPt0jpsiPt0tkPt0p5/finder_pp_merged.root") { TFile *inf = new TFile(infname.Data()); TTree *ntmix = (TTree*) inf->Get("Bfinder/ntmix"); TH1D *h = new TH1D("h","",40,3.6,4); TCut cutTrk = "1"; //original YJ //TCut cutTrk = "Btrk1PixelHit>=2&&Btrk1StripHit>=7&&Btrk1Chi2ndf<5&&Btrk2PixelHit>=2&&Btrk2StripHit>=7&&Btrk2Chi2ndf<5"; TCut cutTotal="Btype==7&&Bpt>10&&abs(Beta)<10&&sqrt((Bmumueta-Btrk1Eta)*(Bmumueta-Btrk1Eta)+(Bmumuphi-Btrk1Phi)*(Bmumuphi-Btrk1Phi))<9999"&&cutTrk; TCanvas *c = new TCanvas("c","",750,600); ntmix->Draw("Bmass>>h",cutTotal); TFile*output=new TFile("histoX.root","recreate"); output->cd(); h->Write(); output->Close(); h->Sumw2(); TF1 *f = new TF1("f","[0]+[1]*x+[2]*x*x+[8]*x*x*x+[9]*x*x*x*x+[3]*Gaus(x,[4],[5])+[6]*Gaus(x,[7],[5])"); f->SetLineColor(4); f->SetParameters(-2.2597e4,1.326e4,-1.727e3,50,3.686,0.00357,1,3.8725,0.0054); f->FixParameter(4,3.686); f->FixParameter(5,0.00357); f->FixParameter(7,3.8725); h->Fit("f","LL"); h->Fit("f",""); h->Fit("f","LL"); h->Fit("f","LL","",3.65,3.94); h->Fit("f","LL","",3.65,3.94); f->ReleaseParameter(4); f->ReleaseParameter(5); f->ReleaseParameter(7); h->Fit("f","LL","",3.65,3.94); h->SetXTitle("m(J/#psi#pi^{+}#pi^{-}) [GeV]"); h->SetYTitle("Entries"); h->SetStats(0); h->SetAxisRange(0,h->GetMaximum()*1.3 ,"Y"); TF1 *f2 = new TF1("f2","[0]+[1]*x+[2]*x*x+0*Gaus(x,[4],[5])+0*Gaus(x,[7],[5])"); f2->SetParameter(0,f->GetParameter(0)); f2->SetParameter(1,f->GetParameter(1)); f2->SetParameter(2,f->GetParameter(2)); TF1 *f3 = new TF1("f3","[3]*Gaus(x,[4],[5])+[6]*Gaus(x,[7],[5])"); f3->SetParameter(3,f->GetParameter(3)); f3->SetParameter(4,f->GetParameter(4)); f3->SetParameter(5,f->GetParameter(5)); f3->SetParameter(6,f->GetParameter(6)); f3->SetParameter(7,f->GetParameter(7)); f3->SetParameter(8,f->GetParameter(8)); f->SetLineColor(4); f2->SetLineColor(4); f3->SetRange(3.65,3.94); f2->SetRange(3.65,3.94); f2->SetLineStyle(2); f3->SetLineStyle(2); f2->Draw("same"); f3->SetLineColor(2); f3->SetFillStyle(3004); f3->SetFillColor(2); f3->Draw("same"); TLatex *l = new TLatex(3.7,70./80*h->GetMaximum(),"#psi(2S)"); l->Draw(); TLatex *l2 = new TLatex(3.875,50./80*h->GetMaximum(),"X(3872)"); l2->Draw(); TLatex *l3 = new TLatex(3.812,70./80*h->GetMaximum(),"CMS Preliminary"); l3->Draw(); TLatex *l4 = new TLatex(3.78,60./80*h->GetMaximum(),"pp #sqrt{s_{NN}}=5.02 TeV"); l4->Draw(); cout<<ntmix->GetEntries()<<endl; TH1D *hProj = (TH1D*)h->Clone("hProj"); hProj->Clear(); f->SetRange(3.6,4); for (int i=0;i<h->GetEntries()*11;i++) { hProj->Fill(f->GetRandom()); } TCanvas *c2 = new TCanvas("c2","",750,600); hProj->SetTitle("Estimated Projection"); hProj->Draw("e"); }