#include #include #include #include #include #include "TFile.h" #include "TTree.h" #include "TH1D.h" #include #include "THStack.h" #include "TLegend.h" #include "TCanvas.h" #include "TPad.h" #include "TLatex.h" #include "TStyle.h" #include "math.h" #include #include #include #include "analysiscode-output-index.h" Int_t main() { const int n = 83; //Number of n-tuples std::string OUTPUT= "OUTPUT.root"; std::string OUTPUTCUT= "OUTPUTCUT.root"; //OPTIONS const Int_t num=14; //Number of iterations (starting from this # -> 0) Bool_t sameflavour=true; Bool_t cuts=true; Bool_t cutflow=false; Bool_t boosting=true; Bool_t ZZCR= false; // Importing the Data from the Email std::string filename[n]; //ZH signal filename[0]=" 167072.root"; //ZZ filename[1]="126937.root"; filename[2]= "126938.root"; filename[3]="126939.root"; filename[4]="126940.root"; filename[5]="126941.root"; filename[6]="126942.root"; filename[7]="116601.root"; filename[8]="116602.root"; filename[9]="116603.root"; //ttW (top quark in this case) filename[10]="119353.root"; filename[11]="119354.root"; //ttZ (and in this one) filename[12]="119355.root"; filename[13]="119356.root"; //WZ filename[14]="146890.root"; filename[15]="146891.root"; filename[16]="146892.root"; filename[17]="146893.root"; filename[18]="146894.root"; filename[19]="146895.root"; //Z+jets //Zll+p (60-2000) //filename[20]="107650.root"; filename[21]="107651.root"; filename[22]="107652.root"; filename[23]="107653.root"; filename[24]="107654.root"; filename[25]="107655.root"; //filename[26]="107660.root"; filename[27]="107661.root"; filename[28]="107662.root"; filename[29]="107663.root"; filename[30]="107664.root"; filename[31]="107665.root"; //filename[32]="107670.root"; filename[33]="107671.root"; filename[34]="107672.root"; //filename[35]="146993.root"; //!!!!!!!!!!!!!!!!!!WHY NOT 107673 //filename[36]="107674.root"; //filename[37]="107675.root"; //end of Ztt+p //!!!!!!!!!DON't HAVE 107675???? //Zll+p_2L (10-60) filename[38]="146860.root"; filename[39]="146861.root"; filename[40]="146862.root"; filename[41]="146863.root"; filename[42]="146864.root"; filename[43]="146835.root"; filename[44]="146870.root"; filename[45]="146871.root"; filename[46]="146872.root"; filename[47]="146873.root"; filename[48]="146874.root"; filename[49]="146845.root"; filename[50]="146880.root"; filename[51]="146881.root"; filename[52]="146882.root"; filename[53]="146883.root"; filename[54]="146854.root"; filename[55]="146855.root"; ////??????? //Zll+bb+p filename[56]="109300.root"; filename[57]="109301.root"; filename[58]="109302.root"; filename[59]="109303.root"; filename[60]="109305.root"; filename[61]="109306.root"; filename[62]="109307.root"; filename[63]="109308.root"; filename[64]="109310.root"; filename[65]="109311.root"; filename[66]="109312.root"; filename[67]="109313.root"; //Zll+cc+p filename[68]="126414.root"; filename[69]="126415.root"; filename[70]="126416.root"; filename[71]="126417.root"; filename[72]="126418.root"; filename[73]="126419.root"; filename[74]="126420.root"; filename[75]="126421.root"; filename[76]="117706.root"; filename[77]="117707.root"; filename[78]="117708.root"; filename[79]="117708.root"; //WWjets //filename[80]="126892.root"; //ZWW filename[81]="167007.root"; //ZZZ filename[82]="167008.root"; //ggHZZ filename[83]="160155.root"; // Not on the list //name of output files std::string NameString[n]; NameString[0]=" OutZH"; NameString[1]="OutZZ-4e"; NameString[2]= "OutZZ-2e2m"; NameString[3]="OutZZ-2e2tau"; NameString[4]="OutZZ-4m"; NameString[5]="OutZZ-2m2tau"; NameString[6]="OutZZ-4tau"; NameString[7]="Outgg2ZZ-4e"; NameString[8]="Outgg2ZZ-4m"; NameString[9]="Outgg2ZZ-2e2m"; NameString[10]="Out-ttW"; NameString[11]="Out-ttWj"; NameString[12]="Out-ttZ"; NameString[13]="Out-ttZj"; NameString[14]="WZ-ee7-"; NameString[15]="WZ-ee7+"; NameString[16]="WZ-mm7-"; NameString[17]="WZ-mm7-"; NameString[18]="WZ-tt7-"; NameString[19]="WZ-tt7-"; //NameString[20]="Zee+0p60+"; NameString[21]="Zee+1p60+"; NameString[22]="Zee+2p60+"; NameString[23]="Zee+3p60+"; NameString[24]="Zee+4p60+"; NameString[25]="Zee+5p60+"; //NameString[26]="Zmm+0p60+"; NameString[27]="Zmm+1p60+"; NameString[28]="Zmm+2p60+"; NameString[29]="Zmm+3p60+"; NameString[30]="Zmm+4p60+"; NameString[31]="Zmm+5p60+"; //NameString[32]="Ztt+0p60+"; NameString[33]="Ztt+1p60+"; NameString[34]="Ztt+2p60+"; NameString[35]="Ztt+3p60+"; NameString[36]="Ztt+4p60+"; NameString[37]="Ztt+5p60+"; NameString[38]="Zee+0p_2L"; NameString[39]="Zee+1p_2L"; NameString[40]="Zee+2p_2L"; NameString[41]="Zee+3p_2L"; NameString[42]="Zee+4p_2L"; NameString[43]="Zee+5p_2L"; NameString[44]="Zmm+0p_2L"; NameString[45]="Zmm+1p_2L"; NameString[46]="Zmm+2p_2L"; NameString[47]="Zmm+3p_2L"; NameString[48]="Zmm+4p_2L"; NameString[49]="Zmm+5p_2L"; NameString[50]="Ztt+0p_2L"; NameString[51]="Ztt+1p_2L"; NameString[52]="Ztt+2p_2L"; NameString[53]="Ztt+3p_2L"; NameString[54]="Ztt+4p_2L"; NameString[55]="Ztt+5p_2L"; ////??????? NameString[56]="Zee+bb+0p"; NameString[57]="Zee+bb+1p"; NameString[58]="Zee+bb+2p"; NameString[59]="Zee+bb+3p"; NameString[60]="Zmm+bb+0p"; NameString[61]="Zmm+bb+1p"; NameString[62]="Zmm+bb+2p"; NameString[63]="Zmm+bb+3p"; NameString[64]="Ztt+bb+0p"; NameString[65]="Ztt+bb+1p"; NameString[66]="Ztt+bb+2p"; NameString[67]="Ztt+bb+3p"; NameString[68]="Zee+cc+0p"; NameString[69]="Zee+cc+1p"; NameString[70]="Zee+cc+2p"; NameString[71]="Zee+cc+3p"; NameString[72]="Zmm+cc+0p"; NameString[73]="Zmm+cc+1p"; NameString[74]="Zmm+cc+2p"; NameString[75]="Zmm+cc+3p"; NameString[76]="Ztt+cc+0p"; NameString[77]="Ztt+cc+1p"; NameString[78]="Ztt+cc+2p"; NameString[79]="Ztt+cc+3p"; //NameString[80]="WWjets"; NameString[81]="ZWW"; NameString[82]="ZZZ"; //NameString[83]="ggHZZ"; // Clear the output file TFile foutput(OUTPUT.c_str(), "RECREATE"); foutput.Close(); TFile foutputcut(OUTPUTCUT.c_str(), "RECREATE"); foutputcut.Close(); //Declaring variables for calculating weights Double_t xsec[n], Kfactor[n], Filter[n], Alpgen[n]; xsec[0]= 0.0847745; xsec[1]= 0.07350; xsec[2]= 0.1708; xsec[3]= 0.1708; xsec[4]= 0.0735; xsec[5]= 0.1708; xsec[6]= 0.0735; xsec[7]= 0.00075; xsec[8]= 0.00075; xsec[9]= 0.0015; xsec[10]= 0.10410; xsec[11]= 0.093317; xsec[12]= 0.06769; xsec[13]= 0.087339; xsec[14]= 5.6000; xsec[15]= 0.33705; xsec[16]= 1.3777; xsec[17]= 0.33777; xsec[18]= 0.14717; xsec[19]= 0.34801; // xsec[20]= 711.77; xsec[21]= 155.17; xsec[22]= 48.745; xsec[23]= 14.225; xsec[24]= 3.7595; xsec[25]= 1.0945; //xsec[26]= 712.11; xsec[27]= 154.77; xsec[28]= 48.912; xsec[29]= 14.226; xsec[30]= 3.7838; xsec[31]= 1.1148; // xsec[32]= 711.81; xsec[33]= 155.13; xsec[34]= 48.804; // xsec[35]= 14.184; //////////// ^^^?? // xsec[36]= 3.7744; xsec[37]= 1.1163; xsec[38]= 3477.9; xsec[39]= 108.72; xsec[40]= 52.837; xsec[41]= 11.291; xsec[42]= 2.5852; xsec[43]= 0.69267;//? xsec[44]= 3477.7; xsec[45]= 108.74; xsec[46]= 52.814; xsec[47]= 11.299; xsec[48]= 2.5793; xsec[49]= 0.69267; //? xsec[50]= 3477.9; xsec[51]= 108.71; xsec[52]= 52.827; xsec[53]= 11.311; xsec[54]= 2.592; //? xsec[55]= 0.6929; //? xsec[56]= 8.3777; xsec[57]= 3.2529; xsec[58]= 1.1902; xsec[59]= 0.50278; xsec[60]= 8.3742; xsec[61]= 3.2540; xsec[62]= 1.1810; xsec[63]= 0.50669; xsec[64]= 8.3757; xsec[65]= 3.2427; xsec[66]= 1.1938; xsec[67]= 0.049791; xsec[68]= 15.654; xsec[69]= 6.8946; xsec[70]= 2.9204; xsec[71]= 1.1411; xsec[72]= 15.649; xsec[73]= 6.8930; xsec[74]= 2.9176; xsec[75]= 1.377; xsec[76]= 15.652; xsec[77]= 6.8979; xsec[78]= 2.91; xsec[79]= 1.134; //xsec[80]= 5.679; xsec[81]= 0.0015546; xsec[82]= 0.00033239; Filter[0]= 0.011; Filter[1]= 0.090765; Filter[2]= 0.82724; Filter[3]= 0.58278; Filter[4]= 0.91241; Filter[5]= 0.58725; Filter[6]= 0.10604; Filter[7]= 1.; Filter[8]= 1.; Filter[9]= 1.; Filter[10]= 1.; Filter[11]= 1.; Filter[12]= 1.; Filter[13]= 1.; Filter[14]= 1.3; Filter[15]= 1.51; Filter[16]= 1.3; Filter[17]= 1.51; Filter[18]= 1.3; Filter[19]= 1.51; //Filter[80]= 1.; Filter[81]= 1.5; Filter[82]= 1.5; //shortcut to initialize variables instead of writing it out in a list for (Int_t j=0; j19 && j<38) {Alpgen[j]=1; Filter[j]=1.23;} else {Alpgen[j]=0.;} if (j==35) {Kfactor[j]=0.058973;} //^^^?????? else {Kfactor[j]=1.;} if (j>37 && j<56) {Alpgen[j]=1.; Filter[j]=1.19;} if (j>55 && j<80) {Alpgen[j]=1.; Filter[j]=1.25;} if (j>79) {Alpgen[j]=0.;} } //Running the Analysis Code Double_t zh,zz,ttW,ttZ, WZ, Zjets, ZWW, ZZZ; for (Int_t i=(num-1); i>=0; i--) { //Tree for the analysis output TTree toutput(NameString[i].c_str(), NameString[i].c_str()); toutput.SetDirectory(0); TTree toutputcut(NameString[i].c_str(), NameString[i].c_str()); toutputcut.SetDirectory(0); if (i==0) {zh= analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts , cutflow, boosting,ZZCR);} if (i>0 && i<10) {zz += analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting,ZZCR);} if (i>9 && i<12) {ttW += analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting,ZZCR);} if (i>11 && i<14) {ttZ += analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting,ZZCR);} if (i>13 && i<20) {WZ += analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting,ZZCR);} if (i>37 && i<80) {Zjets += analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting, ZZCR);} if (i==81) {ZWW = analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting, ZZCR);} if (i==82) {ZZZ = analysis(filename[i], &toutput, &toutputcut, xsec[i], Filter[i], Alpgen[i] , Kfactor[i], sameflavour, cuts, cutflow, boosting, ZZCR);} //Open the outputfile for appending and write to it TFile foutput(OUTPUT.c_str(), "UPDATE"); toutput.Write(); foutput.Close(); TFile foutputcut(OUTPUTCUT.c_str(), "UPDATE"); toutputcut.Write(); foutputcut.Close(); } Double_t signal=zh; Double_t background= zz+ttW+ttZ+WZ+Zjets; std::cout<<"Number of signal events is "<=0; i--) { if (i==0) { HistoZH= new TH1D("ZH Histo","Distribution of the Leptons - ZH Signal",NumberOfBins,minX,maxX); HistoZH->SetFillColor(4); HistoZH->SetLineColor(4); MakeHistogram( output, NameString[i], HistoZH , VariableToUse.c_str()) ; legZH->AddEntry(HistoZH,"ZH Signal","f");} if (i>0 && i<10) { Histo[(i-1)]= new TH1D(Form("ZZ Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(7); Histo[(i-1)]->SetLineColor(7); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; if (i==1) {legBackAllCuts->AddEntry(Histo[(i-1)],"ZZ","f");}} if (i>9 && i<12) { Histo[(i-1)]= new TH1D(Form("ttW Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(5); Histo[(i-1)]->SetLineColor(5); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; if (i==10) {legBackAllCuts->AddEntry(Histo[(i-1)],"ttW","f");}} if (i>11 && i<14) { Histo[(i-1)]= new TH1D(Form("ttZ Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(8); Histo[(i-1)]->SetLineColor(8); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; if (i==12) {legBackAllCuts->AddEntry(Histo[(i-1)],"ttZ","f");}} if (i>13 && i<20) { Histo[(i-1)]= new TH1D(Form("WZ Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(9); Histo[(i-1)]->SetLineColor(9); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; if (i==14) {legBackAllCuts->AddEntry(Histo[(i-1)],"WH","f");}} if (i>37 && i<80) { Histo[(i-1)]= new TH1D(Form("Z+jets Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(30); Histo[(i-1)]->SetLineColor(30); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; if (i==32) {legBackAllCuts->AddEntry(Histo[(i-1)],"Z+jets","f");}} if (i==81) { Histo[(i-1)]= new TH1D(Form("ZWW Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(23); Histo[(i-1)]->SetLineColor(23); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; legBackAllCuts->AddEntry(Histo[(i-1)],"ZWW","f");} if (i==82) { Histo[(i-1)]= new TH1D(Form("ZZZ Histo %d",(i-1)),"",NumberOfBins,minX,maxX); Histo[(i-1)]->SetFillColor(14); Histo[(i-1)]->SetLineColor(14); MakeHistogram( output, NameString[i], Histo[(i-1)] , VariableToUse.c_str()) ; legBackAllCuts->AddEntry(Histo[(i-1)],"ZZZ","f");} if (i>0) {StackedHisto->Add(Histo[(i-1)]);} } //This 'OUTPUTCUT' file is useful for easily displaying distributions after depending on which cuts are passed TFile* outputcut= new TFile(OUTPUTCUT.c_str(),"READ"); for (Int_t i=(num-1); i>=0; i--) { if (i==0) { TH1D* Histo2ZH= new TH1D("ZH Histo2","Distribution of the Leptons - ZH Signal",NumberOfBins,minX,maxX); Histo2ZH->SetFillColor(4); Histo2ZH->SetLineColor(4); MakeHistogram( outputcut, NameString[i], Histo2ZH , VariableToUse.c_str()) ;} if (i>0 && i<10) { Histo2[(i-1)]= new TH1D(Form("ZZ Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(7); Histo2[(i-1)]->SetLineColor(7); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; if (i==1) {legBack->AddEntry(Histo2[(i-1)],"ZZ","f");} } if (i>9 && i<12) { Histo2[(i-1)]= new TH1D(Form("ttW Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(5); Histo2[(i-1)]->SetLineColor(5); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; if (i==10) {legBack->AddEntry(Histo2[(i-1)],"ttW","f");}} if (i>11 && i<14) { Histo2[(i-1)]= new TH1D(Form("ttZ Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(8); Histo2[(i-1)]->SetLineColor(8); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; if (i==12) {legBack->AddEntry(Histo2[(i-1)],"ttZ","f");}} if (i>13 && i<20) { Histo2[(i-1)]= new TH1D(Form("WZ Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(9); Histo2[(i-1)]->SetLineColor(9); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; if (i==14) {legBack->AddEntry(Histo2[(i-1)],"WH","f");}} if (i>37 && i<80) { Histo2[(i-1)]= new TH1D(Form("Z+jets Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(30); Histo2[(i-1)]->SetLineColor(30); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; if (i==32) {legBack->AddEntry(Histo2[(i-1)],"Z+jets","f");}} if (i==81) { Histo2[(i-1)]= new TH1D(Form("ZWW Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(23); Histo2[(i-1)]->SetLineColor(23); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; legBack->AddEntry(Histo2[(i-1)],"ZWW","f");} if (i==82) { Histo2[(i-1)]= new TH1D(Form("ZZZ Histo2 %d",(i-1)),"",NumberOfBins,minX,maxX); Histo2[(i-1)]->SetFillColor(14); Histo2[(i-1)]->SetLineColor(14); MakeHistogram( outputcut, NameString[i], Histo2[(i-1)] , VariableToUse.c_str()) ; legBack->AddEntry(Histo2[(i-1)],"ZZZ","f");} if (i>0) {StackedHisto2->Add(Histo2[(i-1)]);} } //DRAWING to Canvas //TH1D *blank_histo = new TH1D("blank","",10,minX,maxX); //For i don't know what CanvasAfterAllCuts-> Divide (1,2); CanvasAfterAllCuts-> SetHighLightColor(0); CanvasAfterAllCuts-> cd(1); //Background For all cuts applied if (logscale) {gPad->SetLogy(1);} StackedHisto->Draw(); StackedHisto->GetYaxis()->SetTitle(yaxis.c_str()); StackedHisto->GetXaxis()->SetTitle(xaxis.c_str()); CanvasAfterAllCuts->Update(); if (logscale) {StackedHisto->SetMinimum(0.01);} legBackAllCuts-> Draw("same"); CanvasAfterAllCuts-> cd(2); //Signal all cuts applied if (logscale) {gPad->SetLogy(1);} HistoZH->Draw(); CanvasAfterAllCuts->Update(); HistoZH->GetYaxis()->SetTitle(yaxis.c_str()); HistoZH->GetXaxis()->SetTitle(xaxis.c_str()); CanvasAfterAllCuts->Update(); if (logscale) {HistoZH->SetMinimum(0.01); HistoZH->Draw();} legZH->Draw("same"); Canvas-> Divide(1,2); Canvas-> SetHighLightColor(0); Canvas-> cd(1); //Background For Distributions Depending on Cuts if (logscale) {gPad->SetLogy(1);} StackedHisto2->Draw(); StackedHisto2->GetYaxis()->SetTitle(yaxis.c_str()); StackedHisto2->GetXaxis()->SetTitle(xaxis.c_str()); Canvas->Update(); if (logscale) {StackedHisto2->SetMinimum(0.01); StackedHisto2->Draw();} Canvas->Update(); legBack->Draw("same"); Canvas-> cd(2); //Signal all cuts applied if (logscale) {gPad->SetLogy(1);} Histo2ZH->Draw(); Histo2ZH->GetYaxis()->SetTitle(yaxis.c_str()); Histo2ZH->GetXaxis()->SetTitle(xaxis.c_str()); Canvas->Update(); if (logscale){ Histo2ZH->SetMinimum(0.01); Histo2ZH->Draw();} legZH->Draw("same"); } return 0; }