diff --git a/AnalysisCode/BackgroundPrediction_Kinematic_Bern.c b/AnalysisCode/BackgroundPrediction_Kinematic_Bern.c index d9fe3b0..f6b9a4c 100644 --- a/AnalysisCode/BackgroundPrediction_Kinematic_Bern.c +++ b/AnalysisCode/BackgroundPrediction_Kinematic_Bern.c @@ -17,7 +17,7 @@ // Plot cosmetics int iPeriod = 4; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV -int iPos = 22; +int iPos = 11; #include "CMS_lumi.h" #include @@ -193,10 +193,14 @@ std::string itoa(int i) void BackgroundPrediction_Kinematic_Bern(double plot_lo, double plot_hi, double rebin, double fit_lo, double fit_hi, - double gaussexp_mean_lo, double gaussexp_mean_hi, + double crystalball_mean_lo, double crystalball_mean_hi, + double crystalball_width_lo, double crystalball_width_hi, + double crystalball_exp_lo, double crystalball_exp_hi, + double crystalball_switch_lo, double crystalball_switch_hi, + /*double gaussexp_mean_lo, double gaussexp_mean_hi, double gaussexp_width_lo, double gaussexp_width_hi, double gaussexp_exp_lo, double gaussexp_exp_hi, - std::string hist="h_mX_SB_kinFit", + */std::string hist="h_mX_SB_kinFit", std::string log="lin") { @@ -206,9 +210,9 @@ void BackgroundPrediction_Kinematic_Bern(double plot_lo, double plot_hi, double gStyle->SetOptStat(0000); writeExtraText = true; // if extra text extraText = "Preliminary"; // default extra text is "Preliminary" - lumi_13TeV = "2.3 fb^{-1}"; // default is "5.1 fb^{-1}" + lumi_13TeV = "35.9 fb^{-1}"; // default is "5.1 fb^{-1}" - TFile *f_data=new TFile("Histograms_BTagCSV_Skim.root"); + TFile *f_data=new TFile("Histograms_BTagall.root"); TH1F *h_mX_SR=(TH1F*)f_data->Get(hist.c_str()); h_mX_SR->Rebin(rebin); double nEventsSR=((TH1F*)f_data->Get("h_mX_SR_kinFit"))->GetSumOfWeights(); @@ -234,16 +238,16 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); // bg_p10=new RooRealVar("bg_p10", "bg_p10", 0., 5.); */ // RooBernstein bg_pol("bg_pol", "bg_pol", *x, RooArgList(*bg_p4, *bg_p5, *bg_p6)); - RooRealVar bg_p00("bg_p00", "bg_p00", gaussexp_mean_lo, gaussexp_mean_hi); + /*RooRealVar bg_p00("bg_p00", "bg_p00", gaussexp_mean_lo, gaussexp_mean_hi); RooRealVar bg_p11("bg_p11", "bg_p11", gaussexp_width_lo, gaussexp_width_hi); RooRealVar bg_p22("bg_p22", "bg_p22", gaussexp_exp_lo, gaussexp_exp_hi); - +*/ RooRealVar bg_p0("bg_p0", "bg_p0", 0.); //gaussexp_mean_lo, gaussexp_mean_hi); bg_p0.setConstant(1); RooRealVar bg_p1("bg_p1", "bg_p1",1. , 100.);//gaussexp_width_lo, gaussexp_width_hi); - RooRealVar bg_p2("bg_p2", "bg_p2", 310., 600.); ///210., 300. + RooRealVar bg_p2("bg_p2", "bg_p2", 210., 300. );//310., 600.); ///210., 300. // RooRealVar bg_p3("bg_p3", "bg_p3", -5., 5.); // RooRealVar bg_p4("bg_p4", "bg_p4", -5., 5.); /* bg_p3.setConstant(1); @@ -267,16 +271,29 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); //RooAddPdf bg("bg", "bg", RooArgList(bg_gauss, bg_pol), *bg_p7); //bg.fitTo(pred, RooFit::Range(fit_lo, fit_hi), RooFit::Save(), RooFit::Minimizer("Minuit","simplex")); RooFitResult *r_bg=bg.fitTo(pred, RooFit::Range(fit_lo, fit_hi), RooFit::Save()); - - bg_p1.setConstant(1); + /*bg_p1.setConstant(1); bg_p2.setConstant(1); bg_p4->setConstant(1); bg_p5->setConstant(1); bg_p6->setConstant(1); bg_p7->setConstant(1); - + */ + + //GaussExp bg_exp("bg_exp", "Background Prediction PDF", *x, bg_p00, bg_p11, bg_p22); + RooRealVar bg_p00("bg_p00", "bg_p00", crystalball_switch_lo, crystalball_switch_hi); + RooRealVar bg_p11("bg_p11", "bg_p11", crystalball_exp_lo, crystalball_exp_hi); + RooRealVar bg_p22("bg_p22", "bg_p22", crystalball_mean_lo, crystalball_mean_hi); + RooRealVar bg_p33("bg_p33", "bg_p33", crystalball_width_lo, crystalball_width_hi); + RevCrystalBall bg_exp("bg_exp", "Background Prediction PDF", *x, bg_p00, bg_p11, bg_p22, bg_p33); + + RooPlot *data_plot2=x->frame(); + RooFitResult *r_bg_exp=bg_exp.fitTo(pred, RooFit::Range(fit_lo, fit_hi), RooFit::Save()); + pred.plotOn(data_plot2); + + //bg_exp.plotOn(data_plot2, RooFit::VisualizeError(*r_bg_exp, 1, kFALSE), RooFit::FillColor(kCyan+1), RooFit::FillStyle(3001)); + bg_exp.plotOn(data_plot2, RooFit::LineColor(kBlue+1)); + pred.plotOn(data_plot2, RooFit::LineColor(kBlack), RooFit::MarkerColor(kBlack)); - GaussExp bg_exp("bg_exp", "Background Prediction PDF", *x, bg_p00, bg_p11, bg_p22); RooPlot *data_plot=x->frame(); @@ -288,6 +305,10 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); double fitChi2=data_plot->chiSquare(); std::cout<<"Fit chi2 = "<getVal(),int((fit_hi-fit_lo)/rebin)-3); + std::cout<<"p-value = "<getVal(),int((fit_hi-fit_lo)/rebin)-3)<SetBottomMargin(0.05); @@ -309,30 +330,38 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); c_Background->SetFillStyle(4000); c_Background->SetFrameFillColor(0); - TPad *p_1=new TPad("p_1", "p_1", 0, xPad, 1, 1); - p_1->SetFillStyle(4000); - p_1->SetFrameFillColor(0); - TPad* p_2 = new TPad("p_2", "p_2",0,0,1,xPad); - p_2->SetBottomMargin((1.-xPad)/xPad*0.13); - p_2->SetTopMargin(0.06); - p_2->SetFillColor(0); - p_2->SetBorderMode(0); - p_2->SetBorderSize(2); - p_2->SetFrameBorderMode(0); - p_2->SetFrameBorderMode(0); + TPad *p_1=new TPad("p_1", "p_1", 0, xPad, 1, 1); + p_1->SetFillStyle(4000); + p_1->SetFrameFillColor(0); + p_1->SetBottomMargin(0.02); + + TPad* p_2 = new TPad("p_2", "p_2",0,0,1,xPad); + p_2->SetBottomMargin((1.-xPad)/xPad*0.13); + p_2->SetTopMargin(0.03); + p_2->SetFillColor(0); + p_2->SetBorderMode(0); + p_2->SetBorderSize(2); + p_2->SetFrameBorderMode(0); + p_2->SetFrameBorderMode(0); p_1->Draw(); p_2->Draw(); p_1->cd(); + + if (log=="log") data_plot->GetYaxis()->SetRangeUser(1e-4, h_mX_SR->GetMaximum()*5.); else data_plot->GetYaxis()->SetRangeUser(0, h_mX_SR->GetMaximum()*1.5); data_plot->Draw(); + data_plot->GetXaxis()->SetLabelOffset(0.03); + data_plot->GetYaxis()->SetLabelFont(42); + data_plot->GetYaxis()->SetTitleFont(42); + data_plot2->Draw("same"); data_plot->GetYaxis()->SetTitleOffset(1.25); data_plot->SetTitle(("; m_{X} (GeV); Events / "+itoa(h_mX_SR->GetBinWidth(1))+" GeV").c_str()); if (log=="log") p_1->SetLogy(); - TPaveText *pave = new TPaveText(0.86,0.7,0.67,0.8,"NDC"); + TPaveText *pave = new TPaveText(0.86,0.6,0.67,0.7,"NDC"); pave->SetBorderSize(0); pave->SetTextSize(0.03); pave->SetLineColor(1); @@ -341,9 +370,14 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); pave->SetFillColor(0); pave->SetFillStyle(0); char name[1000]; - if (hist.substr(0,7)=="h_mX_SB") sprintf(name,"SB #chi^{2}/n = %.2f",fitChi2); + char name1[1000]; + if (hist.substr(0,7)=="h_mX_SB") { + sprintf(name,"SB #chi^{2}/n = %.2f",fitChi2); + sprintf(name1,"p-value = %.2f",pvalue); + } else sprintf(name,"SR #chi^{2}/n = %.2f",fitChi2); pave->AddText(name); + pave->AddText(name1); pave->Draw(); TLatex * tPrel = new TLatex(); @@ -351,7 +385,7 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); tPrel->SetTextColor(kBlack); tPrel->SetTextSize(0.04); - TLegend *leg = new TLegend(0.85625,0.7721654,0.6765625,0.8903839,NULL,"brNDC"); + TLegend *leg = new TLegend(0.85625,0.721654,0.6165625,0.8903839,NULL,"brNDC"); leg->SetBorderSize(0); leg->SetTextSize(0.035); leg->SetLineColor(1); @@ -360,8 +394,18 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); leg->SetFillColor(0); leg->SetFillStyle(0); h_mX_SR->SetMarkerStyle(20); - if (hist.substr(0,7)=="h_mX_SB") leg->AddEntry(h_mX_SR, "Data in SB", "lep"); - else leg->AddEntry(h_mX_SR, "Data in SR", "lep"); + if (hist.substr(0,7)=="h_mX_SB"){ + h_mX_SR->SetLineColor(kBlack); + h_mX_SR->SetMarkerColor(kBlack); + leg->AddEntry(h_mX_SR, "Data in SB", "ep"); + + } + else leg->AddEntry(h_mX_SR, "Data in SR", "ep"); + TH1F * temp = new TH1F("temp", "temp", 100, 0,1); temp->SetLineWidth(2); temp->SetLineColor(kBlack); + leg->AddEntry(temp, "GaussBern fit", "l"); + TH1F * temp1 = new TH1F("temp1", "temp1", 100, 0,1); temp1->SetLineWidth(2); + temp1->SetLineColor(kBlue+1); + leg->AddEntry(temp1, "CrystalBall fit", "l"); leg->Draw(); CMS_lumi( p_1, iPeriod, iPos ); @@ -370,6 +414,7 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); RooHist *hpull; hpull = data_plot->pullHist(); RooPlot* frameP = x->frame() ; + frameP->SetTitle("; m_{X} (GeV); Pull"); frameP->addPlotable(hpull,"P"); frameP->GetYaxis()->SetTitleSize(0.07); @@ -380,6 +425,7 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); frameP->GetYaxis()->SetLabelSize(0.06); frameP->Draw(); + TLine *line=new TLine(fit_lo, 0, fit_hi, 0); line->SetLineWidth(2); line->Draw(); @@ -430,10 +476,15 @@ i*/ bg_p3=new RooRealVar("bg_p3", "bg_p3", 5.); // For the datacard std::cout<<" === RooFit data fit result to be entered in datacard === "<getVal()<<" "<getError()<getVal()<<" "<getError()<getVal()<<" "<getError()<getVal()<<" "<getError()< + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "CMS_lumi.c" + +// Plot cosmetics +int iPeriod = 4; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV +int iPos = 11; + +std::string itoa(int i) +{ + char res[10]; + sprintf(res, "%d", i); + std::string ret(res); + return ret; +} + +void BackgroundPrediction_Kinematic_CrystalBall(std::string filename, + double plot_lo, double plot_hi, double rebin, + double fit_lo, double fit_hi, + double crystalball_mean_lo, double crystalball_mean_hi, + double crystalball_width_lo, double crystalball_width_hi, + double crystalball_exp_lo, double crystalball_exp_hi, + double crystalball_switch_lo, double crystalball_switch_hi, + double gaussexp_mean_lo, double gaussexp_mean_hi, + double gaussexp_width_lo, double gaussexp_width_hi, + double gaussexp_exp_lo, double gaussexp_exp_hi, + std::string hist="h_mX_SB_kinFit", + std::string log="lin") +{ + + gROOT->SetStyle("Plain"); + gStyle->SetPadGridX(0); + gStyle->SetPadGridY(0); + gStyle->SetOptStat(0000); + writeExtraText = true; // if extra text + extraText = "Preliminary"; // default extra text is "Preliminary" + lumi_13TeV = "35.9 fb^{-1}"; // default is "5.1 fb^{-1}" + + TFile *f_data=new TFile(filename.c_str()); + TH1F *h_mX_SR=(TH1F*)f_data->Get(hist.c_str()); + h_mX_SR->Rebin(rebin); + double nEventsSR=((TH1F*)f_data->Get("h_mX_SR_kinFit"))->GetSumOfWeights(); + + RooRealVar *x; + x=new RooRealVar("x", "m_{X} (GeV)", plot_lo, plot_hi); + RooDataHist pred("pred", "Data", RooArgList(*x), h_mX_SR); + + RooRealVar bg_p0("bg_p0", "bg_p0", crystalball_switch_lo, crystalball_switch_hi); + RooRealVar bg_p1("bg_p1", "bg_p1", crystalball_exp_lo, crystalball_exp_hi); + RooRealVar bg_p2("bg_p2", "bg_p2", crystalball_mean_lo, crystalball_mean_hi); + RooRealVar bg_p3("bg_p3", "bg_p3", crystalball_width_lo, crystalball_width_hi); + RevCrystalBall bg("background", "Background Prediction PDF", *x, bg_p0, bg_p1, bg_p2, bg_p3); + RooFitResult *r_bg=bg.fitTo(pred, RooFit::Range(fit_lo, fit_hi), RooFit::Save()); + + RooPlot *data_plot=x->frame(); + pred.plotOn(data_plot); + bg.plotOn(data_plot, RooFit::VisualizeError(*r_bg, 0.5), RooFit::FillColor(kGreen+1), RooFit::FillStyle(3001)); + bg.plotOn(data_plot, RooFit::LineColor(kBlack)); + pred.plotOn(data_plot, RooFit::LineColor(kBlack), RooFit::MarkerColor(kBlack)); + + RooRealVar bg_p00("bg_p00", "bg_p00", gaussexp_mean_lo, gaussexp_mean_hi); + RooRealVar bg_p11("bg_p11", "bg_p11", gaussexp_width_lo, gaussexp_width_hi); + RooRealVar bg_p22("bg_p22", "bg_p22", gaussexp_exp_lo, gaussexp_exp_hi); + + + + + GaussExp bg_exp("bg_exp", "Background Prediction PDF", *x, bg_p00, bg_p11, bg_p22); + + RooPlot *data_plot2=x->frame(); + RooFitResult *r_bg_exp=bg_exp.fitTo(pred, RooFit::Range(fit_lo, fit_hi), RooFit::Save()); + pred.plotOn(data_plot2); + + //bg_exp.plotOn(data_plot2, RooFit::VisualizeError(*r_bg_exp, 1, kFALSE), RooFit::FillColor(kCyan+1), RooFit::FillStyle(3001)); + bg_exp.plotOn(data_plot2, RooFit::LineColor(kBlue+1)); + pred.plotOn(data_plot2, RooFit::LineColor(kBlack), RooFit::MarkerColor(kBlack)); + + + + double fitChi2=data_plot->chiSquare(); + std::cout<<"Fit chi2 = "<getVal(),int((fit_hi-fit_lo)/rebin)-3); + std::cout<<"p-value = "<getVal(),int((fit_hi-fit_lo)/rebin)-3)<SetFillStyle(4000); + c_Background->SetFrameFillColor(0); + + TPad *p_1=new TPad("p_1", "p_1", 0, xPad, 1, 1); + p_1->SetFillStyle(4000); + p_1->SetFrameFillColor(0); + p_1->SetBottomMargin(0.02); + + TPad* p_2 = new TPad("p_2", "p_2",0,0,1,xPad); + p_2->SetBottomMargin((1.-xPad)/xPad*0.13); + p_2->SetTopMargin(0.03); + p_2->SetFillColor(0); + p_2->SetBorderMode(0); + p_2->SetBorderSize(2); + p_2->SetFrameBorderMode(0); + p_2->SetFrameBorderMode(0); + p_1->Draw(); + p_2->Draw(); + p_1->cd(); + + + if (log=="log") data_plot->GetYaxis()->SetRangeUser(1e-4, h_mX_SR->GetMaximum()*5.); + else data_plot->GetYaxis()->SetRangeUser(0, h_mX_SR->GetMaximum()*1.5); + data_plot->Draw(); + data_plot->GetXaxis()->SetLabelOffset(0.03); + data_plot->GetYaxis()->SetLabelFont(42); + data_plot->GetYaxis()->SetTitleFont(42); + data_plot2->Draw("same"); + data_plot->GetYaxis()->SetTitleOffset(1.25); + data_plot->SetTitle(("; m_{X} (GeV); Events / "+itoa(h_mX_SR->GetBinWidth(1))+" GeV").c_str()); + if (log=="log") p_1->SetLogy(); + + TPaveText *pave = new TPaveText(0.86,0.6,0.67,0.7,"NDC"); + pave->SetBorderSize(0); + pave->SetTextSize(0.03); + pave->SetLineColor(1); + pave->SetLineStyle(1); + pave->SetLineWidth(2); + pave->SetFillColor(0); + pave->SetFillStyle(0); + char name[1000]; + char name1[1000]; + if (hist.substr(0,7)=="h_mX_SB") { + sprintf(name,"SB #chi^{2}/n = %.2f",fitChi2); + sprintf(name1,"p-value = %.2f",pvalue); + } + else sprintf(name,"SR #chi^{2}/n = %.2f",fitChi2); + pave->AddText(name); + pave->AddText(name1); + pave->Draw(); + + + TLatex * tPrel = new TLatex(); + tPrel->SetNDC(); + tPrel->SetTextColor(kBlack); + tPrel->SetTextSize(0.04); + + TLegend *leg = new TLegend(0.85625,0.721654,0.6165625,0.8903839,NULL,"brNDC"); + leg->SetBorderSize(0); + leg->SetTextSize(0.035); + leg->SetLineColor(1); + leg->SetLineStyle(1); + leg->SetLineWidth(2); + leg->SetFillColor(0); + leg->SetFillStyle(0); + h_mX_SR->SetMarkerStyle(20); + if (hist.substr(0,7)=="h_mX_SB") leg->AddEntry(h_mX_SR, "Data in SB", "ep"); + else leg->AddEntry(h_mX_SR, "Data in SR", "ep"); + TH1F * temp = new TH1F("temp", "temp", 100, 0,1); temp->SetLineWidth(2); temp->SetLineColor(kBlack); + leg->AddEntry(temp, "CrystalBall fit", "l"); + TH1F * temp1 = new TH1F("temp1", "temp1", 100, 0,1); temp1->SetLineWidth(2); + temp1->SetLineColor(kBlue+1); + leg->AddEntry(temp1, "GaussExp fit", "l"); + leg->Draw(); + + CMS_lumi( p_1, iPeriod, iPos ); + + p_2->cd(); + RooHist *hpull; + hpull = data_plot->pullHist(); + RooPlot* frameP = x->frame() ; + + frameP->SetTitle("; m_{X} (GeV); Pull"); + frameP->addPlotable(hpull,"P"); + frameP->GetYaxis()->SetRangeUser(-5,5); + frameP->GetXaxis()->SetRangeUser(fit_lo, fit_hi); + frameP->SetTitle(""); + frameP->GetYaxis()->SetTitle("Pull"); + frameP->GetYaxis()->SetTitleFont(42); + frameP->GetYaxis()->SetLabelFont(42); + frameP->GetXaxis()->SetTitleFont(42); + frameP->GetXaxis()->SetLabelFont(42); + frameP->GetYaxis()->SetTitleSize((1.-xPad)/xPad*0.06); + frameP->GetYaxis()->SetTitleOffset(1.2/((1.-xPad)/xPad)); + frameP->GetXaxis()->SetTitleSize((1.-xPad)/xPad*0.055); + frameP->GetXaxis()->SetLabelSize((1.-xPad)/xPad*0.045); + frameP->GetYaxis()->SetLabelSize((1.-xPad)/xPad*0.027); + frameP->Draw(); + + + + frameP->Draw(); + + + TLine *line=new TLine(fit_lo, 0, fit_hi, 0); + line->SetLineWidth(2); + line->Draw(); + + string tag; + if (hist.substr(0,7)=="h_mX_SB") tag="SB"; + else tag="SR"; + c_Background->SaveAs(("BackgroundFit_"+tag+"_CrystalBall.png").c_str()); + c_Background->SaveAs(("BackgroundFit_"+tag+"_CrystalBall.pdf").c_str()); + + + + RooWorkspace *w_background=new RooWorkspace("HbbHbb"); + + w_background->import(bg); + w_background->import(bg_exp); + + // Normalize h_mX_SB to SR for pretend data + TH1F *h_mX_SR_fakeData=(TH1F*)h_mX_SR->Clone("h_mX_SR_fakeData"); + h_mX_SR_fakeData->Scale(nEventsSR/h_mX_SR_fakeData->GetSumOfWeights()); + RooDataHist data_obs("data_obs", "Data", RooArgList(*x), h_mX_SR_fakeData); + + w_background->import(data_obs); + w_background->SaveAs("w_background_Crystal.root"); + + RooWorkspace *w_data=new RooWorkspace("HbbHbb"); + w_data->import(data_obs); + w_data->SaveAs("w_data.root"); + + // For the datacard + std::cout<<" === RooFit data fit result to be entered in datacard === "<1) value = 1; + if(value<0) value = 0; + return value; +// return -0.192834+4.43014*pow(x,1)-11.8859*pow(x,2)+14.9736*pow(x,3)-5.93882*pow(x,4); +// return -5.93882+14.9736*pow(x,1)-11.8859*pow(x,2)+4.43014*pow(x,3)+-0.192834*pow(x,4); +} + +double CSVn(int n, float x, float y, float z, float w) { + float c0Y = singleCSV(x); + float c1Y = singleCSV(y); + float c2Y = singleCSV(z); + float c3Y = singleCSV(w); + float c0N = 1-singleCSV(x); + float c1N = 1-singleCSV(y); + float c2N = 1-singleCSV(z); + float c3N = 1-singleCSV(w); + + float value = 0; + // + if(n<=4){ + value += c0Y * c1Y * c2Y * c3Y; + } + + if(n<=3){ + value += c0N * c1Y * c2Y * c3Y; + value += c0Y * c1N * c2Y * c3Y; + value += c0Y * c1Y * c2N * c3Y; + value += c0Y * c1Y * c2Y * c3N; + } + + if(n<=2){ + value += c0N * c1N * c2Y * c3Y; + value += c0N * c1Y * c2N * c3Y; + value += c0N * c1Y * c2Y * c3N; + value += c0Y * c1N * c2N * c3Y; + value += c0Y * c1N * c2Y * c3N; + value += c0Y * c1Y * c2N * c3N; + } + + if(n<=1){ + value += c0Y * c1N * c2N * c3N; + value += c0N * c1Y * c2N * c3N; + value += c0N * c1N * c2Y * c3N; + value += c0N * c1N * c2N * c3Y; + } + + if(n<=0){ + value += c0N * c1N * c2N * c3N; + } + + return value; +} + +double CSVn(int n, float x, float y) { + float c0Y = singleCSV(x); + float c1Y = singleCSV(y); + float c0N = 1-singleCSV(x); + float c1N = 1-singleCSV(y); + + float value = 0; + // + if(n<=2){ + value += c0Y * c1Y; + } + + if(n<=1){ + value += c0N * c1Y; + value += c0Y * c1N; + } + + if(n<=0){ + value += c0N * c1N; + } + + return value; +} + diff --git a/AnalysisCode/DisplayBackground.c b/AnalysisCode/DisplayBackground.c index 2aa1bab..62de25d 100644 --- a/AnalysisCode/DisplayBackground.c +++ b/AnalysisCode/DisplayBackground.c @@ -42,12 +42,16 @@ void DisplayBackground(){ gROOT->SetStyle("Plain"); - double totalLuminosity=2190; // /pb + double totalLuminosity=22040; // /pb double xsec_ttbar=831.76; double xsec_qcd[8]={27850000,1717000,351300,31630.,6802.,1206.,120.4,25.24}; + double xsec_st =35.6; + double xsec_zz =6.842; - TFile *ttbar=new TFile("Histograms_TT_TuneCUETP8M1_13TeV-amcatnlo-pythia8_Skim.root"); + TFile *ttbar=new TFile("Histograms_TT.root"); + TFile *singletop=new TFile("Histograms_ST.root"); + TFile *zz=new TFile("Histograms_ZZ.root"); /*std::vector qcd; qcd.push_back(new TFile ("Histograms_QCD_HT100to200_Skim.root")); qcd.push_back(new TFile("Histograms_QCD_HT200to300_Skim.root")); @@ -78,20 +82,41 @@ void DisplayBackground(){ double init_ttbar=((TH1F*)ttbar->Get("Count"))->GetBinContent(1); double scale_ttbar=totalLuminosity*xsec_ttbar/init_ttbar; + + double init_st=((TH1F*)singletop->Get("Count"))->GetBinContent(1); + double scale_st=totalLuminosity*xsec_st/init_st; + double init_zz=((TH1F*)zz->Get("Count"))->GetBinContent(1); + double scale_zz=totalLuminosity*xsec_zz/init_zz; - TH1F * h_bkg = new TH1F("h_bkg","h_bkg", 50, 0., 2000.); + TH1F * h_bkg = new TH1F("h_bkg","h_bkg", 50, 0., 3000.); THStack hs("hs","test stacked histograms"); hs.SetTitle(""); //c->cd(); TH1F* h_mX_SB_kinFit=(TH1F*)ttbar->Get("h_mX_SB_kinFit"); + std::cout<<" here "<GetEntries(); h_mX_SB_kinFit->Scale(scale_ttbar); - h_mX_SB_kinFit->Rebin(40); + h_mX_SB_kinFit->Rebin(10); h_bkg->Add(h_mX_SB_kinFit); h_mX_SB_kinFit->SetLineColor(kBlue+1); h_mX_SB_kinFit->SetFillColor(kBlue+1); - - TLegend *leg = new TLegend(0.55625,0.7321654,0.8765625,0.8603839,NULL,"brNDC"); + + TH1F* h_mX_SB_kinFit_zz=(TH1F*)zz->Get("h_mX_SB_kinFit"); + TH1F* h_mX_SB_kinFit_st=(TH1F*)singletop->Get("h_mX_SB_kinFit"); + + h_mX_SB_kinFit_st->Scale(scale_st); + h_mX_SB_kinFit_st->Rebin(10); + h_bkg->Add(h_mX_SB_kinFit_st); + h_mX_SB_kinFit_st->SetLineColor(kGreen+1); + h_mX_SB_kinFit_st->SetFillColor(kGreen+1); + + h_mX_SB_kinFit_zz->Scale(scale_zz); + h_mX_SB_kinFit_zz->Rebin(10); + h_bkg->Add(h_mX_SB_kinFit_zz); + h_mX_SB_kinFit_zz->SetLineColor(kRed+1); + h_mX_SB_kinFit_zz->SetFillColor(kRed+1); + + TLegend *leg = new TLegend(0.55625,0.7321654,0.8765625,0.87103839,NULL,"brNDC"); leg->SetBorderSize(0); leg->SetTextSize(0.035); leg->SetTextFont(42); @@ -104,13 +129,19 @@ void DisplayBackground(){ double integral =0 ; - integral = integral + h_mX_SB_kinFit->Integral(0, 200); + integral = integral + h_mX_SB_kinFit->Integral(0,100); std::cout<< "integral tt " << integral<Integral(0,100)<Integral(0,100)<AddEntry(h_mX_SB_kinFit, "t#bar{t} ", "f"); + leg->AddEntry(h_mX_SB_kinFit_st, "single top ", "f"); + leg->AddEntry(h_mX_SB_kinFit_zz, "ZZ ", "f"); h_mX_SB_kinFit->Draw(""); hs.Add(h_mX_SB_kinFit,"hist"); + hs.Add(h_mX_SB_kinFit_st,"hist"); + hs.Add(h_mX_SB_kinFit_zz,"hist"); /* double integralQCD =0; for(int m=0; m<8;m++){ TH1F* h_mX_SB_kinFitQ=(TH1F*)qcd.at(m)->Get("h_mX_SB_kinFit"); @@ -126,7 +157,7 @@ void DisplayBackground(){ } std::cout<< "integral QCD " << integralQCD<GetYaxis()->SetRangeUser(0., hs.GetMaximum()*7.); + */ h_mX_SB_kinFit->GetYaxis()->SetRangeUser(0., hs.GetMaximum()*10.); //h_mX_SB_kinFit->Scale(b/a); h_mX_SB_kinFit->SetTitle(""); h_mX_SB_kinFit->SetLineColor(kBlue+2); @@ -140,7 +171,7 @@ void DisplayBackground(){ h_mX_SB_kinFit->GetXaxis()->SetLabelSize(0.03); //h_mX_SB_kinFit->Draw(""); - h_mX_SB_kinFit->GetXaxis()->SetRangeUser(300.,1800.); + h_mX_SB_kinFit->GetXaxis()->SetRangeUser(220.,1200.); //h_mX_SB_kinFit->SetMarkerStyle(20); //h_mX_SB_kinFit->SetMarkerColor(kBlack); //h_mX_SB_kinFit->SetLineColor(kBlack); @@ -158,9 +189,9 @@ void DisplayBackground(){ std::cout<<" adding data "<Get("h_mX_SB_kinFit"); - h_mX_SB_kinFitD->Rebin(40); + h_mX_SB_kinFitD->Rebin(10); h_mX_SB_kinFitD->SetMarkerStyle(20); h_mX_SB_kinFitD->SetMarkerColor(kBlack); h_mX_SB_kinFitD->SetLineColor(kBlack); @@ -171,7 +202,7 @@ void DisplayBackground(){ std::cout<<" data integral is : "<Integral(0, 100)<AddEntry(h_mX_SB_kinFitD, "Data in SB, MMR_{#chi} ", "lp"); + leg->AddEntry(h_mX_SB_kinFitD, "Data in SB, LMR_{#chi} ", "lp"); @@ -182,17 +213,17 @@ void DisplayBackground(){ tPrel->SetTextColor(kBlack); tPrel->SetTextSize(0.04027386); tPrel->SetTextFont(42); - tPrel->DrawLatex(0.09821429,0.9194523,"CMS Preliminary (13 TeV) 2.2 fb^{-1}"); + tPrel->DrawLatex(0.09821429,0.9194523,"CMS Preliminary (13 TeV) 22.0 fb^{-1}"); - leg->Draw("sames"); + leg->Draw(); //h_ttbar->Rebin(2); - c->Print("stackMMR.png"); - c->Print("stackMMR.pdf"); + c->Print("stackLMR.root"); + c->Print("stackLMR.pdf"); //h_mX_SB_kinFit->Rebin(4); //sprintf(name,"SB: t#bar{t} contribution =%d",integral/data); diff --git a/AnalysisCode/DisplayBackgroundMMR.c b/AnalysisCode/DisplayBackgroundMMR.c new file mode 100644 index 0000000..a88d882 --- /dev/null +++ b/AnalysisCode/DisplayBackgroundMMR.c @@ -0,0 +1,234 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +std::string itoa(int i) +{ + char res[10]; + sprintf(res, "%d", i); + std::string ret(res); + return ret; +} + + +void DisplayBackgroundMMR(){ + + + + gROOT->SetStyle("Plain"); + gStyle->SetOptStat(0000); + //gStyle->SetErrorX(0) + gStyle->SetPadGridX(0); + gStyle->SetPadGridY(0); + TCanvas * c = new TCanvas("c", "c", 700,700); + c->SetTickx(1); + c->SetTicky(1); + + c->SetFrameFillStyle(4000); + c->SetFrameFillColor(0); + c->cd(); + + gStyle->SetPadGridX(0); + gStyle->SetPadGridY(0); + gROOT->SetStyle("Plain"); + + + double totalLuminosity=22040; // /pb + + double xsec_ttbar=831.76; + double xsec_qcd[8]={27850000,1717000,351300,31630.,6802.,1206.,120.4,25.24}; + double xsec_st =35.6; + double xsec_zz =6.842; + + TFile *ttbar=new TFile("Histograms_TT.root"); + TFile *singletop=new TFile("Histograms_ST.root"); + TFile *zz=new TFile("Histograms_ZZ.root"); + /*std::vector qcd; + qcd.push_back(new TFile ("Histograms_QCD_HT100to200_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT200to300_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT300to500_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT500to700_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT700to1000_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT1000to1500_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT1500to2000_Skim.root")); + qcd.push_back(new TFile("Histograms_QCD_HT2000toInf_Skim.root")); + + + + double init_ttbar=((TH1F*)ttbar->Get("Count"))->GetBinContent(1); + double init_qcd[8]; + + double scale_qcd[8]; + double scale_ttbar=totalLuminosity*xsec_ttbar/init_ttbar; + + for(int l=0; l<8;l++){ + init_qcd[l]=((TH1F*)qcd.at(l)->Get("Count"))->GetBinContent(1); + scale_qcd[l]=totalLuminosity*xsec_qcd[l]/init_qcd[l]; + + } + + +*/ + + + double init_ttbar=((TH1F*)ttbar->Get("Count"))->GetBinContent(1); + double scale_ttbar=totalLuminosity*xsec_ttbar/init_ttbar; + + double init_st=((TH1F*)singletop->Get("Count"))->GetBinContent(1); + double scale_st=totalLuminosity*xsec_st/init_st; + + double init_zz=((TH1F*)zz->Get("Count"))->GetBinContent(1); + double scale_zz=totalLuminosity*xsec_zz/init_zz; + + TH1F * h_bkg = new TH1F("h_bkg","h_bkg", 50, 0., 3000.); + THStack hs("hs","test stacked histograms"); + hs.SetTitle(""); + //c->cd(); + TH1F* h_mX_SB_kinFit=(TH1F*)ttbar->Get("h_mX_SB_kinFit"); + std::cout<<" here "<GetEntries(); + h_mX_SB_kinFit->Scale(scale_ttbar); + h_mX_SB_kinFit->Rebin(40); + h_bkg->Add(h_mX_SB_kinFit); + h_mX_SB_kinFit->SetLineColor(kBlue+1); + h_mX_SB_kinFit->SetFillColor(kBlue+1); + + TH1F* h_mX_SB_kinFit_zz=(TH1F*)zz->Get("h_mX_SB_kinFit"); + TH1F* h_mX_SB_kinFit_st=(TH1F*)singletop->Get("h_mX_SB_kinFit"); + + h_mX_SB_kinFit_st->Scale(scale_st); + h_mX_SB_kinFit_st->Rebin(40); + h_bkg->Add(h_mX_SB_kinFit_st); + h_mX_SB_kinFit_st->SetLineColor(kGreen+1); + h_mX_SB_kinFit_st->SetFillColor(kGreen+1); + + h_mX_SB_kinFit_zz->Scale(scale_zz); + h_mX_SB_kinFit_zz->Rebin(40); + h_bkg->Add(h_mX_SB_kinFit_zz); + h_mX_SB_kinFit_zz->SetLineColor(kRed+1); + h_mX_SB_kinFit_zz->SetFillColor(kRed+1); + + TLegend *leg = new TLegend(0.55625,0.7321654,0.8765625,0.87103839,NULL,"brNDC"); + leg->SetBorderSize(0); + leg->SetTextSize(0.035); + leg->SetTextFont(42); + leg->SetLineColor(1); + leg->SetLineStyle(1); + leg->SetLineWidth(2); + leg->SetFillColor(0); + leg->SetFillStyle(0); + + + + double integral =0 ; + integral = integral + h_mX_SB_kinFit->Integral(0,100); + std::cout<< "integral tt " << integral<Integral(0,100)<Integral(0,100)<AddEntry(h_mX_SB_kinFit, "t#bar{t} ", "f"); + leg->AddEntry(h_mX_SB_kinFit_st, "single top ", "f"); + leg->AddEntry(h_mX_SB_kinFit_zz, "ZZ ", "f"); + + h_mX_SB_kinFit->Draw(""); + hs.Add(h_mX_SB_kinFit,"hist"); + hs.Add(h_mX_SB_kinFit_st,"hist"); + hs.Add(h_mX_SB_kinFit_zz,"hist"); +/* double integralQCD =0; + for(int m=0; m<8;m++){ + TH1F* h_mX_SB_kinFitQ=(TH1F*)qcd.at(m)->Get("h_mX_SB_kinFit"); + h_mX_SB_kinFitQ->Scale(scale_qcd[m]); + h_mX_SB_kinFitQ->Rebin(40); + h_bkg->Add(h_mX_SB_kinFitQ); + h_mX_SB_kinFitQ->Draw("same"); + h_mX_SB_kinFitQ->SetLineColor(kRed+1); + h_mX_SB_kinFitQ->SetFillColor(kRed+1); +// if(m==0) leg->AddEntry(h_mX_SB_kinFitQ, "QCD", "f"); +// hs.Add(h_mX_SB_kinFitQ,"hist"); + integralQCD = integralQCD + h_mX_SB_kinFitQ->Integral(0, 200); + + } + std::cout<< "integral QCD " << integralQCD<GetYaxis()->SetRangeUser(0., hs.GetMaximum()*5.); + //h_mX_SB_kinFit->Scale(b/a); + h_mX_SB_kinFit->SetTitle(""); + h_mX_SB_kinFit->SetLineColor(kBlue+2); + h_mX_SB_kinFit->GetXaxis()->SetTitle("m_{X} (GeV)"); + std::cout<GetBinWidth(1)<GetBinWidth(1))+" GeV)"; + h_mX_SB_kinFit->GetYaxis()->SetTitle(("Events / "+itoa(h_mX_SB_kinFit->GetBinWidth(1))+" (GeV)").c_str()); + h_mX_SB_kinFit->GetYaxis()->SetTitleSize(0.033); + h_mX_SB_kinFit->GetYaxis()->SetTitleOffset(1.35); + h_mX_SB_kinFit->GetYaxis()->SetLabelSize(0.03); + h_mX_SB_kinFit->GetXaxis()->SetLabelSize(0.03); + + //h_mX_SB_kinFit->Draw(""); + h_mX_SB_kinFit->GetXaxis()->SetRangeUser(300.,1400.); + //h_mX_SB_kinFit->SetMarkerStyle(20); + //h_mX_SB_kinFit->SetMarkerColor(kBlack); + //h_mX_SB_kinFit->SetLineColor(kBlack); + //h_mX_SB_kinFit->Draw("same"); + //hs.GetXaxis()->SetRangeUser(220.,1200.); + //hs->Rebin(2); + hs.Draw(""); + + //hs.GetXaxis()->SetRangeUser(220.,1200.); + h_mX_SB_kinFit->Draw(""); + hs.Draw("same"); + + + + + std::cout<<" adding data "<Get("h_mX_SB_kinFit"); + h_mX_SB_kinFitD->Rebin(40); + h_mX_SB_kinFitD->SetMarkerStyle(20); + h_mX_SB_kinFitD->SetMarkerColor(kBlack); + h_mX_SB_kinFitD->SetLineColor(kBlack); + h_mX_SB_kinFitD->Draw("same"); + //h_mX_SB_kinFit->Draw("same"); + hs.Draw("same"); + + + std::cout<<" data integral is : "<Integral(0, 100)<AddEntry(h_mX_SB_kinFitD, "Data in SB, MMR_{#chi} ", "lp"); + + + + + + TLatex * tPrel = new TLatex(); + tPrel->SetNDC(); + tPrel->SetTextColor(kBlack); + tPrel->SetTextSize(0.04027386); + tPrel->SetTextFont(42); + tPrel->DrawLatex(0.09821429,0.9194523,"CMS Preliminary (13 TeV) 22.0 fb^{-1}"); + + + + leg->Draw(); + //h_ttbar->Rebin(2); + + + + c->Print("stackMMR.root"); + c->Print("stackMMR.pdf"); + //h_mX_SB_kinFit->Rebin(4); + + //sprintf(name,"SB: t#bar{t} contribution =%d",integral/data); + //pave->AddText(name); + //pave->Draw(); + + +} diff --git a/AnalysisCode/DisplayCutFlow.cc b/AnalysisCode/DisplayCutFlow.cc index 2ae2a89..713c93e 100644 --- a/AnalysisCode/DisplayCutFlow.cc +++ b/AnalysisCode/DisplayCutFlow.cc @@ -207,7 +207,7 @@ void pushBackHistograms(Samples &sample, TFile *file, TFile * old, bool MC=true) void signalEff(int npoint) { - int massPtsStd[10]={ 350, 450, 500 ,550, 650, 700, 800, 900, 1000, 1200}; + int massPtsStd[10]={450, 500, 550, 650, 700, 750, 800, 900, 1000, 1200};// 350, 450, 500 ,550, 650, 700, 800, 900, 1000, 1200}; int massPts[npoint]; @@ -230,7 +230,7 @@ void signalEff(int npoint) void cumEff(int npoint) { - int massPtsStd[10]={ 350, 450, 550, 650, 700, 800, 900, 1000, 1200}; + int massPtsStd[10]={450, 500, 550, 650, 700, 750, 800, 900, 1000, 1200};// 350, 450, 550, 650, 700, 800, 900, 1000, 1200}; int massPts[npoint]; for(int i=0; iSetOptStat(0000); writeExtraText = true; // if extra text extraText = "Preliminary"; // default extra text is "Preliminary" - lumi_13TeV = "2.3 fb^{-1}"; // default is "5.1 fb^{-1}" + lumi_13TeV = "22.04 fb^{-1} (2016)"; // default is "5.1 fb^{-1}" //int n=10; - int massL[12]={350, 400, 450, 500, 550, 650, 700, 800, 900, 1000, 1200}; + int massL[]={350,400, 450, 500, 550, 600, 650, 700, 750, 800, 900,1000, 1200}; // int massL[5]={260, 270, 300, 400, 600}; //, 700, 800, 900, 1000, 1100}; - // TFile *glugluToX260=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root"); + //TFile *glugluToX260=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root"); // TFile *glugluToX270=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root"); // TFile *glugluToX300=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root"); TFile *glugluToX350=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root"); @@ -273,29 +273,34 @@ void DisplayCutFlow() TFile *glugluToX450=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root"); TFile *glugluToX500=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root"); TFile *glugluToX550=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root"); - // TFile *glugluToX600=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); + TFile *glugluToX600=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); TFile *glugluToX650=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root"); TFile *glugluToX700=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root"); + TFile *glugluToX750=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root"); + TFile *glugluToX800=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root"); TFile *glugluToX900=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"); - TFile *glugluToX1000=new TFile("Histograms_RSGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root"); - TFile *glugluToX1200=new TFile("Histograms_RSGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root"); + TFile *glugluToX1000=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root"); + TFile *glugluToX1200=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root"); + //TFile *glugluToX1400=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root"); - /* pushBackHistograms(signals, glugluToX260, glugluToX260); - pushBackHistograms(signals, glugluToX270, glugluToX270); - pushBackHistograms(signals, glugluToX300, glugluToX300 );*/ + //pushBackHistograms(signals, glugluToX260, glugluToX260); + // pushBackHistograms(signals, glugluToX270, glugluToX270); + //pushBackHistograms(signals, glugluToX300, glugluToX300 ); pushBackHistograms(signals, glugluToX350, glugluToX350 ); pushBackHistograms(signals, glugluToX400, glugluToX400); pushBackHistograms(signals, glugluToX450, glugluToX450); pushBackHistograms(signals, glugluToX500, glugluToX500); pushBackHistograms(signals, glugluToX550, glugluToX550); - // pushBackHistograms(signals, glugluToX600, glugluToX600); + pushBackHistograms(signals, glugluToX600, glugluToX600); pushBackHistograms(signals, glugluToX650, glugluToX650); pushBackHistograms(signals, glugluToX700, glugluToX700); + pushBackHistograms(signals, glugluToX750, glugluToX750); pushBackHistograms(signals, glugluToX800, glugluToX800); pushBackHistograms(signals, glugluToX900, glugluToX900); pushBackHistograms(signals, glugluToX1000, glugluToX1000); pushBackHistograms(signals, glugluToX1200, glugluToX1200); + //pushBackHistograms(signals, glugluToX1400, glugluToX1400); std::vector h_Cut; TH1F *h_Init=new TH1F("h_Init", "h_Init", 154, 260, 1800); @@ -305,7 +310,7 @@ TH1F *h_Events8=(TH1F*)h_Init->Clone("h_Events8"); TH1F *h_Events10=(TH1F*)h_Init->Clone("h_Events10"); TH1F *h_Events16=(TH1F*)h_Init->Clone("h_Events16"); // for (unsigned int i=2; i<=8; ++i) -for (unsigned int i=0; i<11; ++i) +for (unsigned int i=0; i<13; ++i) { h_Init->SetBinContent(h_Init->FindBin(massL[i]), signals.v_CountWithPU.at(i)->GetBinContent(1)); // std::cout<<"signals.v_CountWithPU.at(i)->GetBinContent(1) = "<<.signals.v_CountWithPU.at(i)->GetBinContent(1)<SetLogy(); c_Ae->SetFrameFillStyle(4000); c_Ae->SetFrameFillColor(0000); g_Ae_3->SetMaximum(10.); -g_Ae_3->SetMinimum(0.001); +g_Ae_3->SetMinimum(0.0001); //g_Ae_3->SetMaximum(0.7); g_Ae_3->SetMinimum(0); g_Ae_3->SetTitle(""); g_Ae_3->GetXaxis()->SetTitle("m_{X} (GeV)"); diff --git a/AnalysisCode/DisplayCutFlow_LMR.cc b/AnalysisCode/DisplayCutFlow_LMR.cc index 5aa837c..1b9679e 100644 --- a/AnalysisCode/DisplayCutFlow_LMR.cc +++ b/AnalysisCode/DisplayCutFlow_LMR.cc @@ -208,7 +208,7 @@ void pushBackHistograms(Samples &sample, TFile *file, TFile * old, bool MC=true) void signalEff(int npoint) { - int massPtsStd[9]={260, 270, 300, 350, 400, 450, 500, 550, 650}; + int massPtsStd[8]={260, 270, 300, 350, 400, 450, 500, 550}; int massPts[npoint]; for(int i=0; iSetOptStat(0); writeExtraText = true; // if extra text extraText = "Simulation" ; //Preliminary"; // default extra text is "Preliminary" - lumi_13TeV = "2.3 fb^{-1}"; // default is "5.1 fb^{-1}" + lumi_13TeV = "22.04 fb^{-1} (2016)"; // default is "5.1 fb^{-1}" //int n=10; - int massL[9]={260, 270, 300, 350, 400, 450, 500, 550, 650};// 800, 1000, 1200}; + int massL[8]={260, 270, 300, 350, 400, 450, 500, 550};// 800, 1000, 1200}; // int massL[5]={260, 270, 300, 400, 600}; //, 700, 800, 900, 1000, 1100}; TFile *glugluToX260=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root"); TFile *glugluToX270=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root"); @@ -271,8 +271,8 @@ void DisplayCutFlow_LMR() TFile *glugluToX450=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root"); TFile *glugluToX500=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root"); TFile *glugluToX550=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root"); -// TFile *glugluToX600=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); - TFile *glugluToX650=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root"); + //TFile *glugluToX600=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); + //TFile *glugluToX650=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root"); // TFile *glugluToX700=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root"); //TFile *glugluToX800=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root"); //TFile *glugluToX900=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"); @@ -287,8 +287,8 @@ void DisplayCutFlow_LMR() pushBackHistograms(signals, glugluToX450, glugluToX450); pushBackHistograms(signals, glugluToX500, glugluToX500); pushBackHistograms(signals, glugluToX550, glugluToX550); - // pushBackHistograms(signals, glugluToX600, glugluToX600); - pushBackHistograms(signals, glugluToX650, glugluToX650); + //pushBackHistograms(signals, glugluToX600, glugluToX600); + // pushBackHistograms(signals, glugluToX650, glugluToX650); // pushBackHistograms(signals, glugluToX700, glugluToX700); //pushBackHistograms(signals, glugluToX800, glugluToX800); //pushBackHistograms(signals, glugluToX900, glugluToX900); @@ -302,8 +302,8 @@ void DisplayCutFlow_LMR() TH1F *h_Events8=(TH1F*)h_Init->Clone("h_Events8"); TH1F *h_Events10=(TH1F*)h_Init->Clone("h_Events10"); TH1F *h_Events16=(TH1F*)h_Init->Clone("h_Events16"); -// for (unsigned int i=2; i<=8; ++i) - for (unsigned int i=0; i<9; ++i) + for (unsigned int i=0; i<8; ++i) +// for (unsigned int i=0; i<9; ++i) { h_Init->SetBinContent(h_Init->FindBin(massL[i]), signals.v_CountWithPU.at(i)->GetBinContent(1)); // std::cout<<"signals.v_CountWithPU.at(i)->GetBinContent(1) = "<<.signals.v_CountWithPU.at(i)->GetBinContent(1)< +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +bool data_sets=false; + +bool signaleff=true; +bool cumeff=true; + + +int iPeriod = 4; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV +int iPos = 11; + +#include "CMS_lumi.h" +#include + +void +CMS_lumi( TPad* pad, int iPeriod, int iPosX ) +{ + bool outOfFrame = false; + if( iPosX/10==0 ) + { + outOfFrame = true; + } + int alignY_=3; + int alignX_=2; + if( iPosX/10==0 ) alignX_=1; + if( iPosX==0 ) alignX_=1; + if( iPosX==0 ) alignY_=1; + if( iPosX/10==1 ) alignX_=1; + if( iPosX/10==2 ) alignX_=2; + if( iPosX/10==3 ) alignX_=3; + if( iPosX == 0 ) relPosX = 0.14; + int align_ = 10*alignX_ + alignY_; + + float H = pad->GetWh(); + float W = pad->GetWw(); + float l = pad->GetLeftMargin(); + float t = pad->GetTopMargin(); + float r = pad->GetRightMargin(); + float b = pad->GetBottomMargin(); + + pad->cd(); + + TString lumiText; + if( iPeriod==1 ) + { + lumiText += lumi_7TeV; + lumiText += " (7 TeV)"; + } + else if ( iPeriod==2 ) + { + lumiText += lumi_8TeV; + lumiText += " (8 TeV)"; + } + else if( iPeriod==3 ) + { + lumiText = lumi_8TeV; + lumiText += " (8 TeV)"; + lumiText += " + "; + lumiText += lumi_7TeV; + lumiText += " (7 TeV)"; + } + else if ( iPeriod==4 ) + { + lumiText += lumi_13TeV; + lumiText += " (13 TeV)"; + } + else if ( iPeriod==7 ) + { + if( outOfFrame ) lumiText += "#scale[0.85]{"; + lumiText += lumi_13TeV; + lumiText += " (13 TeV)"; + lumiText += " + "; + lumiText += lumi_8TeV; + lumiText += " (8 TeV)"; + lumiText += " + "; + lumiText += lumi_7TeV; + lumiText += " (7 TeV)"; + if( outOfFrame) lumiText += "}"; + } + else if ( iPeriod==12 ) + { + lumiText += "8 TeV"; + } + else if ( iPeriod==0 ) + { + lumiText += lumi_sqrtS; + } + + std::cout << lumiText << endl; + + TLatex latex; + latex.SetNDC(); + latex.SetTextAngle(0); + latex.SetTextColor(kBlack); + + float extraTextSize = extraOverCmsTextSize*cmsTextSize; + + latex.SetTextFont(42); + latex.SetTextAlign(31); + latex.SetTextSize(lumiTextSize*t); + latex.DrawLatex(1-r,1-t+lumiTextOffset*t,lumiText); + + if( outOfFrame ) + { + latex.SetTextFont(cmsTextFont); + latex.SetTextAlign(11); + latex.SetTextSize(cmsTextSize*t); + latex.DrawLatex(l,1-t+lumiTextOffset*t,cmsText); + } + + pad->cd(); + + float posX_=0; + if( iPosX%10<=1 ) + { + posX_ = l + relPosX*(1-l-r); + } + else if( iPosX%10==2 ) + { + posX_ = l + 0.5*(1-l-r); + } + else if( iPosX%10==3 ) + { + posX_ = 1-r - relPosX*(1-l-r); + } + float posY_ = 1-t - relPosY*(1-t-b); + if( !outOfFrame ) + { + if( drawLogo ) + { + posX_ = l + 0.045*(1-l-r)*W/H; + posY_ = 1-t - 0.045*(1-t-b); + float xl_0 = posX_; + float yl_0 = posY_ - 0.15; + float xl_1 = posX_ + 0.15*H/W; + float yl_1 = posY_; + TASImage* CMS_logo = new TASImage("CMS-BW-label.png"); + TPad* pad_logo = new TPad("logo","logo", xl_0, yl_0, xl_1, yl_1 ); + pad_logo->Draw(); + pad_logo->cd(); + CMS_logo->Draw("X"); + pad_logo->Modified(); + pad->cd(); + } + else + { + latex.SetTextFont(cmsTextFont); + latex.SetTextSize(cmsTextSize*t); + latex.SetTextAlign(align_); + latex.DrawLatex(posX_, posY_, cmsText); + if( writeExtraText ) + { + latex.SetTextFont(extraTextFont); + latex.SetTextAlign(align_); + latex.SetTextSize(extraTextSize*t); + latex.DrawLatex(posX_, posY_- relExtraDY*cmsTextSize*t, extraText); + } + } + } + else if( writeExtraText ) + { + if( iPosX==0) + { + posX_ = l + relPosX*(1-l-r); + posY_ = 1-t+lumiTextOffset*t; + } + latex.SetTextFont(extraTextFont); + latex.SetTextSize(extraTextSize*t); + latex.SetTextAlign(align_); + latex.DrawLatex(posX_, posY_, extraText); + } + return; +} + + +struct Samples +{ + std::vector v_Cuts; + std::vector v_CountWithPU; +} signals, data; + +void pushBackHistograms(Samples &sample, TFile *file, TFile * old, bool MC=true) +{ + if (MC==true) + { + sample.v_CountWithPU.push_back((TH1F*)old->Get("Count")); + } + sample.v_Cuts.push_back((TH1F*)file->Get("h_Cuts")); +} + +void signalEff(int npoint) +{ + int massPtsStd[10]={450, 500, 550, 650, 700, 750, 800, 900, 1000, 1200};// 350, 450, 500 ,550, 650, 700, 800, 900, 1000, 1200}; + int massPts[npoint]; + + + for(int i=0; i 3 | HH Candidate | LLLL | SR "<GetBinContent(3))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double vtypeEff=(signals.v_Cuts.at(i)->GetBinContent(6))/(signals.v_Cuts.at(i)->GetBinContent(4)); + double nCJetsEff=(signals.v_Cuts.at(i)->GetBinContent(7))/(signals.v_Cuts.at(i)->GetBinContent(6)); + double hhCandEff=(signals.v_Cuts.at(i)->GetBinContent(9))/(signals.v_Cuts.at(i)->GetBinContent(8)); + double btagEff=(signals.v_Cuts.at(i)->GetBinContent(14))/(signals.v_Cuts.at(i)->GetBinContent(10)); + double SREff=(signals.v_Cuts.at(i)->GetBinContent(11))/(signals.v_Cuts.at(i)->GetBinContent(14)); + + std::cout< 3 | HH Candidate | LLLL | SR "<GetBinContent(4))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double vtypeEff=(signals.v_Cuts.at(i)->GetBinContent(6))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double nCJetsEff=(signals.v_Cuts.at(i)->GetBinContent(8))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double hhCandEff=(signals.v_Cuts.at(i)->GetBinContent(10))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double btagEff=(signals.v_Cuts.at(i)->GetBinContent(14))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + double SREff=(signals.v_Cuts.at(i)->GetBinContent(16))/(signals.v_CountWithPU.at(i)->GetBinContent(1)); + + std::cout<SetStyle("Plain"); + gStyle->SetOptStat(0000); + writeExtraText = true; // if extra text + extraText = "Preliminary"; // default extra text is "Preliminary" + lumi_13TeV = "9.23 fb^{-1} (2016)"; // default is "5.1 fb^{-1}" + + + //int n=10; + int massL[]={400, 450, 500, 550, 600, 650, 700, 750, 800, 900,1000, 1200,1400}; + // int massL[5]={260, 270, 300, 400, 600}; //, 700, 800, 900, 1000, 1100}; + TFile *glugluToX400=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root"); + TFile *glugluToX450=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root"); + TFile *glugluToX500=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root"); + TFile *glugluToX550=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root"); + TFile *glugluToX600=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); + TFile *glugluToX650=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root"); + TFile *glugluToX700=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root"); + TFile *glugluToX750=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root"); + + TFile *glugluToX800=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root"); + TFile *glugluToX900=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"); + TFile *glugluToX1000=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root"); + TFile *glugluToX1200=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root"); + TFile *glugluToX1400=new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root"); + + pushBackHistograms(signals, glugluToX400, glugluToX400); + pushBackHistograms(signals, glugluToX450, glugluToX450); + pushBackHistograms(signals, glugluToX500, glugluToX500); + pushBackHistograms(signals, glugluToX550, glugluToX550); + pushBackHistograms(signals, glugluToX600, glugluToX600); + pushBackHistograms(signals, glugluToX650, glugluToX650); + pushBackHistograms(signals, glugluToX700, glugluToX700); + pushBackHistograms(signals, glugluToX750, glugluToX750); + pushBackHistograms(signals, glugluToX800, glugluToX800); + pushBackHistograms(signals, glugluToX900, glugluToX900); + pushBackHistograms(signals, glugluToX1000, glugluToX1000); + pushBackHistograms(signals, glugluToX1200, glugluToX1200); + pushBackHistograms(signals, glugluToX1400, glugluToX1400); + +std::vector h_Cut; +TH1F *h_Init=new TH1F("h_Init", "h_Init", 154, 260, 1800); + +TH1F *h_Events3=(TH1F*)h_Init->Clone("h_Events3"); +TH1F *h_Events8=(TH1F*)h_Init->Clone("h_Events8"); +TH1F *h_Events10=(TH1F*)h_Init->Clone("h_Events10"); +TH1F *h_Events16=(TH1F*)h_Init->Clone("h_Events16"); +// for (unsigned int i=2; i<=8; ++i) +for (unsigned int i=0; i<12; ++i) +{ + h_Init->SetBinContent(h_Init->FindBin(massL[i]), signals.v_CountWithPU.at(i)->GetBinContent(1)); + // std::cout<<"signals.v_CountWithPU.at(i)->GetBinContent(1) = "<<.signals.v_CountWithPU.at(i)->GetBinContent(1)<SetBinContent(i, signals.v_Cuts.at(i)->GetBinContent(2)); + // + std::cout<GetBinContent(4)<< " "<GetBinContent(8)<<" "<< signals.v_Cuts.at(i)->GetBinContent(10)<< " "<< signals.v_Cuts.at(i)->GetBinContent(12)<SetBinContent(h_Init->FindBin(massL[i]), signals.v_Cuts.at(i)->GetBinContent(4)); + h_Events8->SetBinContent(h_Init->FindBin(massL[i]), signals.v_Cuts.at(i)->GetBinContent(8)); + h_Events10->SetBinContent(h_Init->FindBin(massL[i]), signals.v_Cuts.at(i)->GetBinContent(10)); + h_Events16->SetBinContent(h_Init->FindBin(massL[i]), signals.v_Cuts.at(i)->GetBinContent(12)); + + // std::cout<<"m_X (GeV) = "<SetLineColor(kPink+2); g_Ae_3->SetMarkerColor(kPink+2); g_Ae_3->SetMarkerStyle(20); g_Ae_3->SetLineWidth(2); +TGraphAsymmErrors *g_Ae_8=new TGraphAsymmErrors(h_Events8, h_Init); g_Ae_8->SetTitle("4 bjets efficiency"); g_Ae_8->SetLineColor(kBlue+2); g_Ae_8->SetMarkerColor(kBlue+2); g_Ae_8->SetMarkerStyle(20); g_Ae_8->SetLineWidth(2); +TGraphAsymmErrors *g_Ae_10=new TGraphAsymmErrors(h_Events10, h_Init); g_Ae_10->SetTitle("HH Candidate efficiency"); g_Ae_10->SetLineColor(kGreen+2); g_Ae_10->SetMarkerColor(kGreen+2); g_Ae_10->SetMarkerStyle(20); g_Ae_10->SetLineWidth(2); +TGraphAsymmErrors *g_Ae_16=new TGraphAsymmErrors(h_Events16, h_Init); g_Ae_16->SetTitle("SR efficiency"); g_Ae_16->SetLineColor(kRed+2); g_Ae_16->SetMarkerColor(kRed+2); g_Ae_16->SetMarkerStyle(20); g_Ae_16->SetLineWidth(2); + +TCanvas *c_Ae=new TCanvas("c_Ae", "c_Ae", 700, 700); +c_Ae->SetTickx(1); +c_Ae->SetTicky(1); +c_Ae->SetLogy(); + +c_Ae->SetFrameFillStyle(4000); +c_Ae->SetFrameFillColor(0000); +g_Ae_3->SetMaximum(10.); +g_Ae_3->SetMinimum(0.0001); +//g_Ae_3->SetMaximum(0.7); g_Ae_3->SetMinimum(0); + g_Ae_3->SetTitle(""); + g_Ae_3->GetXaxis()->SetTitle("m_{X} (GeV)"); + g_Ae_3->GetYaxis()->SetTitle("efficiency (%)"); + g_Ae_3->GetYaxis()->SetTitleOffset(1.1); + g_Ae_3->GetYaxis()->SetTitleFont(42); + g_Ae_3->GetYaxis()->SetLabelFont(42); + g_Ae_3->GetXaxis()->SetTitleFont(42); + g_Ae_3->GetXaxis()->SetLabelFont(42); + g_Ae_3->GetYaxis()->SetLabelSize(0.03); + g_Ae_3->GetXaxis()->SetLabelSize(0.03); + g_Ae_3->Draw("ALP"); + g_Ae_8->Draw("LP same"); + g_Ae_10->Draw("LP same"); + g_Ae_16->Draw("LP same"); + std::cout<<" LMA "<SetBorderSize(0); + leg->SetTextSize(0.035); + leg->SetTextFont(42); + leg->SetLineColor(1); + leg->SetLineStyle(1); + leg->SetLineWidth(2); + leg->SetFillColor(0); + leg->SetFillStyle(0); + leg->AddEntry(g_Ae_3, "Trigger"); + leg->AddEntry(g_Ae_8, "4 b-tagged jets", "lp"); + leg->AddEntry(g_Ae_10, "HH candidate", "lp"); + leg->AddEntry(g_Ae_16, "Signal Region", "lp"); + leg->Draw("same"); + + c_Ae->SaveAs("step1.png"); + + CMS_lumi( c_Ae, iPeriod, iPos ); + + c_Ae->Update(); + + +// g_Ae_2->Draw("AL*"); + +c_Ae->SaveAs("c_Ae.png"); +c_Ae->SaveAs("c_Ae.root"); + + +} diff --git a/AnalysisCode/DisplayJetProperties.cc b/AnalysisCode/DisplayJetProperties.cc index ce9cb47..091d60f 100644 --- a/AnalysisCode/DisplayJetProperties.cc +++ b/AnalysisCode/DisplayJetProperties.cc @@ -21,7 +21,7 @@ std::string itoa(int i) } // Display histogram for file -void DisplayHistogram_forFile(TFile *file, std::string histogramName, int color) +TH1* DisplayHistogram_forFile(TFile *file, std::string histogramName, int color) { TH1F *h=(TH1F*)file->Get(histogramName.c_str()); h->Scale(1./h->GetSumOfWeights()); @@ -35,24 +35,38 @@ void DisplayHistogram_forFile(TFile *file, std::string histogramName, int color) first=false; } h->Draw("hist same"); + return h; } void DisplayJetProperties() { std::vector v_files; - v_files.push_back(new TFile("Histograms_Graviton300GeV.root")); - v_files.push_back(new TFile("Histograms_Graviton400GeV.root")); - v_files.push_back(new TFile("Histograms_Graviton600GeV.root")); - v_files.push_back(new TFile("Histograms_Graviton800GeV.root")); - v_files.push_back(new TFile("Histograms_Graviton1000GeV.root")); - v_files.push_back(new TFile("Histograms_Graviton1200GeV.root")); - // v_files.push_back(new TFile("Histograms_Graviton1600GeV.root")); - // v_files.push_back(new TFile("Histograms_Graviton2000GeV.root")); - // v_files.push_back(new TFile("Histograms_Graviton3000GeV.root")); - TFile *f_data=new TFile("Histograms_Data_BTagCSV_2015_Skim.root"); - TFile *f_ttbar=new TFile("Histograms_TT_TuneCUETP8M1_13TeV-amcatnlo-pythia8_Skim.root"); - std::vector mean_gen={300, 400, 600, 800, 1000, 1200, 1600, 2000, 3000}; - std::vector v_colors = {kGreen, kGreen+2, kOrange, kOrange+2, kMagenta, kMagenta+2, kBlue, kBlue+2, kCyan, kCyan+2}; +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + //v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); + //v_files.push_back(new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + //v_files.push_back(new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); +// v_files.push_back(new TFile("Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + //v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-1000_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-1200_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph.root"));*/ + TFile *f_data=new TFile("Histograms_BTagCSV_all.root"); + //TFile *f_ttbar=new TFile("Histograms_TT_TuneCUETP8M1_13TeV-amcatnlo-pythia8_Skim.root"); + std::vector mean_gen={400, 500, 600, 700, 800 ,900};//, 1600, 2000, 3000}; + std::vector v_colors = {kAzure+1, kAzure+3, kRed+1, kPink+1, kPink+3, kGreen+2, kGreen+3, kBlue+1, kGray+2, kCyan, kCyan+2, kRed-4, kRed-7, kYellow-4, kGreen-4, kGreen }; gROOT->SetStyle("Plain"); TStyle *myStyle=setTDRStyle(); @@ -60,13 +74,14 @@ void DisplayJetProperties() myStyle->SetOptTitle(0); myStyle->SetOptStat(0); - TLegend *leg=new TLegend(0.6, 0.7, 0.89, 0.89); + + TLegend *leg=new TLegend(0.6, 0.5, 0.89, 0.89); for (unsigned int i=0; iAddEntry(v_files.at(i)->Get("h_pTOrder_JetpT_1"), ("Signal m_{X} = "+itoa(mean_gen.at(i))+" GeV").c_str()); } leg->AddEntry(f_data->Get("h_pTOrder_JetpT_1"), "13 TeV Data"); - leg->AddEntry(f_ttbar->Get("h_pTOrder_JetpT_1"), "t#bar{t}"); + // leg->AddEntry(f_ttbar->Get("h_pTOrder_JetpT_1"), "t#bar{t}"); // Plot the 1st highest pT jets with |eta| < 2.5 first=true; @@ -76,11 +91,11 @@ void DisplayJetProperties() DisplayHistogram_forFile(v_files.at(i), "h_pTOrder_JetpT_1", v_colors.at(i)); } DisplayHistogram_forFile(f_data, "h_pTOrder_JetpT_1", kBlack); - DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_1", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_1", kRed); leg->Draw(); - TArrow *line=new TArrow(40., 0.14, 40., 0); line->SetLineWidth(3); + TArrow *line=new TArrow(30., 0.14, 30., 0); line->SetLineWidth(3); line->Draw(); - c_pTOrder_JetpT_1->SaveAs("c_pTOrder_JetpT_1.png"); + c_pTOrder_JetpT_1->SaveAs("c_pTOrder_JetpT_1.pdf"); // Plot the 2nd highest pT jets with |eta| < 2.5 first=true; @@ -90,10 +105,10 @@ void DisplayJetProperties() DisplayHistogram_forFile(v_files.at(i), "h_pTOrder_JetpT_2", v_colors.at(i)); } DisplayHistogram_forFile(f_data, "h_pTOrder_JetpT_2", kBlack); - DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_2", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_2", kRed); leg->Draw(); line->Draw(); - c_pTOrder_JetpT_2->SaveAs("c_pTOrder_JetpT_2.png"); + c_pTOrder_JetpT_2->SaveAs("c_pTOrder_JetpT_2.pdf"); // Plot the 3rd highest pT jets with |eta| < 2.5 first=true; @@ -103,10 +118,10 @@ void DisplayJetProperties() DisplayHistogram_forFile(v_files.at(i), "h_pTOrder_JetpT_3", v_colors.at(i)); } DisplayHistogram_forFile(f_data, "h_pTOrder_JetpT_3", kBlack); - DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_3", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_3", kRed); leg->Draw(); line->Draw(); - c_pTOrder_JetpT_3->SaveAs("c_pTOrder_JetpT_3.png"); + c_pTOrder_JetpT_3->SaveAs("c_pTOrder_JetpT_3.pdf"); // Plot the 4th highest pT jets with |eta| < 2.5 first=true; @@ -116,10 +131,10 @@ void DisplayJetProperties() DisplayHistogram_forFile(v_files.at(i), "h_pTOrder_JetpT_4", v_colors.at(i)); } DisplayHistogram_forFile(f_data, "h_pTOrder_JetpT_4", kBlack); - DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_4", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_4", kRed); leg->Draw(); line->Draw(); - c_pTOrder_JetpT_4->SaveAs("c_pTOrder_JetpT_4.png"); + c_pTOrder_JetpT_4->SaveAs("c_pTOrder_JetpT_4.pdf"); // Plot the 5th highest pT jets with |eta| < 2.5 first=true; @@ -129,66 +144,66 @@ void DisplayJetProperties() DisplayHistogram_forFile(v_files.at(i), "h_pTOrder_JetpT_5", v_colors.at(i)); } DisplayHistogram_forFile(f_data, "h_pTOrder_JetpT_5", kBlack); - DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_5", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_pTOrder_JetpT_5", kRed); leg->Draw(); - c_pTOrder_JetpT_5->SaveAs("c_pTOrder_JetpT_5.png"); + c_pTOrder_JetpT_5->SaveAs("c_pTOrder_JetpT_5.pdf"); // Plot the 1st highest CSV jets with |eta| < 2.5, pT > 40 GeV first=true; - TCanvas *c_CSVOrder_JetCSV_1=new TCanvas("c_CSVOrder_JetCSV_1", "c_CSVOrder_JetCSV_1", 700, 700); + TCanvas *c_CMVAOrder_JetCMVA_1=new TCanvas("c_CMVAOrder_JetCMVA_1", "c_CMVAOrder_JetCMVA_1", 700, 700); for (unsigned int i=0; iDraw(); - line=new TArrow(0.6, 0.8, 0.6, 0); line->SetLineWidth(3); + line=new TArrow(0.185, 0.8, 0.185, 0); line->SetLineWidth(3); line->Draw(); - c_CSVOrder_JetCSV_1->SaveAs("c_CSVOrder_JetCSV_1.png"); + c_CMVAOrder_JetCMVA_1->SaveAs("c_CMVAOrder_JetCMVA_1.pdf"); // Plot the 2nd highest CSV jets with |eta| < 2.5, pT > 40 GeV first=true; - TCanvas *c_CSVOrder_JetCSV_2=new TCanvas("c_CSVOrder_JetCSV_2", "c_CSVOrder_JetCSV_2", 700, 700); + TCanvas *c_CMVAOrder_JetCMVA_2=new TCanvas("c_CMVAOrder_JetCMVA_2", "c_CMVAOrder_JetCMVA_2", 700, 700); for (unsigned int i=0; iDraw(); - line=new TArrow(0.6, 0.4, 0.6, 0); line->SetLineWidth(3); + line=new TArrow(0.185, 0.4, 0.185, 0); line->SetLineWidth(3); line->Draw(); - c_CSVOrder_JetCSV_2->SaveAs("c_CSVOrder_JetCSV_2.png"); + c_CMVAOrder_JetCMVA_2->SaveAs("c_CMVAOrder_JetCMVA_2.pdf"); // Plot the 3rd highest CSV jets with |eta| < 2.5, pT > 40 GeV first=true; - TCanvas *c_CSVOrder_JetCSV_3=new TCanvas("c_CSVOrder_JetCSV_3", "c_CSVOrder_JetCSV_3", 700, 700); + TCanvas *c_CMVAOrder_JetCMVA_3=new TCanvas("c_CMVAOrder_JetCMVA_3", "c_CMVAOrder_JetCMVA_3", 700, 700); for (unsigned int i=0; iDraw(); - line=new TArrow(0.6, 0.1, 0.6, 0); line->SetLineWidth(3); + line=new TArrow(0.185, 0.1, 0.185, 0); line->SetLineWidth(3); line->Draw(); - c_CSVOrder_JetCSV_3->SaveAs("c_CSVOrder_JetCSV_3.png"); + c_CMVAOrder_JetCMVA_3->SaveAs("c_CMVAOrder_JetCMVA_3.pdf"); // Plot the 4th highest CSV jets with |eta| < 2.5, pT > 40 GeV first=true; - TCanvas *c_CSVOrder_JetCSV_4=new TCanvas("c_CSVOrder_JetCSV_4", "c_CSVOrder_JetCSV_4", 700, 700); - DisplayHistogram_forFile(f_data, "h_CSVOrder_JetCSV_4", kBlack); + TCanvas *c_CMVAOrder_JetCMVA_4=new TCanvas("c_CMVAOrder_JetCMVA_4", "c_CMVAOrder_JetCMVA_4", 700, 700); + DisplayHistogram_forFile(f_data, "h_CMVAOrder_JetCMVA_4", kBlack); for (unsigned int i=0; iDraw(); - line=new TArrow(0.6, 0.1, 0.6, 0); line->SetLineWidth(3); + line=new TArrow(0.185, 0.1, 0.185, 0); line->SetLineWidth(3); line->Draw(); - c_CSVOrder_JetCSV_4->SaveAs("c_CSVOrder_JetCSV_4.png"); + c_CMVAOrder_JetCMVA_4->SaveAs("c_CMVAOrder_JetCMVA_4.pdf"); // Plot the nCbJets distribution @@ -199,20 +214,20 @@ void DisplayJetProperties() { DisplayHistogram_forFile(v_files.at(i), "h_nCbJets", v_colors.at(i)); } - DisplayHistogram_forFile(f_ttbar, "h_nCbJets", kRed); + //DisplayHistogram_forFile(f_ttbar, "h_nCbJets", kRed); leg->Draw(); line=new TArrow(4, 0.5, 4, 0); line->SetLineWidth(3); line->Draw(); - c_nCbJets->SaveAs("c_nCbJets.png"); + c_nCbJets->SaveAs("c_nCbJets.pdf"); // Plot the dR distribution between gen b quarks from a Higgs first=true; TCanvas *c_dR_genHbb=new TCanvas("c_dR_genHbb", "c_dR_genHbb", 700, 700); - for (unsigned int i=v_files.size()-1; i>0; --i) + for (int i=v_files.size()-1; i>=0; --i) { - ((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->Rebin(2); - ((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->GetXaxis()->SetRangeUser(0, 2.); + ((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->Rebin(4); + ((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->GetXaxis()->SetRangeUser(0, 4.); DisplayHistogram_forFile(v_files.at(i), "h_dR_genHbb", v_colors.at(i)); int binx0=((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->FindBin(0.); int binx1=((TH1F*)(v_files.at(i)->Get("h_dR_genHbb")))->FindBin(0.4); @@ -222,9 +237,9 @@ void DisplayJetProperties() std::cout<<"mX = "< 0.4 = "<Draw(); - line=new TArrow(0.4, 0.12, 0.4, 0); line->SetLineWidth(3); + line=new TArrow(1.5, 0.02, 1.5, 0); line->SetLineWidth(3); line->Draw(); - c_dR_genHbb->SaveAs("c_dR_genHbb.png"); + c_dR_genHbb->SaveAs("c_dR_genHbb.pdf"); } diff --git a/AnalysisCode/DisplayKinFit.cc b/AnalysisCode/DisplayKinFit.cc index 7bf113e..57c18fc 100644 --- a/AnalysisCode/DisplayKinFit.cc +++ b/AnalysisCode/DisplayKinFit.cc @@ -195,19 +195,27 @@ void DisplayKinFit() std::vector v_files; //v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); //v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root")); - //v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); - v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); - v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); - v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); v_files.push_back(new TFile("MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); - v_files.push_back(new TFile("MMRSelection_chi2/Histograms_RSGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); - v_files.push_back(new TFile("MMRSelection_chi2/Histograms_RSGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); + v_files.push_back(new TFile("MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + v_files.push_back(new TFile("MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); + //v_files.push_back(new TFile("MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph.root")); // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph.root")); // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph.root")); - std::vector mean_gen={400, 500, 700, 900, 1000, 1200}; // , 1200, 1600, 2000, 3000}; - + std::vector mean_gen={350,450,550,650,750,900,1000,1200}; // , 1200, 1600, 2000, 3000}; + gROOT->SetStyle("Plain"); TStyle *myStyle=setTDRStyle(); myStyle->cd(); diff --git a/AnalysisCode/DisplayKinFitReg.cc b/AnalysisCode/DisplayKinFitReg.cc new file mode 100644 index 0000000..dbc4432 --- /dev/null +++ b/AnalysisCode/DisplayKinFitReg.cc @@ -0,0 +1,531 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "TDRStyle.h" + +bool first=true; + +std::string itoa(int i) +{ + char res[4]; + sprintf(res, "%d", i); + std::string ret(res); + return ret; +} + +std::string ftoa(double i) +{ + char res[10]; + sprintf(res, "%2.1f", i); + std::string ret(res); + return ret; +} + +void DisplayKinFitForFile(TFile *file, TFile *fileR, double xLine) +{ + TH1F *h_mX_SR=(TH1F*)file->Get("h_mX_SR"); + TH1F *h_mX_SR_kf=(TH1F*)file->Get("h_mX_SR_kinFit")->Clone("h_mX_SR_kf"); + TH1F *h_mX_SR_kf_reg=(TH1F*)fileR->Get("h_mX_SR_kinFit")->Clone("h_mX_SR_kf_reg"); + + + h_mX_SR->Rebin(10); + h_mX_SR_kf->Rebin(10); + h_mX_SR_kf_reg->Rebin(10); + h_mX_SR->GetXaxis()->SetRangeUser(200, 750 ); + h_mX_SR_kf->GetXaxis()->SetRangeUser(200, 750 ); + h_mX_SR_kf_reg->GetXaxis()->SetRangeUser(200, 750 ); + + h_mX_SR->SetLineWidth(2); + h_mX_SR_kf->SetLineWidth(2); + h_mX_SR_kf_reg->SetLineWidth(2); + + h_mX_SR->SetLineColor(kBlack); +// h_mX_SR->Smooth(100); + h_mX_SR->SetLineStyle(7); + h_mX_SR_kf->SetLineColor(kBlue+1); + h_mX_SR_kf->SetLineStyle(7); + // h_mX_SR_kf_reg->Smooth(200); + h_mX_SR_kf_reg->SetLineColor(kRed+1); + + if (first) + { + h_mX_SR_kf_reg->GetYaxis()->SetTitle("Normalized Units"); + h_mX_SR_kf_reg->GetYaxis()->SetTitleOffset(1.4); + TH1* tmp = h_mX_SR_kf_reg->DrawNormalized("hist"); + tmp->SetMaximum(0.35); + h_mX_SR_kf_reg->SetMaximum(h_mX_SR_kf_reg->GetMaximum()*1.4); + TLegend *leg=new TLegend(0.4, 0.75, 0.89, 0.89); + leg->SetLineColor(0); + leg->SetFillColor(0); + leg->AddEntry(h_mX_SR, "m_{X} Signal Peak"); + leg->AddEntry(h_mX_SR_kf, "m_{X} w/ Kinematic Fit"); + leg->AddEntry(h_mX_SR_kf_reg, "m_{X} w/ Kinematic Fit + Reg."); + leg->Draw(); + first=false; + } + else h_mX_SR_kf_reg->DrawNormalized("hist same"); + h_mX_SR_kf->DrawNormalized("hist same"); + h_mX_SR->DrawNormalized("hist same"); + + TLine *line=new TLine(xLine, 0, xLine, 0.25); + line->Draw(); + +} + +void Display_mH1_ForFile(TFile *f, TFile *fR, double &mean_H1, double &sigma_H1) +{ + TH1F *h_H1_mass=(TH1F*)f->Get("h_H1_mass"); + TH1F *h_H1_mass_reg=(TH1F*)fR->Get("h_H1_mass"); + + TF1 *f_H1_mass=new TF1("f_H1_mass", "gaus", h_H1_mass->GetMean()-1*h_H1_mass->GetRMS(), h_H1_mass->GetMean()+1*h_H1_mass->GetRMS()); + TF1 *f_H1_mass_reg=new TF1("f_H1_mass_reg", "gaus", h_H1_mass_reg->GetMean()-1*h_H1_mass_reg->GetRMS(), h_H1_mass_reg->GetMean()+1*h_H1_mass_reg->GetRMS()); + + h_H1_mass->Rebin(2); + h_H1_mass_reg->Rebin(2); + + h_H1_mass->GetXaxis()->SetRangeUser(50, 200); + h_H1_mass_reg->GetXaxis()->SetRangeUser(50, 200); + + h_H1_mass->Fit(f_H1_mass, "R"); + h_H1_mass_reg->Fit(f_H1_mass_reg, "R"); + + h_H1_mass->SetLineColor(kBlue); + f_H1_mass->SetLineColor(kBlue); + h_H1_mass_reg->SetLineColor(kRed); + f_H1_mass_reg->SetLineColor(kRed); + + h_H1_mass->Draw(""); + h_H1_mass_reg->Draw("same"); + + TLegend *leg=new TLegend(0.57, 0.89, 0.89, 0.75); + leg->AddEntry(h_H1_mass, ("Nominal #bar{x}="+ftoa(f_H1_mass->GetParameter(1))+", #sigma="+ftoa(f_H1_mass->GetParameter(2))).c_str()); + leg->AddEntry(h_H1_mass_reg, ("Reg. Corr. #bar{x}="+ftoa(f_H1_mass_reg->GetParameter(1))+", #sigma="+ftoa(f_H1_mass_reg->GetParameter(2))).c_str()); + leg->SetLineColor(0); + leg->Draw(); + + mean_H1=f_H1_mass->GetParameter(1); + sigma_H1=f_H1_mass->GetParameter(2); +} + +void Display_mH2_ForFile(TFile *f,TFile *fR, double &mean_H2, double &sigma_H2) +{ + TH1F *h_H2_mass=(TH1F*)f->Get("h_H2_mass"); + TH1F *h_H2_mass_biasCorrected=(TH1F*)f->Get("h_H2_mass_biasCorrected"); + + TF1 *f_H2_mass=new TF1("f_H2_mass", "gaus", h_H2_mass->GetMean()-1*h_H2_mass->GetRMS(), h_H2_mass->GetMean()+1*h_H2_mass->GetRMS()); + TF1 *f_H2_mass_biasCorrected=new TF1("f_H2_mass_biasCorrected", "gaus", h_H2_mass_biasCorrected->GetMean()-1*h_H2_mass_biasCorrected->GetRMS(), h_H2_mass_biasCorrected->GetMean()+1*h_H2_mass_biasCorrected->GetRMS()); + + h_H2_mass->Rebin(2); + h_H2_mass_biasCorrected->Rebin(2); + + h_H2_mass->GetXaxis()->SetRangeUser(50, 200); + h_H2_mass_biasCorrected->GetXaxis()->SetRangeUser(50, 200); + + h_H2_mass->Fit(f_H2_mass, "R"); + h_H2_mass_biasCorrected->Fit(f_H2_mass_biasCorrected, "R"); + + h_H2_mass->SetLineColor(kBlue); + f_H2_mass->SetLineColor(kBlue); + h_H2_mass_biasCorrected->SetLineColor(kRed); + f_H2_mass_biasCorrected->SetLineColor(kRed); + + h_H2_mass->Draw(""); + h_H2_mass_biasCorrected->Draw("same"); + + TLegend *leg=new TLegend(0.57, 0.89, 0.89, 0.75); + leg->AddEntry(h_H2_mass, ("Nominal #bar{x}="+ftoa(f_H2_mass->GetParameter(1))+", #sigma="+ftoa(f_H2_mass->GetParameter(2))).c_str()); + leg->AddEntry(h_H2_mass_biasCorrected, ("Bias Corr. #bar{x}="+ftoa(f_H2_mass_biasCorrected->GetParameter(1))+", #sigma="+ftoa(f_H2_mass_biasCorrected->GetParameter(2))).c_str()); + leg->SetLineColor(0); + leg->Draw(); + + mean_H2=f_H2_mass->GetParameter(1); + sigma_H2=f_H2_mass->GetParameter(2); +} + +void DisplayXpT_ForFile(TFile *f, TFile *fR ) +{ + TH1F *h_HH_balance=(TH1F*)f->Get("h_HH_balance"); + TH1F *h_HH_balance_reg=(TH1F*)fR->Get("h_HH_balance")->Clone("h_HH_balance_reg"); + TH1F *h_HH_balance_kinFit=(TH1F*)fR->Get("h_HH_balance_kinFit"); + + h_HH_balance->SetLineColor(kBlue); + h_HH_balance_reg->SetLineColor(kGreen+1); + h_HH_balance_kinFit->SetLineColor(kRed); + + h_HH_balance_kinFit->Rebin(5); + h_HH_balance->Rebin(5); + h_HH_balance_reg->Rebin(5); + + h_HH_balance->GetXaxis()->SetRangeUser(0, 100); + h_HH_balance_reg->GetXaxis()->SetRangeUser(0, 100); + h_HH_balance_kinFit->GetXaxis()->SetRangeUser(0, 100); + + h_HH_balance_kinFit->SetMaximum(h_HH_balance_kinFit->GetMaximum()*1.2); + h_HH_balance_kinFit->Draw("hist"); + h_HH_balance->Draw("hist same"); + h_HH_balance_reg->Draw("hist same"); + h_HH_balance_kinFit->Draw("hist same"); + + TLegend *leg=new TLegend(0.4, 0.89, 0.89, 0.7); + leg->AddEntry(h_HH_balance, ("Nominal balance, #bar{x} = "+ftoa(h_HH_balance->GetMean())+", #sigma = "+ftoa(h_HH_balance->GetRMS())).c_str()); + leg->AddEntry(h_HH_balance_kinFit, ("Kinematic fit balance, #bar{x} = "+ftoa(h_HH_balance_kinFit->GetMean())+", #sigma = "+ftoa(h_HH_balance_kinFit->GetRMS())).c_str()); + leg->SetLineColor(0); + leg->Draw(); +} + + +// Display histogram for file +TH1* DisplayHistogram_forFile(TFile *file, std::string histogramName, int color, bool reg = false) +{ + TH1F *h=(TH1F*)file->Get(histogramName.c_str()); + h->Scale(1./h->GetSumOfWeights()); + h->SetLineColor(color); + h->SetLineWidth(2); + if( reg ) h->SetLineStyle(2); + if (first) + { + h->SetMaximum(h->GetMaximum()*1.5); + h->GetYaxis()->SetTitleOffset(1.6); + h->Draw("hist"); + first=false; + } + h->Draw("hist same"); + return h; +} + + + +void DisplayKinFitReg() +{ + std::vector v_files; + // v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + //v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root")); +v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); +// v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + +std::vector v_files_reg; + // v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + //v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root")); + v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + // v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files_reg.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + // v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); + v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + // v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); + v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); +// v_files_reg.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); +// + TFile *f_data=new TFile("PreselectedWithoutRegression/Histograms_BTagCSV.root"); + TFile *f_data_reg=new TFile("PreselectedWithRegression/Histograms_BTagCSV.root"); + // v_files_reg.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph.root")); + // v_files.push_back(new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph.root")); + std::vector mean_gen={300,450,600, 750, 900 };// , 1200, 1600, 2000, 3000}; + + + gROOT->SetStyle("Plain"); + TStyle *myStyle=setTDRStyle(); + myStyle->cd(); + myStyle->SetOptTitle(0); + myStyle->SetOptStat(0); + + std::vector mean, meanDiff_biasCorrected, meanDiff_kinFit, sigma, sigma_biasCorrected, sigma_kinFit; + int dontwant=3; + std::cout<<"Fitting peaks"<Get("h_mX_SR"); + TH1F *h_mX_SR_kf=(TH1F*)v_files.at(i)->Get("h_mX_SR_kinFit"); + TH1F *h_mX_SR_kf_reg=(TH1F*)v_files_reg.at(i)->Get("h_mX_SR_kinFit"); + + h_mX_SR->Rebin(10); + h_mX_SR_kf->Rebin(10); + h_mX_SR_kf_reg->Rebin(10); + + TF1 *f_mX_SR=new TF1("f_mX_SR", "gaus", h_mX_SR->GetMean()-(1.5*h_mX_SR->GetRMS()), h_mX_SR->GetMean()+(1.5*h_mX_SR->GetRMS())); + f_mX_SR->SetParLimits(1, h_mX_SR->GetMean()-(3*h_mX_SR->GetRMS()), h_mX_SR->GetMean()+(3*h_mX_SR->GetRMS())); + f_mX_SR->SetParLimits(2, 0, 3*h_mX_SR->GetRMS()); + std::cout<<"Fitting: "<Fit(f_mX_SR, "R"); + std::cout<<"=== ==="<GetMean()-(1.5*h_mX_SR_kf->GetRMS()), h_mX_SR_kf->GetMean()+(1.5*h_mX_SR_kf->GetRMS())); + f_mX_SR_biasCorrected->SetParLimits(1, h_mX_SR_kf->GetMean()-(3*h_mX_SR_kf->GetRMS()), h_mX_SR_kf->GetMean()+(3*h_mX_SR_kf->GetRMS())); + f_mX_SR_biasCorrected->SetParLimits(2, 0, 3*h_mX_SR_kf->GetRMS()); + std::cout<<"Fitting: "<Fit(f_mX_SR_biasCorrected, "R"); + std::cout<<"=== ==="<GetMean()-(1.5*h_mX_SR_kf_reg->GetRMS()), h_mX_SR_kf_reg->GetMean()+(1.5*h_mX_SR_kf_reg->GetRMS())); + f_mX_SR_kinFit->SetParLimits(1, h_mX_SR_kf_reg->GetMean()-(3*h_mX_SR_kf_reg->GetRMS()), h_mX_SR_kf_reg->GetMean()+(3*h_mX_SR_kf_reg->GetRMS())); + f_mX_SR_kinFit->SetParLimits(2, 0, 3*h_mX_SR_kf_reg->GetRMS()); + std::cout<<"Fitting: "<Fit(f_mX_SR_kinFit, "R"); + std::cout<<"=== ==="<Divide(3,1); + c_Canvas->cd(1); + h_mX_SR->Draw(); + c_Canvas->cd(2); + h_mX_SR_kf->Draw(); + c_Canvas->cd(3); + h_mX_SR_kf_reg->Draw(); + c_Canvas->SaveAs(("c_Fit_"+itoa(mean_gen.at(i))+".png").c_str()); + delete c_Canvas; + + mean.push_back(f_mX_SR->GetParameter(1) - mean_gen.at(i)); + meanDiff_biasCorrected.push_back(f_mX_SR_biasCorrected->GetParameter(1) - mean_gen.at(i)); + meanDiff_kinFit.push_back(f_mX_SR_kinFit->GetParameter(1) - mean_gen.at(i)); + + sigma.push_back(f_mX_SR->GetParameter(2)/mean_gen.at(i)); + sigma_biasCorrected.push_back(f_mX_SR_biasCorrected->GetParameter(2)/mean_gen.at(i)); + sigma_kinFit.push_back(f_mX_SR_kinFit->GetParameter(2)/mean_gen.at(i)); + + delete h_mX_SR; + delete h_mX_SR_kf; + delete h_mX_SR_kf_reg; + } + + std::vector v_mean_H1, v_sigma_H1; + std::vector v_mean_H2, v_sigma_H2; + for (unsigned int i=dontwant; iSaveAs(("c_mH1_"+itoa(mean_gen.at(i))+".png").c_str()); + delete c_mH1; + v_mean_H1.push_back(mean_H1); + v_sigma_H1.push_back(sigma_H1); + + TCanvas *c_mH2=new TCanvas("c_mH2", "c_mH2", 700, 700); + double mean_H2, sigma_H2; + Display_mH2_ForFile(v_files.at(i), v_files_reg.at(i), mean_H2, sigma_H2); + c_mH2->SaveAs(("c_mH2_"+itoa(mean_gen.at(i))+".png").c_str()); + delete c_mH2; + v_mean_H2.push_back(mean_H2); + v_sigma_H2.push_back(sigma_H2); + } + TGraph *g_mean_H1=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(v_mean_H1.at(0))); + TGraph *g_sigma_H1=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(v_sigma_H1.at(0))); + TGraph *g_mean_H2=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(v_mean_H2.at(0))); + TGraph *g_sigma_H2=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(v_sigma_H2.at(0))); + g_mean_H1->SetTitle("; m_{X}^{gen} (GeV); "); + g_sigma_H1->SetTitle("; m_{X}^{gen} (GeV); #sigma(m_{H1})"); + g_mean_H2->SetTitle("; m_{X}^{gen} (GeV); "); + g_sigma_H2->SetTitle("; m_{X}^{gen} (GeV); #sigma(m_{H1})"); + TF1 *f_mean_H1=new TF1("f_mean_H1", "pol0", 400, 1200); + TF1 *f_sigma_H1=new TF1("f_sigma_H1", "pol0", 400, 1200); + TF1 *f_mean_H2=new TF1("f_mean_H2", "pol0", 400, 1200); + TF1 *f_sigma_H2=new TF1("f_sigma_H2", "pol0", 400, 1200); + g_mean_H1->Fit(f_mean_H1, "R"); + g_sigma_H1->Fit(f_sigma_H1, "R"); + g_mean_H2->Fit(f_mean_H2, "R"); + g_sigma_H2->Fit(f_sigma_H2, "R"); + TCanvas *c_H1H2_meanSigma=new TCanvas("c_H1H2_meanSigma", "c_H1H2_meanSigma", 700, 700); + c_H1H2_meanSigma->Divide(2,2); + c_H1H2_meanSigma->cd(1); + g_mean_H1->Draw("A*"); + c_H1H2_meanSigma->cd(2); + g_sigma_H1->Draw("A*"); + c_H1H2_meanSigma->cd(3); + g_mean_H2->Draw("A*"); + c_H1H2_meanSigma->cd(4); + g_sigma_H2->Draw("A*"); + c_H1H2_meanSigma->SaveAs("c_H1H2_meanSigma.png"); + + TCanvas *c_KinFit=new TCanvas("c_KinFit", "c_KinFit", 700, 1000); + std::vector choice = { 0, 2 }; + for (unsigned int i=0; iSaveAs("c_KinFit.png"); + + TGraph *g_mean=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(mean.at(0))); + g_mean->GetYaxis()->SetRangeUser(-100, 100); + g_mean->GetXaxis()->SetLimits(300, 1300); + g_mean->SetTitle("; m_{X}^{gen} (GeV); m_{X}^{KinFit} - m_{X} (GeV)"); + g_mean->SetMarkerColor(kBlue); + TGraph *g_meanDiff_biasCorrected = new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(meanDiff_biasCorrected.at(0))); + g_meanDiff_biasCorrected->SetMarkerColor(kGreen); + TGraph *g_meanDiff_kinFit = new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(meanDiff_kinFit.at(0))); + g_meanDiff_kinFit->SetMarkerColor(kRed+1); + TCanvas *c_meanDiff=new TCanvas("c_meanDiff", "c_meanDiff", 700, 700); + g_mean->Draw("A*"); + g_meanDiff_biasCorrected->Draw("SAME*"); + g_meanDiff_kinFit->Draw("SAME*"); + TF1 *f_meanDiff_kinFit=new TF1("f_meanDiff_kinFit", "pol0", 400, 1200); + f_meanDiff_kinFit->SetLineColor(kRed); f_meanDiff_kinFit->SetLineWidth(1); f_meanDiff_kinFit->SetLineStyle(7); + g_meanDiff_kinFit->Fit(f_meanDiff_kinFit, "R"); + TLegend *leg=new TLegend(0.5, 0.7, 0.89, 0.89); + leg->SetLineColor(0); + leg->SetFillColor(0); + leg->AddEntry(g_mean, "m_{X}^{reco} - m_{X}^{gen}", "p"); + leg->AddEntry(g_meanDiff_biasCorrected, "m_{X}^{biasCorr} - m_{X}^{gen}", "p"); + leg->AddEntry(g_meanDiff_kinFit, "m_{X}^{kinFit} - m_{X}^{gen}", "p"); + leg->Draw(); + c_meanDiff->SaveAs("c_meanDiff.png"); + c_meanDiff->SaveAs("c_meanDiff.root"); + + TGraph *g_sigma=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(sigma.at(0))); + g_sigma->SetTitle("; m_{X}^{gen} (GeV); #sigma(m_{X})/m_{X}"); + g_sigma->GetYaxis()->SetRangeUser(0., 0.08); + g_sigma->GetXaxis()->SetLimits(300, 1300); + TGraph *g_sigma_biasCorrected=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(sigma_biasCorrected.at(0))); + TGraph *g_sigma_kinFit=new TGraph(v_files.size()-dontwant, &(mean_gen.at(dontwant)), &(sigma_kinFit.at(0))); + TCanvas *c_sigma=new TCanvas("c_sigma", "c_sigma", 700, 700); + g_sigma->SetMarkerColor(kBlue); + g_sigma_biasCorrected->SetMarkerColor(kGreen); + g_sigma_kinFit->SetMarkerColor(kRed); + g_sigma->Draw("A*"); + g_sigma_biasCorrected->Draw("SAME*"); + g_sigma_kinFit->Draw("SAME*"); + leg=new TLegend(0.5, 0.7, 0.89, 0.89); + leg->SetLineColor(0); + leg->SetFillColor(0); + leg->AddEntry(g_sigma, "nominal resolution", "p"); + leg->AddEntry(g_sigma_biasCorrected, "bias reconstructed resolution", "p"); + leg->AddEntry(g_sigma_kinFit, "kinematic fitted resolution", "p"); + leg->Draw(); + c_sigma->SaveAs("c_sigma.png"); + c_sigma->SaveAs("c_sigma.root"); + + // Display jet pT balance + for (unsigned int i=2; iSaveAs(("c_HH_balance_"+itoa(mean_gen.at(i))+".png").c_str()); + delete c_HH_balance; + } + + + std::vector v_files1; + // v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + //v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root")); +v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + // v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); + v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + // v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); + v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); +// v_files1.push_back(new TFile("PreselectedWithoutRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + +std::vector v_files_reg1; + // v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + //v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph.root")); + v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + // v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + // v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph.root")); + v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + // v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root")); + v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph.root")); +// v_files_reg1.push_back(new TFile("PreselectedWithRegression/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + + std::vector v_colors = {kAzure+1, kAzure+3, kRed+1, kPink+1, kPink+3, kGreen+2, kGreen+3, kBlue+1, kGray+2, kCyan, kCyan+2, kRed-4, kRed-7, kYellow-4, kGreen-4, kGreen }; + leg=new TLegend(0.6, 0.5, 0.89, 0.89); + // Plot the 1st highest pT jets with |eta| < 2.5 + first=true; + TCanvas *c_pTOrder_JetpT_1=new TCanvas("c_pTOrder_JetpT_1", "c_pTOrder_JetpT_1", 700, 700); + for (unsigned int i=0; iAddEntry(h, ("Signal m_{X} = "+itoa(mean_gen.at(i))+" GeV").c_str()); + + } + DisplayHistogram_forFile(f_data, "h_pTreg_JetpT_1", kBlack); + DisplayHistogram_forFile(f_data_reg, "h_pTreg_JetpT_1", kBlack, true); + leg->AddEntry(f_data->Get("h_pTOrder_JetpT_1"), "13 TeV Data"); + leg->Draw(); + TArrow *line=new TArrow(30., 0.14, 30., 0); line->SetLineWidth(3); + line->Draw(); + c_pTOrder_JetpT_1->SaveAs("c_reg_JetpT_1.pdf"); + + first=true; + for (unsigned int i=0; iDraw(); + line->Draw(); + c_pTOrder_JetpT_1->SaveAs("c_reg_JetpT_2.pdf"); + + first=true; + for (unsigned int i=0; iDraw(); + line->Draw(); + c_pTOrder_JetpT_1->SaveAs("c_reg_JetpT_3.pdf"); + + first=true; + for (unsigned int i=0; iDraw(); + line->Draw(); + c_pTOrder_JetpT_1->SaveAs("c_reg_JetpT_4.pdf"); + +} diff --git a/AnalysisCode/DisplayPurity.cc b/AnalysisCode/DisplayPurity.cc index 00eade6..74f20b8 100644 --- a/AnalysisCode/DisplayPurity.cc +++ b/AnalysisCode/DisplayPurity.cc @@ -24,7 +24,7 @@ void DisplayPurityForFile(TFile *file, float xmin, float xmax, int rebin) TH1F *h_mX_SR_purity3=(TH1F*)file->Get("h_mX_SR_purity3"); TH1F *h_mX_SR_purity4=(TH1F*)file->Get("h_mX_SR_purity4"); TH1F *h_mX_SR_purity5=(TH1F*)file->Get("h_mX_SR_purity5"); - + h_mX_SR->Rebin(rebin); h_mX_SR_purity0->Rebin(rebin); h_mX_SR_purity1->Rebin(rebin); @@ -92,8 +92,9 @@ void DisplayPurity() TFile *f_Radion600GeV=new TFile("Histograms_Radion600GeV.root"); TFile *f_Radion650GeV=new TFile("Histograms_Radion650GeV.root"); TFile *f_Radion700GeV=new TFile("Histograms_Radion700GeV.root"); - TFile *f_Radion800GeV=new TFile("Histograms_Radion800GeV.root");*/ - TFile *f_Radion900GeV=new TFile("Histograms_Radion900GeV.root"); + TFile *f_Radion800GeV=new TFile("Histograms_Radion800GeV.root"); + TFile *f_Radion900GeV=new TFile("Histograms_Radion900GeV.root");*/ + TFile *f_Radion600GeV=new TFile("Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root"); /*DisplayPurityForFile(f_Radion260GeV, 200, 1500, 1); DisplayPurityForFile(f_Radion270GeV, 200, 1500, 1); @@ -106,6 +107,7 @@ void DisplayPurity() DisplayPurityForFile(f_Radion600GeV, 200, 1500, 1); DisplayPurityForFile(f_Radion650GeV, 200, 1500, 1); DisplayPurityForFile(f_Radion700GeV, 200, 1500, 1); - DisplayPurityForFile(f_Radion800GeV, 200, 1500, 1);*/ - DisplayPurityForFile(f_Radion900GeV, 200, 1500, 1); + DisplayPurityForFile(f_Radion800GeV, 200, 1500, 1); + DisplayPurityForFile(f_Radion900GeV, 200, 1500, 1);*/ + DisplayPurityForFile(f_Radion600GeV, 200, 1500, 10); } diff --git a/AnalysisCode/DisplayResolutionBias.cc b/AnalysisCode/DisplayResolutionBias.cc index 21b10f7..b6fc0c0 100644 --- a/AnalysisCode/DisplayResolutionBias.cc +++ b/AnalysisCode/DisplayResolutionBias.cc @@ -315,11 +315,11 @@ void Display_phi_ResolutionForFile(std::vector *v) TCanvas *c_jet_phi_res_vs_pT=new TCanvas("c_jet_phi_res_vs_pT", "c_jet_phi_res_vs_pT", 700, 700); h_jet_phi_res_vs_pT->Draw("colz"); - c_jet_phi_res_vs_pT->SaveAs("c_jet_phi_res_vs_pT.png"); + c_jet_phi_res_vs_pT->SaveAs("c_jet_phi_res_vs_pT.root"); TCanvas *c_RMS_jet_phi_res_vs_pT=new TCanvas("c_RMS_jet_phi_res_vs_pT", "c_RMS_jet_phi_res_vs_pT", 700, 700); h_RMS_jet_phi_res_vs_pT->Draw(); - c_RMS_jet_phi_res_vs_pT->SaveAs("c_RMS_jet_phi_res_vs_pT.png"); + c_RMS_jet_phi_res_vs_pT->SaveAs("c_RMS_jet_phi_res_vs_pT.root"); TCanvas *c_phi_Resolution_pT=new TCanvas("c_phi_Resolution_pT", "c_phi_Resolution_pT", 2100, 700); c_phi_Resolution_pT->Divide(3,1); @@ -329,7 +329,7 @@ void Display_phi_ResolutionForFile(std::vector *v) h_MEAN_jet_phi_res_vs_pT->Draw(); c_phi_Resolution_pT->cd(3); h_RMS_jet_phi_res_vs_pT->Draw(); - c_phi_Resolution_pT->SaveAs("c_phi_Resolution_pT.png"); + c_phi_Resolution_pT->SaveAs("c_phi_Resolution_pT.root"); } void DisplayResolutionBias(std::vector files) diff --git a/AnalysisCode/Display_SignalFits.cc b/AnalysisCode/Display_SignalFits.cc index 916bf96..4bf0f92 100644 --- a/AnalysisCode/Display_SignalFits.cc +++ b/AnalysisCode/Display_SignalFits.cc @@ -35,9 +35,15 @@ #include "RooFitResult.h" #include "RooCBShape.h" #include "RooGaussian.h" +std::string reg; +#include "CMS_lumi.C" +#include "tdrstyle.C" + +int iPeriod = 4; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV +int iPos =11; + int rebin=10; -ofstream outfile; std::string tostr(float t) { @@ -268,7 +274,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p if (mass=="270") { rangeLo=200., rangeHi=600.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 280., 320.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 200., 320.); sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 50.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 1.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 1.); @@ -292,16 +298,16 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p else if (mass=="400") { rangeLo=300., rangeHi=550.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 380., 420.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 15.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 370., 420.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 30.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } else if (mass=="450") { rangeLo=370., rangeHi=540.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 430., 470.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 25.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 410., 470.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 30.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -309,7 +315,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=420., rangeHi=600.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 460., 520.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 30.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 35); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -317,7 +323,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=450., rangeHi=650.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 510., 570.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 30.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 35.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -325,7 +331,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=490., rangeHi=700.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 560., 620.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 30.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 10., 35.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -333,7 +339,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=540., rangeHi=750.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 610., 670.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 35.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 40.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -341,15 +347,15 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=580., rangeHi=800.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 660., 720.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 35.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 40.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } else if (mass=="750") { rangeLo=580., rangeHi=830.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 720., 780.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 35.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 710., 780.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 20., 45.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -357,15 +363,15 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=650., rangeHi=900.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 760., 820.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 40.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 50.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } else if (mass=="900") { rangeLo=720., rangeHi=1000.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 870., 930.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 40.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 810., 930.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 55.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -373,7 +379,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=800., rangeHi=1150.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 950., 1050.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 40.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 25., 45.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -415,24 +421,24 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p else if (mass=="350") { rangeLo=320., rangeHi=450.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 345., 355.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 8., 15.); - sg_p2=new RooRealVar("sg_p2", "sg_p2", 0.3, 1.); - sg_p3=new RooRealVar("sg_p3", "sg_p3", 0.3, 1.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 340., 360.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 25); + sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 1.); + sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 1.); } else if (mass=="400") { rangeLo=360., rangeHi=490.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 380., 420.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 15.); + sg_p0=new RooRealVar("sg_p0", "sg_p0", 380., 430.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 30.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } else if (mass=="450") { - rangeLo=400., rangeHi=540.; - sg_p0=new RooRealVar("sg_p0", "sg_p0", 430., 480.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 20.); + rangeLo=400., rangeHi=500.; + sg_p0=new RooRealVar("sg_p0", "sg_p0", 440., 475.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 30.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -440,7 +446,7 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p { rangeLo=450., rangeHi=600.; sg_p0=new RooRealVar("sg_p0", "sg_p0", 480., 530.); - sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 25.); + sg_p1=new RooRealVar("sg_p1", "sg_p1", 5., 30.); sg_p2=new RooRealVar("sg_p2", "sg_p2", 0., 5.); sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 7.); } @@ -525,12 +531,13 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p sg_p3=new RooRealVar("sg_p3", "sg_p3", 0., 5.); } } - x=new RooRealVar("x", "m_{X} (_13TeV-madgraph)", rangeLo-100., rangeHi+100.); + x=new RooRealVar("x", "m_{X} (GeV)", rangeLo-100., rangeHi+100.); ExpGaussExp signal("signal", "Signal Prediction", *x, *sg_p0, *sg_p1, *sg_p2, *sg_p3); RooDataHist signalHistogram("signalHistogram", "Signal Histogram", RooArgList(*x), h); signal.fitTo(signalHistogram, RooFit::Range(rangeLo, rangeHi), RooFit::Save()); - params.sg_p0=sg_p0->getVal(); params.sg_p0_err=sg_p0->getError(); - params.sg_p1=sg_p1->getVal(); params.sg_p1_err=sg_p1->getError(); + std::cout << mass << std::endl; + params.sg_p0=sg_p0->getVal(); params.sg_p0_err=sg_p0->getError(); std::cout << sg_p0->getVal() << " +- " << sg_p0->getError() << std::endl; + params.sg_p1=sg_p1->getVal(); params.sg_p1_err=sg_p1->getError(); std::cout << sg_p1->getVal() << " +- " << sg_p1->getError() << std::endl; params.sg_p2=sg_p2->getVal(); params.sg_p2_err=sg_p2->getError(); params.sg_p3=sg_p3->getVal(); params.sg_p3_err=sg_p3->getError(); RooPlot *plot=x->frame(); @@ -556,10 +563,10 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p RooRealVar signal_p1("signal_p1", "signal_p1", sg_p1->getVal()); RooRealVar signal_p2("signal_p2", "signal_p2", sg_p2->getVal()); RooRealVar signal_p3("signal_p3", "signal_p3", sg_p3->getVal()); - ExpGaussExp signal_fixed("signal", "Signal Prediction Fixed", *x, signal_p0, signal_p1, signal_p2, signal_p3); + ExpGaussExp signal_fixed("signal_fixed", "Signal Prediction Fixed", *x, signal_p0, signal_p1, signal_p2, signal_p3); RooWorkspace *w=new RooWorkspace("HbbHbb"); w->import(signal_fixed); - w->SaveAs(("SignalFits/w_signal_"+mass+".root").c_str()); + w->SaveAs(("SignalFits"+reg+"/w_signal_"+mass+".root").c_str()); } return plot; } @@ -779,7 +786,7 @@ RooPlot* fitSignal_Gaussian(TH1F *h, std::string mass, int color, TLegend *leg, RooGaussian signal_fixed("signal", "Signal Prediction Fixed", *x, signal_p0, signal_p1); RooWorkspace *w=new RooWorkspace("HbbHbb"); w->import(signal_fixed); - w->SaveAs(("SignalFits/w_signal_Gaussian_"+mass+".root").c_str()); + w->SaveAs(("SignalFits"+reg+"/w_signal_Gaussian_"+mass+".root").c_str()); } return plot; } @@ -793,20 +800,31 @@ double lnN(double b, double a, double c) return err; } -int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegression", +int Display_SignalFits(std::string dir_preselection="PreselectedWithRegression", std::string _reg = "", std::string dir_selection="MMRSelection_chi2", std::string file_histograms="Histograms_GluGluToBulkGravitonToHHTo4B_M-", + int _mass= 350, bool focus=false) { - + reg = _reg; std::vector masses; + string _massstring; // string which will contain the result + ostringstream convert; // stream used for the conversion + convert << _mass; // insert the textual representation of 'Number' in the characters in the stream + _massstring = convert.str(); // set 'Result' to the contents of the stream + masses.push_back(_massstring); + writeExtraText = true; // if extra text + extraText = "Simulation"; // default extra text is "Preliminary" + lumi_13TeV = "35.8 fb^{-1}"; // default is "19.7 fb^{-1}" + // masses.push_back("260"); // masses.push_back("270"); - masses.push_back("350"); - //masses.push_back("400"); + /* masses.push_back("350"); + masses.push_back("400"); masses.push_back("450"); masses.push_back("500"); masses.push_back("550"); + masses.push_back("600"); masses.push_back("650"); masses.push_back("700"); masses.push_back("750"); @@ -814,15 +832,14 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio masses.push_back("900"); masses.push_back("1000"); masses.push_back("1200"); - + */ gROOT->SetStyle("Plain"); gStyle->SetOptStat(000000000); // gStyle->SetPalette(1); gSystem->Load("PDFs/ExpGaussExp_cxx.so"); - // Calculate nSignal events given production cross section, branching fractions and efficiency - double totalLumi=2318; // /pb - double prodXsec_1=1.; // pb + double totalLumi=35867; // /pb + double prodXsec_1=0.1; // pb // Interpolation Plots std::vector v_sg_p0, v_sg_p0_err; @@ -831,33 +848,12 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio std::vector v_sg_p3, v_sg_p3_err; std::vector v_zero; - // Write to an HTML File - outfile.open("SignalFits/index.html"); - outfile<<""<"<"<"<"<"<"< Signal with JEC, JER Systematic Uncertainties"<GetBinContent(1); std::cout<<"nSignal_init = "<Get("h_H1_mass")->Clone("h_H1_mass_JECp1"); TH1F *h_H2_mass_JECp1=(TH1F*)file_JECp1->Get("h_H2_mass")->Clone("h_H2_mass_JECp1"); TH1F *h_mX_SR_JECp1=(TH1F*)file_JECp1->Get("h_mX_SR")->Clone("h_mX_SR_JECp1"); @@ -946,7 +943,7 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio threeStatBoxes(h_H1_mass, h_H1_mass_JECp1, h_H1_mass_JECm1)->Draw(); - c_H1_mass->SaveAs(("SignalFits/c_H1_mass_"+masses.at(i)+".png").c_str()); + c_H1_mass->SaveAs(("SignalFits"+reg+"/c_H1_mass_"+masses.at(i)+".png").c_str()); TCanvas *c_H2_mass=new TCanvas("c_H2_mass", "c_H2_mass", 700, 700); h_H2_mass->SetLineWidth(2); @@ -958,7 +955,7 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio threeStatBoxes(h_H2_mass, h_H2_mass_JECp1, h_H2_mass_JECm1)->Draw(); - c_H2_mass->SaveAs(("SignalFits/c_H2_mass_"+masses.at(i)+".png").c_str()); + c_H2_mass->SaveAs(("SignalFits"+reg+"/c_H2_mass_"+masses.at(i)+".png").c_str()); TCanvas *c_mX_SR=new TCanvas(("c_mX_SR_"+masses.at(i)).c_str(), ("c_mX_SR_"+masses.at(i)).c_str(), 700, 700); h_mX_SR->SetTitle(("m_{X} Peak in Signal MC (m_{X}="+masses.at(i)+" _13TeV-madgraph); m_{X} (_13TeV-madgraph)").c_str()); @@ -994,11 +991,49 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio plot->Draw("same"); leg->SetFillColor(0); leg->Draw(); - c_mX_SR->SaveAs(("SignalFits/c_mX_SR_"+masses.at(i)+".png").c_str()); + c_mX_SR->SaveAs(("SignalFits"+reg+"/c_mX_SR_"+masses.at(i)+".png").c_str()); - TCanvas *c_mX_SR_KinFit=new TCanvas(("c_mX_SR_KinFit_"+masses.at(i)).c_str(), ("c_mX_SR_KinFit_"+masses.at(i)).c_str(), 700, 700); - h_mX_SR_KinFit->SetTitle(("m_{X} Peak in Signal MC (m_{X}="+masses.at(i)+" _13TeV-madgraph); m_{X} (_13TeV-madgraph)").c_str()); - h_mX_SR_KinFit->Rebin(rebin); + + double xPad = 0.3; + TCanvas *c_mX_SR_KinFit=new TCanvas(("c_mX_SR_KinFit_"+masses.at(i)).c_str(), ("c_mX_SR_KinFit_"+masses.at(i)).c_str(), 700*(1.-xPad), 700); + TPad *p_1=new TPad("p_1", "p_1", 0, xPad, 1, 1); + p_1->SetFillStyle(4000); + p_1->SetFrameFillColor(0); + p_1->SetBottomMargin(0.02); + p_1->SetTopMargin(0.06); + + TPad* p_2 = new TPad("p_2", "p_2",0,0,1,xPad); + p_2->SetBottomMargin((1.-xPad)/xPad*0.13); + p_2->SetTopMargin(0.03); + p_2->SetFillColor(0); + p_2->SetBorderMode(0); + p_2->SetBorderSize(2); + p_2->SetFrameBorderMode(0); + p_2->SetFrameBorderMode(0); + + p_1->Draw(); + p_2->Draw(); + p_1->cd(); + + + h_mX_SR_KinFit->SetTitle(("m_{X} Peak in Signal MC (m_{X}="+masses.at(i)+" GeV); m_{X} (GeV)").c_str()); + h_mX_SR_KinFit->Rebin(rebin); + + leg = new TLegend(0.75,0.65,0.55,0.9,NULL,"brNDC"); + leg->SetBorderSize(0); + leg->SetTextSize(0.035); + leg->SetTextFont(42); + leg->SetLineColor(1); + leg->SetLineStyle(1); + leg->SetLineWidth(2); + leg->SetFillColor(0); + leg->SetFillStyle(0); + leg->SetTextFont(42); + + + leg->AddEntry(h_mX_SR_KinFit, "Signal MC"); + + h_mX_SR_JECp1_KinFit->Rebin(rebin); h_mX_SR_JECm1_KinFit->Rebin(rebin); std::cout<<" asd "<Rebin(rebin); + h_mX_SR_Trigp1_KinFit->SetLineColor(kPink+1); + h_mX_SR_Trigm1_KinFit->SetLineColor(kPink+3); + h_mX_SR_Trigp1_KinFit->GetXaxis()->SetRangeUser(0, 1200); + h_mX_SR_Trigm1_KinFit->GetXaxis()->SetRangeUser(0, 1200); + */ h_mX_SR_bTagDown_KinFit->Rebin(rebin); + h_mX_SR_bTagUp_KinFit->Rebin(rebin); + h_mX_SR_bTagDown_KinFit->SetLineColor(kGreen+1); + h_mX_SR_bTagUp_KinFit->SetLineColor(kGreen+3); + h_mX_SR_bTagDown_KinFit->GetXaxis()->SetRangeUser(0, 1200); + h_mX_SR_bTagUp_KinFit->GetXaxis()->SetRangeUser(0, 1200); + + + Params par_KinFit, par_JECp1_KinFit, par_JECm1_KinFit; RooPlot *plot_KinFit=fitSignal(h_mX_SR_KinFit, masses.at(i), kBlack, leg, par_KinFit, true); + std::cout<<" fit done " <SetTitle(""); + //plot_KinFit->GetYaxis()->SetRangeUser(0.01, 100); + + plot_KinFit->GetXaxis()->SetRangeUser(_mass-100, _mass+150); + plot_KinFit->GetXaxis()->SetLabelOffset(0.03); + plot_KinFit->GetXaxis()->SetNdivisions(505); + plot_KinFit->SetMaximum(plot_KinFit->GetMaximum()*1.2); + plot_KinFit->Draw(); v_sg_p0.push_back(par_KinFit.sg_p0); v_sg_p0_err.push_back(par_KinFit.sg_p0_err); v_sg_p1.push_back(par_KinFit.sg_p1); v_sg_p1_err.push_back(par_KinFit.sg_p1_err); v_sg_p2.push_back(par_KinFit.sg_p2); v_sg_p2_err.push_back(par_KinFit.sg_p2_err); @@ -1042,286 +1085,255 @@ int Display_SignalFits(std::string dir_preselection="PreselectedWithoutRegressio RooPlot *plot_JERp1_KinFit, *plot_JERm1_KinFit; Params par_Trigp1_KinFit, par_Trigm1_KinFit; RooPlot *plot_Trigp1_KinFit, *plot_Trigm1_KinFit; - Params par_bTagDown_KinFit, par_bTagUp_KinFit; - RooPlot *plot_bTagDown_KinFit, *plot_bTagUp_KinFit; + Params par_bTagDown_KinFit, par_bTagUp_KinFit; + RooPlot *plot_bTagDown_KinFit, *plot_bTagUp_KinFit; if (!focus) { - leg->AddEntry(h_mX_SR_JECp1_KinFit, "JEC +1 #sigma"); - leg->AddEntry(h_mX_SR_JECm1_KinFit, "JEC -1 #sigma"); + leg->AddEntry(h_mX_SR_JECp1_KinFit, "JEC +1 #sigma"); + leg->AddEntry(h_mX_SR_JECm1_KinFit, "JEC -1 #sigma"); - plot_JECp1_KinFit=fitSignal(h_mX_SR_JECp1_KinFit, masses.at(i), kRed, leg, par_JECp1_KinFit, true); - plot_JECm1_KinFit=fitSignal(h_mX_SR_JECm1_KinFit, masses.at(i), kRed+2, leg, par_JECm1_KinFit, true); + plot_JECp1_KinFit=fitSignal(h_mX_SR_JECp1_KinFit, masses.at(i), kRed, leg, par_JECp1_KinFit, true); + plot_JECm1_KinFit=fitSignal(h_mX_SR_JECm1_KinFit, masses.at(i), kRed+2, leg, par_JECm1_KinFit, true); leg->AddEntry(h_mX_SR_JERp1_KinFit, "JER +1 #sigma"); leg->AddEntry(h_mX_SR_JERm1_KinFit, "JER -1 #sigma"); - plot_JERp1_KinFit=fitSignal(h_mX_SR_JERp1_KinFit, masses.at(i), kAzure+1, leg, par_JERp1_KinFit, true); + plot_JERp1_KinFit=fitSignal(h_mX_SR_JERp1_KinFit, masses.at(i), kAzure+1, leg, par_JERp1_KinFit, true); plot_JERm1_KinFit=fitSignal(h_mX_SR_JERm1_KinFit, masses.at(i), kBlue+1, leg, par_JERm1_KinFit, true); - /* leg->AddEntry(h_mX_SR_Trigp1_KinFit, "Trig +1 #sigma"); - leg->AddEntry(h_mX_SR_Trigm1_KinFit, "Trig -1 #sigma"); + /* leg->AddEntry(h_mX_SR_Trigp1_KinFit, "Trig +1 #sigma"); + leg->AddEntry(h_mX_SR_Trigm1_KinFit, "Trig -1 #sigma"); - plot_Trigp1_KinFit=fitSignal(h_mX_SR_Trigp1_KinFit, masses.at(i), kPink+1, leg, par_Trigp1_KinFit, true); - plot_Trigm1_KinFit=fitSignal(h_mX_SR_Trigm1_KinFit, masses.at(i), kPink+3, leg, par_Trigm1_KinFit, true); -*/ - leg->AddEntry(h_mX_SR_bTagDown_KinFit, "bTag +1 #sigma"); - leg->AddEntry(h_mX_SR_bTagUp_KinFit, "bTag -1 #sigma"); + plot_Trigp1_KinFit=fitSignal(h_mX_SR_Trigp1_KinFit, masses.at(i), kPink+1, leg, par_Trigp1_KinFit, true); + plot_Trigm1_KinFit=fitSignal(h_mX_SR_Trigm1_KinFit, masses.at(i), kPink+3, leg, par_Trigm1_KinFit, true); - plot_bTagDown_KinFit=fitSignal(h_mX_SR_bTagDown_KinFit, masses.at(i), kGreen+1, leg, par_bTagDown_KinFit, true); - plot_bTagUp_KinFit=fitSignal(h_mX_SR_bTagUp_KinFit, masses.at(i), kGreen+3, leg, par_bTagUp_KinFit, true); + */ leg->AddEntry(h_mX_SR_bTagDown_KinFit, "bTag +1 #sigma"); + leg->AddEntry(h_mX_SR_bTagUp_KinFit, "bTag -1 #sigma"); - } - plot_KinFit->SetMaximum(plot_KinFit->GetMaximum()*1.2); + plot_bTagDown_KinFit=fitSignal(h_mX_SR_bTagDown_KinFit, masses.at(i), kGreen+1, leg, par_bTagDown_KinFit, true); + plot_bTagUp_KinFit=fitSignal(h_mX_SR_bTagUp_KinFit, masses.at(i), kGreen+3, leg, par_bTagUp_KinFit, true); + } + plot_KinFit->SetMaximum(plot_KinFit->GetMaximum()*1.2); plot_KinFit->Draw(); if (!focus) { - plot_JECp1_KinFit->Draw("same"); - plot_JECm1_KinFit->Draw("same"); - plot_JERp1_KinFit->Draw("same"); - plot_JERm1_KinFit->Draw("same"); -// plot_Trigp1_KinFit->Draw("same"); -// plot_Trigm1_KinFit->Draw("same"); - plot_bTagUp_KinFit->Draw("same"); - plot_bTagDown_KinFit->Draw("same"); + plot_JECp1_KinFit->Draw("same"); + plot_JECm1_KinFit->Draw("same"); + plot_JERp1_KinFit->Draw("same"); + plot_JERm1_KinFit->Draw("same"); + // plot_Trigp1_KinFit->Draw("same"); + // plot_Trigm1_KinFit->Draw("same"); + plot_bTagUp_KinFit->Draw("same"); + plot_bTagDown_KinFit->Draw("same"); } plot_KinFit->Draw("same"); leg->SetFillColor(0); leg->Draw(); - c_mX_SR_KinFit->SaveAs(("SignalFits/c_mX_SR_KinFit_"+masses.at(i)+".png").c_str()); - - outfile<<"

"< mX = "<"<"<"<"<"<"<"<"<"<"<
"<Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.
"<"<"<"<"<"<"<
"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<
"<With Kin-Fit. Fitted to an Exp-Gauss-Exp function.
"<"<"<"<"<"<"<cd(); + RooHist* hpull; + hpull = plot_KinFit->pullHist(); + RooRealVar* x=new RooRealVar("x", "m_{X} (GeV)", 0, 1200); + + RooPlot* frameP = x->frame() ; + frameP->SetTitle(""); + frameP->GetXaxis()->SetRangeUser(_mass-100, _mass+150); + + frameP->addPlotable(hpull,"P"); + frameP->GetYaxis()->SetRangeUser(-5,5); + frameP->GetYaxis()->SetNdivisions(505); + frameP->GetXaxis()->SetNdivisions(505); + frameP->GetYaxis()->SetTitle("Pull"); + + frameP->GetYaxis()->SetTitleSize((1.-xPad)/xPad*0.06); + frameP->GetYaxis()->SetTitleOffset(1.2/((1.-xPad)/xPad)); + frameP->GetXaxis()->SetTitleSize((1.-xPad)/xPad*0.06); + frameP->GetXaxis()->SetLabelSize((1.-xPad)/xPad*0.05); + frameP->GetYaxis()->SetLabelSize((1.-xPad)/xPad*0.05); + + + frameP->Draw(); + + + c_mX_SR_KinFit->SaveAs(("SignalFits"+reg+"/c_mX_SR_KinFit_"+masses.at(i)+".png").c_str()); + + std::cout<<" === Baseline plot ===
"<
"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<GetSumOfWeights(), h_mX_SR_JECp1_KinFit->GetSumOfWeights(), h_mX_SR_JECm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_JERp1_KinFit->GetSumOfWeights(), h_mX_SR_JERm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_Trigp1_KinFit->GetSumOfWeights(), h_mX_SR_Trigm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_bTagUp_KinFit->GetSumOfWeights(), h_mX_SR_bTagDown_KinFit->GetSumOfWeights())<<" -"<<"
"<"<"<"<"<"<"<GetSumOfWeights(), h_mX_SR_JECp1_KinFit->GetSumOfWeights(), h_mX_SR_JECm1_KinFit->GetSumOfWeights())<<" -"<<""<GetSumOfWeights(), h_mX_SR_JERp1_KinFit->GetSumOfWeights(), h_mX_SR_JERm1_KinFit->GetSumOfWeights())<<" -"<<""<GetSumOfWeights(), h_mX_SR_Trigp1_KinFit->GetSumOfWeights(), h_mX_SR_Trigm1_KinFit->GetSumOfWeights())<<" -"<<""<GetSumOfWeights(), h_mX_SR_bTagUp_KinFit->GetSumOfWeights(), h_mX_SR_bTagDown_KinFit->GetSumOfWeights())<<" -"<<""<"<"<Close(); - file_JECp1->Close(); - file_JECm1->Close(); +*/ +} - file_JERp1->Close(); - file_JERm1->Close(); - //file_Trigp1->Close(); - //file_Trigm1->Close(); +// Close all files +file->Close(); +file_JECp1->Close(); +file_JECm1->Close(); - } +file_JERp1->Close(); +file_JERm1->Close(); +//file_Trigp1->Close(); +//file_Trigm1->Close(); + +} + +/* + std::vector masses_d; + for (unsigned int i=0; iSetTitle("Signal Mean Interpolation; m_{X} (_13TeV-madgraph); Signal Mean"); +g_sg_p0->Draw("AC*"); +// g_sg_p0->Fit("pol1"); +c_sg_p0->SaveAs("SignalSystematics/c_sg_p0.png"); + +TCanvas *c_sg_p1=new TCanvas("c_sg_p1", "c_sg_p1", 700, 700); +g_sg_p1->SetTitle("Signal RMS Interpolation; m_{X} (_13TeV-madgraph); Signal RMS"); +g_sg_p1->Draw("AC*"); +// g_sg_p1->Fit("pol1"); +c_sg_p1->SaveAs("SignalSystematics/c_sg_p1.png"); + +TCanvas *c_sg_p2=new TCanvas("c_sg_p2", "c_sg_p2", 700, 700); +g_sg_p2->SetTitle("Signal Right Exponential Interpolation; m_{X} (_13TeV-madgraph); Signal k_{right}"); +g_sg_p2->Draw("AC*"); +// g_sg_p2->Fit("pol1"); +c_sg_p2->SaveAs("SignalSystematics/c_sg_p2.png"); + +TCanvas *c_sg_p3=new TCanvas("c_sg_p3", "c_sg_p3", 700, 700); +g_sg_p3->SetTitle("Signal Left Exponential Interpolation; m_{X} (_13TeV-madgraph); Signal k_{left}"); +g_sg_p3->Draw("AC*"); +// g_sg_p3->Fit("pol1"); +c_sg_p3->SaveAs("SignalSystematics/c_sg_p3.png"); + +std::cout<<"

Signal Mean Interpolation Plot

"<
"< Signal RMS Interpolation Plot "<
"< Signal Right Exponential Interpolation Plot "<
"< Signal Left Exponential Interpolation Plot "<
"<"<"< masses_d; - for (unsigned int i=0; iSetTitle("Signal Mean Interpolation; m_{X} (_13TeV-madgraph); Signal Mean"); - g_sg_p0->Draw("AC*"); - // g_sg_p0->Fit("pol1"); - c_sg_p0->SaveAs("SignalSystematics/c_sg_p0.png"); - - TCanvas *c_sg_p1=new TCanvas("c_sg_p1", "c_sg_p1", 700, 700); - g_sg_p1->SetTitle("Signal RMS Interpolation; m_{X} (_13TeV-madgraph); Signal RMS"); - g_sg_p1->Draw("AC*"); - // g_sg_p1->Fit("pol1"); - c_sg_p1->SaveAs("SignalSystematics/c_sg_p1.png"); - - TCanvas *c_sg_p2=new TCanvas("c_sg_p2", "c_sg_p2", 700, 700); - g_sg_p2->SetTitle("Signal Right Exponential Interpolation; m_{X} (_13TeV-madgraph); Signal k_{right}"); - g_sg_p2->Draw("AC*"); - // g_sg_p2->Fit("pol1"); - c_sg_p2->SaveAs("SignalSystematics/c_sg_p2.png"); - - TCanvas *c_sg_p3=new TCanvas("c_sg_p3", "c_sg_p3", 700, 700); - g_sg_p3->SetTitle("Signal Left Exponential Interpolation; m_{X} (_13TeV-madgraph); Signal k_{left}"); - g_sg_p3->Draw("AC*"); - // g_sg_p3->Fit("pol1"); - c_sg_p3->SaveAs("SignalSystematics/c_sg_p3.png"); - - outfile<<"

Signal Mean Interpolation Plot

"<

"< Signal RMS Interpolation Plot "<

"< Signal Right Exponential Interpolation Plot "<

"< Signal Left Exponential Interpolation Plot "<

"<"<"<getVal(); params.sg_p0_err=sg_p0->getError(); - params.sg_p1=sg_p1->getVal(); params.sg_p1_err=sg_p1->getError(); + if (kinFit) signal.fitTo(signalHistogram, RooFit::Range(rangeLo, rangeHi), RooFit::Save()); + else signal.fitTo(signalHistogram, RooFit::Range(rangeLo-50, rangeHi), RooFit::Save()); +std::cout << mass << std::endl; + params.sg_p0=sg_p0->getVal(); params.sg_p0_err=sg_p0->getError(); std::cout << sg_p0->getVal() << " +- " << sg_p0->getError() << std::endl; + params.sg_p1=sg_p1->getVal(); params.sg_p1_err=sg_p1->getError(); std::cout << sg_p1->getVal() << " +- " << sg_p1->getError() << std::endl; params.sg_p2=sg_p2->getVal(); params.sg_p2_err=sg_p2->getError(); params.sg_p3=sg_p3->getVal(); params.sg_p3_err=sg_p3->getError(); params.sg_p4=sg_p4->getVal(); params.sg_p4_err=sg_p4->getError(); @@ -485,8 +473,8 @@ RooPlot* fitSignal(TH1F *h, std::string mass, int color, TLegend *leg, Params &p RooWorkspace *w=new RooWorkspace("HbbHbb"); w->import(signal_fixed); - if (!kinFit) w->SaveAs(("SignalFits_LMR/w_signal_"+mass+".root").c_str()); - if (kinFit) w->SaveAs(("SignalFits_LMR/w_signal_"+mass+".root").c_str()); + if (!kinFit) w->SaveAs(("SignalFits_LMR"+reg+"/w_signal_"+mass+".root").c_str()); + if (kinFit) w->SaveAs(("SignalFits_LMR"+reg+"/w_signal_"+mass+".root").c_str()); } return plot; } @@ -706,8 +694,8 @@ RooPlot* fitSignal_Gaussian(TH1F *h, std::string mass, int color, TLegend *leg, RooGaussian signal_fixed("signal", "Signal Prediction Fixed", *x, signal_p0, signal_p1); RooWorkspace *w=new RooWorkspace("HbbHbb"); w->import(signal_fixed); - if (!kinFit) w->SaveAs(("SignalFits_LMR/w_signal_Gaussian_"+mass+".root").c_str()); - if (kinFit) w->SaveAs(("SignalFits_LMR/w_signal_Gaussian_"+mass+".root").c_str()); + if (!kinFit) w->SaveAs(("SignalFits_LMR"+reg+"/w_signal_Gaussian_"+mass+".root").c_str()); + if (kinFit) w->SaveAs(("SignalFits_LMR"+reg+"/w_signal_Gaussian_"+mass+".root").c_str()); } return plot; } @@ -721,29 +709,38 @@ double lnN(double b, double a, double c) return err; } -int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegression",//edWithoutRegression", +int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegression", std::string _reg = "reg", std::string dir_selection="LMRSelection_chi2", std::string file_histograms="Histograms_GluGluToBulkGravitonToHHTo4B_M-", - bool focus=false) + int _mass=260, + bool focus=false)//false) { - - std::vector masses; - masses.push_back("260"); - masses.push_back("270"); + reg = _reg; + focus = false ; + std::vector masses; + string _massstring; // string which will contain the result + ostringstream convert; // stream used for the conversion + convert << _mass; // insert the textual representation of 'Number' in the characters in the stream + _massstring = convert.str(); // set 'Result' to the contents of the stream + masses.push_back(_massstring); + writeExtraText = true; // if extra text + extraText = "Simulation"; // default extra text is "Preliminary" + lumi_13TeV = "35.9 fb^{-1}"; // default is "19.7 fb^{-1}" +/* masses.push_back("260"); +// masses.push_back("270"); masses.push_back("300"); masses.push_back("350"); masses.push_back("400"); masses.push_back("450"); masses.push_back("500"); - masses.push_back("550"); + */ // masses.push_back("550"); //masses.push_back("600"); gROOT->SetStyle("Plain"); gStyle->SetOptStat(000000000); - gSystem->Load("PDFs/ExpGaussExp_cxx.so"); // Calculate nSignal events given production cross section, branching fractions and efficiency - double totalLumi=2318; // /pb + double totalLumi=35876; // /pb double prodXsec_1=1.; // pb // Interpolation Plots @@ -754,27 +751,6 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre std::vector v_sg_p4, v_sg_p4_err; std::vector v_zero; - // Write to an HTML File - outfile.open("SignalFits_LMR/index.html"); - outfile<<""<"<"<"<"<"<"< Signal with JEC, JER Systematic Uncertainties"<SaveAs(("SignalFits_LMR"+reg+"/c_H1_mass_"+masses.at(i)+".png").c_str()); TCanvas *c_H2_mass=new TCanvas("c_H2_mass", "c_H2_mass", 700, 700); @@ -882,7 +858,7 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre threeStatBoxes(h_H2_mass, h_H2_mass_JECp1, h_H2_mass_JECm1)->Draw(); - c_H2_mass->SaveAs(("SignalFits_LMR/c_H2_mass_"+masses.at(i)+".png").c_str()); + c_H2_mass->SaveAs(("SignalFits_LMR"+reg+"/c_H2_mass_"+masses.at(i)+".png").c_str()); TCanvas *c_mX_SR=new TCanvas(("c_mX_SR_"+masses.at(i)).c_str(), ("c_mX_SR_"+masses.at(i)).c_str(), 700, 700); std::cout<<" here "<GetEntries()<AddEntry(h_mX_SR_JECp1, "JEC +1 #sigma"); leg->AddEntry(h_mX_SR_JECm1, "JEC -1 #sigma"); @@ -918,10 +895,49 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre plot->Draw("same"); leg->SetFillColor(0); leg->Draw(); - c_mX_SR->SaveAs(("SignalFits_LMR/c_mX_SR_"+masses.at(i)+".png").c_str()); + c_mX_SR->SaveAs(("SignalFits_LMR"+reg+"/c_mX_SR_"+masses.at(i)+".png").c_str()); + + + + double xPad = 0.3; + TCanvas *c_mX_SR_KinFit=new TCanvas(("c_mX_SR_KinFit_"+masses.at(i)).c_str(), ("c_mX_SR_KinFit_"+masses.at(i)).c_str(), 700*(1.-xPad), 700); + TPad *p_1=new TPad("p_1", "p_1", 0, xPad, 1, 1); + p_1->SetFillStyle(4000); + p_1->SetFrameFillColor(0); + p_1->SetBottomMargin(0.02); + p_1->SetTopMargin(0.06); + + TPad* p_2 = new TPad("p_2", "p_2",0,0,1,xPad); + p_2->SetBottomMargin((1.-xPad)/xPad*0.13); + p_2->SetTopMargin(0.03); + p_2->SetFillColor(0); + p_2->SetBorderMode(0); + p_2->SetBorderSize(2); + p_2->SetFrameBorderMode(0); + p_2->SetFrameBorderMode(0); + + p_1->Draw(); + p_2->Draw(); + p_1->cd(); + + + h_mX_SR_KinFit->SetTitle(("m_{X} Peak in Signal MC (m_{X}="+masses.at(i)+" GeV); m_{X} (GeV)").c_str()); + + leg = new TLegend(0.75,0.65,0.55,0.9,NULL,"brNDC"); + leg->SetBorderSize(0); + leg->SetTextSize(0.035); + leg->SetTextFont(42); + leg->SetLineColor(1); + leg->SetLineStyle(1); + leg->SetLineWidth(2); + leg->SetFillColor(0); + leg->SetFillStyle(0); + leg->SetTextFont(42); + + + leg->AddEntry(h_mX_SR_KinFit, "Signal MC"); + - TCanvas *c_mX_SR_KinFit=new TCanvas(("c_mX_SR_KinFit_"+masses.at(i)).c_str(), ("c_mX_SR_KinFit_"+masses.at(i)).c_str(), 700, 700); - h_mX_SR_KinFit->SetTitle(("m_{X} Peak in Signal MC (m_{X}="+masses.at(i)+" GeV); m_{X} (GeV)").c_str()); h_mX_SR_KinFit->Rebin(rebin); h_mX_SR_JECp1_KinFit->Rebin(rebin); h_mX_SR_JECm1_KinFit->Rebin(rebin); @@ -951,8 +967,8 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre - leg=new TLegend(0.7, 0.5, 0.9, 0.9); - leg->AddEntry(h_mX_SR_KinFit, "Baseline"); + // leg=new TLegend(0.7, 0.5, 0.9, 0.9); + //leg->AddEntry(h_mX_SR_KinFit, "Baseline"); Params par_KinFit, par_JECp1_KinFit, par_JECm1_KinFit; RooPlot *plot_KinFit=fitSignal(h_mX_SR_KinFit, masses.at(i), kBlack, leg, par_KinFit, true); v_sg_p0.push_back(par_KinFit.sg_p0); v_sg_p0_err.push_back(par_KinFit.sg_p0_err); @@ -993,7 +1009,13 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre plot_bTagUp_KinFit=fitSignal(h_mX_SR_bTagUp_KinFit, masses.at(i), kGreen+3, leg, par_bTagUp_KinFit, true); } std::cout<<" fit done " <SetMaximum(plot_KinFit->GetMaximum()*1.2); + plot_KinFit->SetTitle(""); + plot_KinFit->GetXaxis()->SetRangeUser(_mass-100, _mass+150); + plot_KinFit->GetXaxis()->SetLabelOffset(0.03); + plot_KinFit->GetXaxis()->SetNdivisions(505); + plot_KinFit->SetMaximum(plot_KinFit->GetMaximum()*1.2); + plot_KinFit->Draw(); + plot_KinFit->Draw(); if (!focus) { @@ -1009,132 +1031,140 @@ int Display_SignalFits_LMR(std::string dir_preselection="PreselectedWithoutRegre plot_KinFit->Draw("same"); leg->SetFillColor(0); leg->Draw(); - c_mX_SR_KinFit->SaveAs(("SignalFits_LMR/c_mX_SR_KinFit_"+masses.at(i)+".png").c_str()); - - outfile<<"

"< mX = "<"<"<"<"<"<"<"<"<"<"<
"<Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.
"<"<"<"<"<"<"<"<
"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<cd(); + RooHist* hpull; + hpull = plot_KinFit->pullHist(); + RooRealVar* x=new RooRealVar("x", "m_{X} (GeV)", 0, 1200); + + RooPlot* frameP = x->frame() ; + frameP->SetTitle(""); + frameP->GetXaxis()->SetRangeUser(_mass-100, _mass+150); + + frameP->addPlotable(hpull,"P"); + frameP->GetYaxis()->SetRangeUser(-5,5); + frameP->GetYaxis()->SetNdivisions(505); + frameP->GetXaxis()->SetNdivisions(505); + frameP->GetYaxis()->SetTitle("Pull"); + + frameP->GetYaxis()->SetTitleSize((1.-xPad)/xPad*0.06); + frameP->GetYaxis()->SetTitleOffset(1.2/((1.-xPad)/xPad)); + frameP->GetXaxis()->SetTitleSize((1.-xPad)/xPad*0.06); + frameP->GetXaxis()->SetLabelSize((1.-xPad)/xPad*0.05); + frameP->GetYaxis()->SetLabelSize((1.-xPad)/xPad*0.05); + + + frameP->Draw(); + std::cout<<" nominal "<GetSumOfWeights()<<" "<GetSumOfWeights()<<" "<GetSumOfWeights()<<" "<GetSumOfWeights()<<" "<SaveAs(("SignalFits_LMR"+reg+"/c_mX_SR_KinFit_"+masses.at(i)+".png").c_str()); + + /*std::cout<<" norm = "<GetSumOfWeights()*totalLumi*prodXsec_1/nSignal_init<<" "<"<"<
"<With Kin-Fit. Fitted to an Exp-Gauss-Exp function.
"<"<"<"<"<"<"<"<"<
"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<"<GetSumOfWeights(), h_mX_SR_JECp1_KinFit->GetSumOfWeights(), h_mX_SR_JECm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_JERp1_KinFit->GetSumOfWeights(), h_mX_SR_JERm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_Trigp1_KinFit->GetSumOfWeights(), h_mX_SR_Trigm1_KinFit->GetSumOfWeights())<<" -"<<"
"<GetSumOfWeights(), h_mX_SR_bTagUp_KinFit->GetSumOfWeights(), h_mX_SR_bTagDown_KinFit->GetSumOfWeights())<<" -"<<"
"<"<"<"<"<"<GetSumOfWeights(), h_mX_SR_JECp1_KinFit->GetSumOfWeights(), h_mX_SR_JECm1_KinFit->GetSumOfWeights())<<" -"<<" "<GetSumOfWeights(), h_mX_SR_JERp1_KinFit->GetSumOfWeights(), h_mX_SR_JERm1_KinFit->GetSumOfWeights())<<" -"<<" "<GetSumOfWeights(), h_mX_SR_Trigp1_KinFit->GetSumOfWeights(), h_mX_SR_Trigm1_KinFit->GetSumOfWeights())<<" -"<<" "<GetSumOfWeights(), h_mX_SR_bTagUp_KinFit->GetSumOfWeights(), h_mX_SR_bTagDown_KinFit->GetSumOfWeights())<<" -"<<" "<"<"<"<"<Close(); @@ -1252,16 +1273,16 @@ g_sg_p3->Draw("AC*"); // g_sg_p3->Fit("pol1"); c_sg_p3->SaveAs("SignalSystematics/c_sg_p3.png"); -outfile<<"

Signal Mean Interpolation Plot

"<

"< Signal RMS Interpolation Plot "<

"< Signal Right Exponential Interpolation Plot "<

"< Signal Left Exponential Interpolation Plot "<

"<"<"< Signal Mean Interpolation Plot "<
"< Signal RMS Interpolation Plot "<
"< Signal Right Exponential Interpolation Plot "<
"< Signal Left Exponential Interpolation Plot "<
"<"<"< +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "TDRStyle.h" + +bool first, low; + +std::string itoa(int i) +{ + char res[4]; + sprintf(res, "%d", i); + std::string ret(res); + return ret; +} + +std::string ftoa(double i) +{ + char res[10]; + sprintf(res, "%2.1f", i); + std::string ret(res); + return ret; +} + +// Display histogram for file +void DisplayHistogram_mH_forFile(TFile *file, std::string histogramName, int color, TLegend *leg, std::string name) +{ + TH1F *h=(TH1F*)file->Get(histogramName.c_str()); + h->Scale(1./h->GetSumOfWeights()); + h->SetLineColor(color); + h->SetLineWidth(2); + h->Rebin(2); + h->GetXaxis()->SetRangeUser(50, 250); + if (first) + { + h->SetMaximum(h->GetMaximum()*1.2); + h->SetMinimum(0); + h->GetYaxis()->SetTitleOffset(1.6); + h->Draw(""); + first=false; + } + h->Draw("same"); + TF1 *f; + if( low ) f=new TF1("f", "gaus", h->GetMean()-(1.5*h->GetRMS()), h->GetMean()+(1.5*h->GetRMS())); + else f=new TF1("f", "gaus", h->GetMean()-(1.*h->GetRMS()), h->GetMean()+(1.25*h->GetRMS())); + f->SetParLimits(1, h->GetMean()-(3*h->GetRMS()), h->GetMean()+(3*h->GetRMS())); + f->SetParLimits(2, 0, 3*h->GetRMS()); + f->SetLineColor(color); + h->Fit(f, "R"); + leg->AddEntry(h, (name+" #bar{x}="+ftoa(f->GetParameter(1))+", #sigma="+ftoa(f->GetParameter(2))).c_str()); +} + +void DisplaymH_regressed() +{ + std::vector v_files; + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + + std::vector v_files_regressed; + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); + + std::vector mean_gen={260,300,400,500, 600, 700, 800, 1000, 1400}; + + gROOT->SetStyle("Plain"); + TStyle *myStyle=setTDRStyle(); + myStyle->cd(); + myStyle->SetOptTitle(0); + myStyle->SetOptStat(0); + + // Plot mH1 + for (int i=v_files.size()-1; i>=0; --i) + { + TCanvas *c_H1_mass=new TCanvas("c_H1_mass", "c_H1_mass", 700, 700); + TLegend *leg=new TLegend(0.5, 0.7, 0.89, 0.89); + leg->SetLineColor(0); + leg->SetFillColor(0); + leg->AddEntry((TObject*)0, ("m_{X} = "+itoa(mean_gen.at(i))+" GeV").c_str(), ""); + first=true; + if( mean_gen.at(i) <375 ) low = true; + else low = false; + DisplayHistogram_mH_forFile(v_files.at(i), "h_H1_mass", kBlue, leg, "AK4"); + first=false; + //DisplayHistogram_mH_forFile(v_files.at(i), "h_H1_mass_biasCorrected", kRed, leg, "BiasCorr"); + DisplayHistogram_mH_forFile(v_files_regressed.at(i), "h_H1_mass", kGreen, leg, "Regressed"); + leg->Draw(); + c_H1_mass->SaveAs(("c_H1_mass_"+itoa(mean_gen.at(i))+".png").c_str()); + delete c_H1_mass; + } + +} + + diff --git a/AnalysisCode/DisplaymH_regressed_biasCorrected.cc b/AnalysisCode/DisplaymH_regressed_biasCorrected.cc index 97f3b9f..005a0c4 100644 --- a/AnalysisCode/DisplaymH_regressed_biasCorrected.cc +++ b/AnalysisCode/DisplaymH_regressed_biasCorrected.cc @@ -60,22 +60,28 @@ void DisplayHistogram_mH_forFile(TFile *file, std::string histogramName, int col void DisplaymH_regressed_biasCorrected() { std::vector v_files; - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton300GeV.root")); - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton400GeV.root")); - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton600GeV.root")); - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton800GeV.root")); - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton1000GeV.root")); - v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection/Histograms_Graviton1200GeV.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + v_files.push_back(new TFile("PreselectedWithoutRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); std::vector v_files_regressed; - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton300GeV_regressed.root")); - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton400GeV_regressed.root")); - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton600GeV_regressed.root")); - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton800GeV_regressed.root")); - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton1000GeV_regressed.root")); - v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection/Histograms_Graviton1200GeV_regressed.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/LMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph.root")); + v_files_regressed.push_back(new TFile("PreselectedWithRegression/MMRSelection_chi2/Histograms_BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph.root")); - std::vector mean_gen={300, 400, 600, 800, 1000, 1200}; + std::vector mean_gen={260,300,400,500, 600, 700, 800, 1000, 1400}; gROOT->SetStyle("Plain"); TStyle *myStyle=setTDRStyle(); diff --git a/AnalysisCode/DisplaymHmX.cc b/AnalysisCode/DisplaymHmX.cc index 5d5bd97..c4dd5c9 100644 --- a/AnalysisCode/DisplaymHmX.cc +++ b/AnalysisCode/DisplaymHmX.cc @@ -29,6 +29,7 @@ double marg=19; bool signalpoints=true; bool data=false; bool ttbar=false; +bool blind=true; //!!! bool first; @@ -59,6 +60,39 @@ void DisplayHistogram_mH_forFile(TFile *file, std::string histogramName, int col h->Draw("hist same"); } +void Plot_Purity_forFile(TFile *file, TString smass = "600", int mass = 600 ) +{ + std::vector v_colors = {kRed+1, kRed+3, kGreen+2, kOrange+2, kAzure+1, kAzure+3, kPink+2};//, kGray+2,kBlue+1}; + std::vector v_leg = { "Purity = 4", "Purity = 3", "Purity = 2", "Purity = 1", "Purity = 0", "Purity = -1" }; + TCanvas c( "c", "c"+smass ); c.cd(); + c.SetLogy(); + std::vector histogramNames = { "h_mX_SR_purity4", "h_mX_SR_purity3", "h_mX_SR_purity2", "h_mX_SR_purity1", "h_mX_SR_purity0", "h_mX_SR_purity5" }; + TH1 *h; + TLegend *leg=new TLegend(0.6, 0.7, 0.89, 0.89); + bool _first = true; + for( int i = 0; i < 6; i++ ) + { + h=(TH1F*)file->Get( histogramNames.at(i) ); + //h->Scale(1./h->GetSumOfWeights()); + h->SetLineColor( v_colors.at(i) ); + h->SetLineWidth(2); + h->Rebin(10); + h->GetXaxis()->SetRangeUser( mass - 250, mass + 250 ); + leg->AddEntry( h, v_leg.at(i) ); + if (_first) + { + h->SetMaximum(h->GetMaximum()*5); + h->GetYaxis()->SetTitleOffset(1.6); + h->Draw("hist"); + _first=false; + } + h->Draw("hist same"); + } + leg->Draw(); + c.SaveAs( "c_pur_mx"+smass+".pdf" ); +} + + void drawRegion(bool isData=false, double mean_H1_mass=125, double sigma_H1_mass=20, double mean_H2_mass=125, double sigma_H2_mass=20) { TEllipse *circle1=new TEllipse(mean_H1_mass, mean_H2_mass, sigma_H1_mass*chi_1, sigma_H2_mass*chi_1); @@ -66,6 +100,7 @@ void drawRegion(bool isData=false, double mean_H1_mass=125, double sigma_H1_mass circle1->SetLineColor(kBlack); circle1->SetFillColor(kRed); circle1->SetFillStyle(0); + if( isData&&blind ) circle1->SetFillStyle(1); circle1->Draw(); TEllipse *circle2=new TEllipse(mean_H1_mass, mean_H2_mass, sigma_H1_mass*chi_2, sigma_H2_mass*chi_2, 90., 180.); circle2->SetLineWidth(3); circle2->SetNoEdges(); circle2->SetLineColor(kBlack); circle2->SetFillStyle(0); circle2->Draw(); @@ -75,14 +110,14 @@ void drawRegion(bool isData=false, double mean_H1_mass=125, double sigma_H1_mass TLine *line3=new TLine(mean_H1_mass, mean_H2_mass-sigma_H2_mass*chi_2, mean_H1_mass, mean_H2_mass-sigma_H2_mass*chi_1); line3->SetLineWidth(3); line3->SetLineColor(kBlack); line3->Draw(); TLine *line4=new TLine(mean_H1_mass, mean_H2_mass+sigma_H2_mass*chi_2, mean_H1_mass, mean_H2_mass+sigma_H2_mass*chi_1); line4->SetLineWidth(3); line4->SetLineColor(kBlack); line4->Draw(); - TArrow *arrow1=new TArrow(mean_H1_mass, mean_H2_mass+sigma_H2_mass*chi_2*3.5, mean_H1_mass, mean_H2_mass, 0.02); arrow1->SetLineWidth(3); arrow1->SetLineColor(kBlack); arrow1->Draw(); - TPaveText *mod1=new TPaveText(mean_H1_mass-marg, mean_H2_mass+sigma_H2_mass*chi_2*3.5-marg, mean_H1_mass+marg, mean_H2_mass+sigma_H2_mass*chi_2*3.5+marg); + TArrow *arrow1=new TArrow(mean_H1_mass, mean_H2_mass+sigma_H2_mass*chi_2*3., mean_H1_mass, mean_H2_mass, 0.02); arrow1->SetLineWidth(3); arrow1->SetLineColor(kBlack); arrow1->Draw(); + TPaveText *mod1=new TPaveText(mean_H1_mass-marg, mean_H2_mass+sigma_H2_mass*chi_2*3.-marg, mean_H1_mass+marg, mean_H2_mass+sigma_H2_mass*chi_2*3+marg); mod1->SetBorderSize(0); mod1->SetFillColor(0); mod1->AddText("SR"); mod1->SetLineColor(kBlack); mod1->Draw("ARC"); TArrow *arrow2_1=new TArrow(mean_H1_mass+sigma_H1_mass*chi_2*2.5, mean_H2_mass, mean_H1_mass-sigma_H1_mass*chi_2/2., mean_H2_mass+sigma_H2_mass*chi_2/2., 0.02); arrow2_1->SetLineWidth(3); arrow2_1->SetLineColor(kBlack); TArrow *arrow2_2=new TArrow(mean_H1_mass+sigma_H1_mass*chi_2*2.5, mean_H2_mass, mean_H1_mass+sigma_H1_mass*chi_2/2., mean_H2_mass-sigma_H2_mass*chi_2/2., 0.02); arrow2_2->SetLineWidth(3); arrow2_2->SetLineColor(kBlack); - TLine *arrow2_3=new TLine(mean_H1_mass+sigma_H1_mass*chi_2*2.5, mean_H2_mass, mean_H1_mass+sigma_H1_mass*chi_2*3.5, mean_H2_mass); arrow2_3->SetLineWidth(3); arrow2_3->SetLineColor(kBlack); + TLine *arrow2_3=new TLine(mean_H1_mass+sigma_H1_mass*chi_2*2.5, mean_H2_mass, mean_H1_mass+sigma_H1_mass*chi_2*3., mean_H2_mass); arrow2_3->SetLineWidth(3); arrow2_3->SetLineColor(kBlack); arrow2_1->Draw(); arrow2_2->Draw(); arrow2_3->Draw(); - TPaveText *mod2=new TPaveText(mean_H1_mass+sigma_H1_mass*chi_2*3.5-marg, mean_H2_mass+marg, mean_H1_mass+sigma_H1_mass*chi_2*3.5+marg, mean_H2_mass-marg); + TPaveText *mod2=new TPaveText(mean_H1_mass+sigma_H1_mass*chi_2*3.-marg, mean_H2_mass+marg, mean_H1_mass+sigma_H1_mass*chi_2*3.+marg, mean_H2_mass-marg); mod2->SetBorderSize(0); mod2->SetFillColor(0); mod2->AddText("SB"); mod2->SetLineColor(kBlack); mod2->Draw("ARC"); @@ -99,13 +134,13 @@ void DisplaymH1vsmH2_ForFile(TFile *file, bool isData=false, double mean_H1_mass drawRegion(isData, mean_H1_mass, sigma_H1_mass, mean_H1_mass, sigma_H1_mass); } -void DisplaymHmX(std::vector files, std::vector mean_gen, double mean_H1_mass, double sigma_H1_mass, double mean_H2_mass, double sigma_H2_mass) +void DisplaymHmX(std::vector files, std::vector mean_gen, double mean_H1_mass, double sigma_H1_mass, double mean_H2_mass, double sigma_H2_mass) { std::vector v_files; for (unsigned int i=0; i v_colors = {kRed+1, kRed+3, kGreen+2, kOrange+2, kAzure+1};// kAzure+3, kPink+2, kGray+2,kBlue+1}; + std::vector v_colors = {kRed+1, kRed+3, kGreen+2, kOrange+2, kAzure+1, kAzure+3, kPink+2};//, kGray+2,kBlue+1}; gROOT->SetStyle("Plain"); TStyle *myStyle=setTDRStyle(); @@ -121,11 +156,11 @@ void DisplaymHmX(std::vector files, std::vector mean_gen, d h_pTOrder_JetpT_1->SetLineWidth(2); leg->AddEntry(h_pTOrder_JetpT_1, ("Signal m_{X} = "+itoa(mean_gen.at(i))+" GeV").c_str()); } - /*h_pTOrder_JetpT_1=(TH1F*)f_data->Get("h_pTOrder_JetpT_1"); + h_pTOrder_JetpT_1=(TH1F*)f_data->Get("h_pTOrder_JetpT_1"); h_pTOrder_JetpT_1->SetLineColor(kBlack); h_pTOrder_JetpT_1->SetLineWidth(2); leg->AddEntry(h_pTOrder_JetpT_1, "13 TeV Data"); - h_pTOrder_JetpT_1=(TH1F*)f_ttbar->Get("h_pTOrder_JetpT_1"); + /*h_pTOrder_JetpT_1=(TH1F*)f_ttbar->Get("h_pTOrder_JetpT_1"); h_pTOrder_JetpT_1->SetLineColor(kRed); h_pTOrder_JetpT_1->SetLineWidth(2); leg->AddEntry(h_pTOrder_JetpT_1, "t#bar{t}");*/ @@ -136,14 +171,15 @@ void DisplaymHmX(std::vector files, std::vector mean_gen, d for (int i=v_files.size()-1; i>=0; --i) { + // std::cout<<" here "<Draw(); c_H1_mass->SaveAs("c_H1_mass.png"); delete c_H1_mass; - + // std::cout<<" here "< files, std::vector mean_gen, d c_H2_mass->SaveAs("c_H2_mass.png"); delete c_H2_mass; + // Plot mH1 + + for (int i=v_files.size()-1; i>=0; --i) + { + // std::cout<<" here "<SaveAs(("c_mH1_mH2_asym_"+files.at(i)+".png").c_str()); delete c_mH1_mH2_asym; } diff --git a/AnalysisCode/HbbHbb_LMRSelection_chi2.cc b/AnalysisCode/HbbHbb_LMRSelection_chi2.cc index d56b72e..e65eda3 100644 --- a/AnalysisCode/HbbHbb_LMRSelection_chi2.cc +++ b/AnalysisCode/HbbHbb_LMRSelection_chi2.cc @@ -14,10 +14,57 @@ double jet_pT_cut1=30.; -double mean_H1_mass_=115; -double sigma_H1_mass_=17; -double mean_H2_mass_=115; -double sigma_H2_mass_=17; +double mean_H1_mass_=120;//120; +double sigma_H1_mass_=20;//25; +double mean_H2_mass_=120;//115; +double sigma_H2_mass_=20;//30; + +float mass_mean( int mass ) +{ + if( mass == 260 ) return 243; + else if( mass == 300 ) return 276; + else if( mass == 350 ) return 318; + else if( mass == 400 ) return 363; + else if( mass == 450 ) return 413; + else if( mass == 500 ) return 463; + else if( mass == 550 ) return 530; + else return mass; +} + +float mass_mean_reg( int mass ) +{ + if( mass == 260 ) return 257; + else if( mass == 300 ) return 291; + else if( mass == 350 ) return 336; + else if( mass == 400 ) return 387; + else if( mass == 450 ) return 433; + else if( mass == 500 ) return 481; + else if( mass == 550 ) return 531; + else return mass; +} +float mass_sigma( int mass ) +{ + if( mass == 260 ) return 20; + else if( mass == 300 ) return 25; + else if( mass == 350 ) return 31; + else if( mass == 400 ) return 36; + else if( mass == 450 ) return 32; + else if( mass == 500 ) return 35; + else if( mass == 550 ) return 35; + else return 30; +} + +float mass_sigma_reg( int mass ) +{ + if( mass == 260 ) return 18; + else if( mass == 300 ) return 22; + else if( mass == 350 ) return 26; + else if( mass == 400 ) return 24; + else if( mass == 450 ) return 27; + else if( mass == 500 ) return 31; + else if( mass == 550 ) return 30; + else return 30; +} TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) { @@ -26,13 +73,13 @@ TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) return jet_p4; } -void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) +void HbbHbb_LMRSelection_chi2(std::string type, std::string sample, int signal_mass = 300, bool reg = false ) { std::string inputfilename="../PreSelected_"+sample+".root"; TChain *tree=new TChain("tree"); tree->Add(inputfilename.c_str()); - std::cout<<"Opened input file "<SetBranchAddress("Jet_regressed_pt", &(jet_regressed_pT)); // tree->SetBranchAddress("jetIndex_CentralpT40btag_CMVAOrder", &(jetIndex_CentralpT40btag_CMVAOrder)); tree->SetBranchAddress("jetIndex_CentralpT40btag_CMVAOrder", &(jetIndex_CentralpT40btag_CMVAOrder)); + if(type!="Data"){ tree->SetBranchAddress("nGenBQuarkFromH", &(nGenBQuarkFromH)); tree->SetBranchAddress("GenBQuarkFromH_pt", &(genBQuarkFromH_pT)); tree->SetBranchAddress("GenBQuarkFromH_eta", &(genBQuarkFromH_eta)); tree->SetBranchAddress("GenBQuarkFromH_phi", &(genBQuarkFromH_phi)); tree->SetBranchAddress("GenBQuarkFromH_mass", &(genBQuarkFromH_mass)); tree->SetBranchAddress("Jet_mcFlavour", &(jet_flavor)); + } // Book histograms TH1F *h_H1_mass = new TH1F("h_H1_mass", "; m_{H1} (GeV)", 100, 50., 250.); @@ -114,14 +163,16 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) TH1F h_Cuts=*((TH1F*)((TH1F*)tFile1->Get("h_Cuts"))->Clone("h_Cuts")); tFile1->Close(); - - + float SR_tot=0, SB_tot=0; + int masses[]={260,300,350,400,450,500,550}; + std::map SB_m, SR_m; + for( auto m : masses ){ SR_m[m]=0; SB_m[m]=0; } // Event loop double nCut4=0, nCut5=0, nCutGen=0; for (int i=0; iGetEntries(); ++i) { - tree->GetEvent(i); - + tree->GetEvent(i); + bool foundHH=false; double chi2_old=200.; double m_diff_old=100.; @@ -174,7 +225,7 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) double chi2=pow((mH1-mean_H1_mass_)/sigma_H1_mass_, 2)+pow((mH2-mean_H2_mass_)/sigma_H2_mass_, 2); - if (chi2 mass_mean(m)-mass_sigma(m)*3 && X_p4.M() < mass_mean(m)+mass_sigma(m)*3 ) SR_m[m]++; + else if( reg && X_p4.M() > mass_mean_reg(m)-mass_sigma_reg(m)*3 && X_p4.M() < mass_mean_reg(m)+mass_sigma_reg(m)*3 ) SR_m[m]++; + } // Apply kinematic constraint // jet1_p4, jet2_p4, jet3_p4, jet4_p4 will change values @@ -328,6 +385,13 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) } else if (1 mass_mean(m)-mass_sigma(m)*3 && X_p4.M() < mass_mean(m)+mass_sigma(m)*3 ) SB_m[m]++; + else if( reg && X_p4.M() > mass_mean_reg(m)-mass_sigma_reg(m)*3 && X_p4.M() < mass_mean_reg(m)+mass_sigma_reg(m)*3 ) SB_m[m]++; + } // Apply kinematic constraint // jet1_p4, jet2_p4, jet3_p4, jet4_p4 will change values double kinFitchi2=constrainHH_signalMeasurement(&jet1_p4, &jet2_p4, &jet3_p4, &jet4_p4); @@ -341,6 +405,10 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) } } // Event loop + if(type!="Data") std::cout << signal_mass << " " << SR_m[signal_mass] << std::endl; + else for( auto m : masses ) std::cout << m << " " << SB_m[m]*SR_tot/SB_tot << std::endl; + + h_Cuts.Fill(9, nCut4); // HH Candidates h_Cuts.Fill(11, nCut5); // SR @@ -362,7 +430,7 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) h_kinFitchi2->Write(); h_chi->Write(); h_chi_biasCorrected->Write(); - h_mX_SR->Write(); + if(type!="Data"){ h_mX_SR->Write(); h_mX_SR_biasCorrected->Write(); h_mX_SR_purity5->Write(); h_mX_SR_purity0->Write(); @@ -370,28 +438,30 @@ void HbbHbb_LMRSelection_chi2(std::string type, std::string sample) h_mX_SR_purity2->Write(); h_mX_SR_purity3->Write(); h_mX_SR_purity4->Write(); - h_mX_SR_kinFit->Write(); + //h_mX_SR_kinFit->Write(); + } h_HH_balance_kinFit->Write(); - h_mX_SR_kinFit_purity0->Write(); + if(type!="Data"){ h_mX_SR_kinFit_purity0->Write(); h_mX_SR_kinFit_purity1->Write(); h_mX_SR_kinFit_purity2->Write(); h_mX_SR_kinFit_purity3->Write(); h_mX_SR_kinFit_purity4->Write(); - h_mX_SR_kinFit_purity5->Write(); + h_mX_SR_kinFit_purity5->Write(); } h_mX_SB->Write(); h_mX_SB_biasCorrected->Write(); - h_mX_SB_kinFit->Write(); + h_mX_SR_kinFit->Write(); + h_mX_SB_kinFit->Write(); h_Cuts.Write(); tFile2->Write(); tFile2->Close(); - std::cout<<"Wrote output file "<40 GeV && |eta|<2.5) = "<size(); ++m) { unsigned int m_jetIndex=jetIndex_CentralpT40_CSVOrder->at(m); - if (m_jetIndex!=j_jetIndex && m_jetIndex!=k_jetIndex && m_jetIndex!=l_jetIndex && jet_btagCMVA[m_jetIndex]<0.18) + if (m_jetIndex!=j_jetIndex && m_jetIndex!=k_jetIndex && m_jetIndex!=l_jetIndex && jet_btagCMVA[m_jetIndex]<0.18 && jet3_p4.Pt()>40.) +// && jet2_p4.Pt()>jet_pT_cut1 && jet3_p4.Pt()>jet_pT_cut1 && jet4_p4.Pt()>jet_pT_cut1) { jet4_p4=fillTLorentzVector(jet_regressed_pT[m_jetIndex], jet_eta[m_jetIndex], jet_phi[m_jetIndex], jet_mass[m_jetIndex]); diff --git a/AnalysisCode/HbbHbb_MMRSelection.cc b/AnalysisCode/HbbHbb_MMRSelection.cc index 8c09850..6a7e6ec 100644 --- a/AnalysisCode/HbbHbb_MMRSelection.cc +++ b/AnalysisCode/HbbHbb_MMRSelection.cc @@ -132,26 +132,22 @@ void HbbHbb_MMRSelection(std::string type, std::string sample) for (unsigned int j=0; jsize(); ++j) { - unsigned int j_jetIndex=jetIndex_CentralpT40btag_CSVOrder->at(j); TLorentzVector jet1_p4, jet2_p4, jet3_p4, jet4_p4; jet1_p4=fillTLorentzVector(jet_regressed_pT[j_jetIndex], jet_eta[j_jetIndex], jet_phi[j_jetIndex], jet_mass[j_jetIndex]); if (jet1_p4.Pt()>jet_pT_cut1) { for (unsigned int k=0; ksize(); ++k) { - unsigned int k_jetIndex=jetIndex_CentralpT40btag_CSVOrder->at(k); jet2_p4=fillTLorentzVector(jet_regressed_pT[k_jetIndex], jet_eta[k_jetIndex], jet_phi[k_jetIndex], jet_mass[k_jetIndex]); if (k_jetIndex!=j_jetIndex && jet2_p4.Pt()>jet_pT_cut1) { for (unsigned int l=0; lsize(); ++l) { - unsigned int l_jetIndex=jetIndex_CentralpT40btag_CSVOrder->at(l); jet3_p4=fillTLorentzVector(jet_regressed_pT[l_jetIndex], jet_eta[l_jetIndex], jet_phi[l_jetIndex], jet_mass[l_jetIndex]); if (l_jetIndex!=k_jetIndex && l_jetIndex!=j_jetIndex && jet3_p4.Pt()>jet_pT_cut1) { for (unsigned int m=0; msize(); ++m) { - unsigned int m_jetIndex=jetIndex_CentralpT40btag_CSVOrder->at(m); jet4_p4=fillTLorentzVector(jet_regressed_pT[m_jetIndex], jet_eta[m_jetIndex], jet_phi[m_jetIndex], jet_mass[m_jetIndex]); if (m_jetIndex!=l_jetIndex && m_jetIndex!=k_jetIndex && m_jetIndex!=j_jetIndex && jet4_p4.Pt()>jet_pT_cut1) { diff --git a/AnalysisCode/HbbHbb_MMRSelection_chi2.cc b/AnalysisCode/HbbHbb_MMRSelection_chi2.cc index 6513ce7..ad89e31 100644 --- a/AnalysisCode/HbbHbb_MMRSelection_chi2.cc +++ b/AnalysisCode/HbbHbb_MMRSelection_chi2.cc @@ -14,10 +14,71 @@ double jet_pT_cut1=30.; -double mean_H1_mass_=115; -double sigma_H1_mass_=23; -double mean_H2_mass_=115; -double sigma_H2_mass_=23; +double mean_H1_mass_=125;// 120 125; +double sigma_H1_mass_=20; //20 +double mean_H2_mass_=125;//125; +double sigma_H2_mass_=20; + +float mass_mean( int mass ) +{ + if( mass == 400 ) return 380; + else if( mass == 450 ) return 425; + else if( mass == 500 ) return 476; + else if( mass == 550 ) return 524; + else if( mass == 600 ) return 573; + else if( mass == 650 ) return 623; + else if( mass == 700 ) return 674; + else if( mass == 750 ) return 720; + else if( mass == 800 ) return 772; + else if( mass == 900 ) return 871; + else return mass; +} + +float mass_mean_reg( int mass ) +{ + if( mass == 400 ) return 388; + else if( mass == 450 ) return 434; + else if( mass == 500 ) return 482; + else if( mass == 550 ) return 540; + else if( mass == 600 ) return 589; + else if( mass == 650 ) return 638; + else if( mass == 700 ) return 689; + else if( mass == 750 ) return 737; + else if( mass == 800 ) return 787; + else if( mass == 900 ) return 886; + + else return mass; +} +float mass_sigma( int mass ) +{ + if( mass == 400 ) return 21; + else if( mass == 450 ) return 25; + else if( mass == 500 ) return 28; + else if( mass == 550 ) return 30; + else if( mass == 600 ) return 32; + else if( mass == 650 ) return 34; + else if( mass == 700 ) return 35; + else if( mass == 750 ) return 39; + else if( mass == 800 ) return 39; + else if( mass == 900 ) return 42; + else return 30; +} + +float mass_sigma_reg( int mass ) +{ + if( mass == 400 ) return 23; + else if( mass == 450 ) return 24; + else if( mass == 500 ) return 28; + else if( mass == 550 ) return 29; + else if( mass == 600 ) return 31; + else if( mass == 650 ) return 33; + else if( mass == 700 ) return 35; + else if( mass == 750 ) return 38; + else if( mass == 800 ) return 40; + else if( mass == 900 ) return 45; + else return 30; +} + TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) { @@ -26,13 +87,13 @@ TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) return jet_p4; } -void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) +void HbbHbb_MMRSelection_chi2(std::string type, std::string sample, int signal_mass = 300, bool reg = false ) { std::string inputfilename="../PreSelected_"+sample+".root"; TChain *tree=new TChain("tree"); tree->Add(inputfilename.c_str()); - std::cout<<"Opened input file "<SetBranchAddress("Jet_mass", &(jet_mass)); tree->SetBranchAddress("Jet_regressed_pt", &(jet_regressed_pT)); tree->SetBranchAddress("jetIndex_CentralpT40btag_CMVAOrder", &(jetIndex_CentralpT40btag_CMVAOrder)); + if(type!="Data"){ tree->SetBranchAddress("nGenBQuarkFromH", &(nGenBQuarkFromH)); tree->SetBranchAddress("GenBQuarkFromH_pt", &(genBQuarkFromH_pT)); tree->SetBranchAddress("GenBQuarkFromH_eta", &(genBQuarkFromH_eta)); tree->SetBranchAddress("GenBQuarkFromH_phi", &(genBQuarkFromH_phi)); tree->SetBranchAddress("GenBQuarkFromH_mass", &(genBQuarkFromH_mass)); tree->SetBranchAddress("Jet_mcFlavour", &(jet_flavor)); - + } + TH1F * hJet_pt_H = new TH1F("hJet_pt_H","; jet pt (GeV)", 600, 0., 1200.); TH1F *h_H1_mass = new TH1F("h_H1_mass", "; m_{H1} (GeV)", 300, 0., 300.); @@ -109,7 +172,11 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) TFile *tFile1=new TFile((histfilename).c_str(), "READ"); TH1F h_Cuts=*((TH1F*)((TH1F*)tFile1->Get("h_Cuts"))->Clone("h_Cuts")); tFile1->Close(); - + + float SR_tot=0, SB_tot=0; + int masses[]={400,450,500,550,600,650,700,750,800,900}; + std::map SB_m, SR_m; + for( auto m : masses ){ SR_m[m]=0; SB_m[m]=0; } double nCut4=0, nCut5=0, nCutGen=0; for (int i=0; iGetEntries(); ++i) { @@ -117,6 +184,7 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) bool foundHH=false; double chi2_old=200.; + double m_diff_old=60.; int H1jet1_i=-1, H1jet2_i=-1; int H2jet1_i=-1, H2jet2_i=-1; for (unsigned int j=0; jsize(); ++j) @@ -161,7 +229,7 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) double mH1=diJet1_p4.M(); double mH2=diJet2_p4.M(); - + double m_diff=fabs(mH1-mH2); double chi2=pow((mH1-mean_H1_mass_)/sigma_H1_mass_, 2)+pow((mH2-mean_H2_mass_)/sigma_H2_mass_, 2); if (chi2 mass_mean(m)-mass_sigma(m)*3 && X_p4.M() < mass_mean(m)+mass_sigma(m)*3 ) SR_m[m]++; + else if( reg && X_p4.M() > mass_mean_reg(m)-mass_sigma_reg(m)*3 && X_p4.M() < mass_mean_reg(m)+mass_sigma_reg(m)*3 ) SR_m[m]++; + } + double kinFitchi2=constrainHH_signalMeasurement(&jet1_p4, &jet2_p4, &jet3_p4, &jet4_p4); h_kinFitchi2->Fill(kinFitchi2, eventWeight); TLorentzVector X_p4_kinFit=(jet1_p4+jet2_p4+jet3_p4+jet4_p4); @@ -313,6 +389,13 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) } else if (1 mass_mean(m)-mass_sigma(m)*3 && X_p4.M() < mass_mean(m)+mass_sigma(m)*3 ) SB_m[m]++; + else if( reg && X_p4.M() > mass_mean_reg(m)-mass_sigma_reg(m)*3 && X_p4.M() < mass_mean_reg(m)+mass_sigma_reg(m)*3 ) SB_m[m]++; + } double kinFitchi2=constrainHH_signalMeasurement(&jet1_p4, &jet2_p4, &jet3_p4, &jet4_p4); TLorentzVector X_p4_kinFit=(jet1_p4+jet2_p4+jet3_p4+jet4_p4); @@ -324,6 +407,10 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) } } // Event loop + if(type!="Data") std::cout << signal_mass << " " << SR_m[signal_mass] << std::endl; + else for( auto m : masses ) std::cout << m << " " << SB_m[m]*SR_tot/SB_tot << std::endl; + + h_Cuts.Fill(9, nCut4); // HH Candidates h_Cuts.Fill(11, nCut5); // SR @@ -345,7 +432,7 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) h_kinFitchi2->Write(); h_chi->Write(); h_chi_biasCorrected->Write(); - h_mX_SR->Write(); + if(type!="Data"){h_mX_SR->Write(); h_mX_SR_biasCorrected->Write(); h_mX_SR_purity5->Write(); h_mX_SR_purity0->Write(); @@ -353,28 +440,30 @@ void HbbHbb_MMRSelection_chi2(std::string type, std::string sample ) h_mX_SR_purity2->Write(); h_mX_SR_purity3->Write(); h_mX_SR_purity4->Write(); - h_mX_SR_kinFit->Write(); + //h_mX_SR_kinFit->Write(); + } h_HH_balance_kinFit->Write(); - h_mX_SR_kinFit_purity0->Write(); + if(type!="Data"){h_mX_SR_kinFit_purity0->Write(); h_mX_SR_kinFit_purity1->Write(); h_mX_SR_kinFit_purity2->Write(); h_mX_SR_kinFit_purity3->Write(); h_mX_SR_kinFit_purity4->Write(); - h_mX_SR_kinFit_purity5->Write(); + h_mX_SR_kinFit_purity5->Write(); } h_mX_SB->Write(); h_mX_SB_biasCorrected->Write(); h_mX_SB_kinFit->Write(); + h_mX_SR_kinFit->Write(); hJet_pt_H->Write(); h_Cuts.Write(); tFile2->Write(); tFile2->Close(); - std::cout<<"Wrote output file "<40 GeV && |eta|<2.5) = "< #if not defined(__CINT__) || defined(__MAKECINT__) #include "TMVA/Tools.h" @@ -24,9 +26,8 @@ double pi=3.14159265358979; // Hardcoded configuration parameters double jet_pT_cut=30.; -double jet_pT_ttbar_cut=20.; -double jet_eta_cut=2.5; -double jet_btag_cut=0.185;//0.460; //0.605; +double jet_eta_cut=2.4; +double jet_btag_cut=0.4432;// CMVAM https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation80XReReco ///////////////////////////////////// typedef std::map JetList; @@ -64,14 +65,36 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, if (regressionFile=="") std::cout<<"b jet regression not done. jet_regressed_pT = jet_pT"<AddVariable("Jet_pt", &this_Jet_pt); - reader->AddVariable("Jet_corr", &this_Jet_corr); - reader->AddVariable("rho", &this_rho); + //reader->AddVariable("Jet_corr", &this_Jet_corr); + reader->AddVariable("nPVs", &this_rho); reader->AddVariable("Jet_eta", &this_Jet_eta); reader->AddVariable("Jet_mt", &this_Jet_mt); reader->AddVariable("Jet_leadTrackPt", &this_Jet_leadTrackPt); @@ -135,43 +169,56 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, reader->AddVariable("Jet_leptonDeltaR", &this_Jet_leptonDeltaR); reader->AddVariable("Jet_neHEF", &this_Jet_neHEF); reader->AddVariable("Jet_neEmEF", &this_Jet_neEmEF); - reader->AddVariable("Jet_chMult", &this_Jet_chMult); + //reader->AddVariable("Jet_chMult", &this_Jet_chMult); reader->AddVariable("Jet_vtxPt", &this_Jet_vtxPt); reader->AddVariable("Jet_vtxMass", &this_Jet_vtxMass); reader->AddVariable("Jet_vtx3dL", &this_Jet_vtx3dL); reader->AddVariable("Jet_vtxNtrk", &this_Jet_vtxNtrk); reader->AddVariable("Jet_vtx3deL", &this_Jet_vtx3deL); reader->BookMVA("BDTG method", regressionFile); + } + // Retrieve variables tree->SetBranchAddress("evt", &evt); tree->SetBranchStatus("*", 0); tree->SetBranchStatus("evt", 1); tree->SetBranchAddress("run", &run); tree->SetBranchStatus("run", 1); - tree->SetBranchAddress("nTrueInt",&nTrueInt); tree->SetBranchStatus("nTrueInt",1); + if(isMC==1){ tree->SetBranchAddress("nTrueInt",&nTrueInt); tree->SetBranchStatus("nTrueInt",1); } tree->SetBranchAddress("isData", &isData); tree->SetBranchStatus("isData", 1); - tree->SetBranchAddress("HLT_HH4bLowLumi", &trigger_HLT_HH4bLowLumi); tree->SetBranchStatus("HLT_HH4bLowLumi", 1); - tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v",&trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v",1); - tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v",&trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v",1); + tree->SetBranchAddress("json",&json); tree->SetBranchStatus("json",1); + + + + + // Different name for MC and data + if(isMC==1){ tree->SetBranchAddress("HLT_HH4bLowLumi", &trigger_HLT_HH4bLowLumi); tree->SetBranchStatus("HLT_HH4bLowLumi", 1); } + else { tree->SetBranchAddress("HLT_HH4bLowLumi", &trigger_HLT_HH4bLowLumi); tree->SetBranchStatus("HLT_HH4bLowLumi", 1); } + if(isMC==1){ tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",1); } + else { tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",1); } + + if(isMC==1){ tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",1); } + else { tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",1); } + tree->SetBranchAddress("Vtype", &(vType)); tree->SetBranchStatus("Vtype", 1); - tree->SetBranchAddress("puWeight", &(puWeight)); tree->SetBranchStatus("puWeight", 1); - tree->SetBranchAddress("genWeight", &(genWeight)); tree->SetBranchStatus("genWeight", 1); + if(isMC==1){ tree->SetBranchAddress("puWeight", &(puWeight)); tree->SetBranchStatus("puWeight", 1); } + if(isMC==1){ tree->SetBranchAddress("genWeight", &(genWeight)); tree->SetBranchStatus("genWeight", 1); } tree->SetBranchAddress("nJet", &(nJets)); tree->SetBranchStatus("nJet", 1); tree->SetBranchAddress("Jet_btagCSV", &(jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); tree->SetBranchAddress("Jet_btagCMVAV2", &(jet_btagCMVA)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); - tree->SetBranchAddress("Jet_btagCMVAV2MSF_Up", &(jet_btagCMVAMSFUp)); tree->SetBranchStatus("Jet_btagCMVAV2MSF_Up", 1); - tree->SetBranchAddress("Jet_btagCMVAV2MSF_Down", &(jet_btagCMVAMSFDown)); tree->SetBranchStatus("Jet_btagCMVAV2MSF_Down", 1); - tree->SetBranchAddress("Jet_btagCMVAV2MSF", &(jet_btagCMVAMSF)); tree->SetBranchStatus("Jet_btagCMVAV2MSF", 1); + if(isMC==1){ tree->SetBranchAddress("Jet_btagCMVAV2M_SF_up", &(jet_btagCMVAMSFUp)); tree->SetBranchStatus("Jet_btagCMVAV2M_SF_up", 1); + tree->SetBranchAddress("Jet_btagCMVAV2M_SF_down", &(jet_btagCMVAMSFDown)); tree->SetBranchStatus("Jet_btagCMVAV2M_SF_down", 1); + tree->SetBranchAddress("Jet_btagCMVAV2M_SF", &(jet_btagCMVAMSF)); tree->SetBranchStatus("Jet_btagCMVAV2M_SF", 1); } tree->SetBranchAddress("Jet_pt", &(jet_pT)); tree->SetBranchStatus("Jet_pt", 1); tree->SetBranchAddress("Jet_rawPt", &(jet_rawpT)); tree->SetBranchStatus("Jet_rawPt", 1); tree->SetBranchAddress("Jet_eta", &(jet_eta)); tree->SetBranchStatus("Jet_eta", 1); tree->SetBranchAddress("Jet_phi", &(jet_phi)); tree->SetBranchStatus("Jet_phi", 1); tree->SetBranchAddress("Jet_mass", &(jet_mass)); tree->SetBranchStatus("Jet_mass", 1); - tree->SetBranchAddress("Jet_mcPt", &(jet_MCpT)); tree->SetBranchStatus("Jet_mcPt", 1); + if(isMC==1){ tree->SetBranchAddress("Jet_mcPt", &(jet_MCpT)); tree->SetBranchStatus("Jet_mcPt", 1); tree->SetBranchAddress("Jet_mcEta", &(jet_MCeta)); tree->SetBranchStatus("Jet_mcEta", 1); tree->SetBranchAddress("Jet_mcPhi", &(jet_MCphi)); tree->SetBranchStatus("Jet_mcPhi", 1); - tree->SetBranchAddress("Jet_mcM", &(jet_MCmass)); tree->SetBranchStatus("Jet_mcM", 1); + tree->SetBranchAddress("Jet_mcM", &(jet_MCmass)); tree->SetBranchStatus("Jet_mcM", 1); tree->SetBranchAddress("nGenHiggsBoson", &(nGenHiggsBoson)); tree->SetBranchStatus("nGenHiggsBoson",1); tree->SetBranchAddress("GenHiggsBoson_pt", &(genHiggsBoson_pT)); tree->SetBranchStatus("GenHiggsBoson_pt",1); tree->SetBranchAddress("GenHiggsBoson_eta", &(genHiggsBoson_eta)); tree->SetBranchStatus("GenHiggsBoson_eta",1); @@ -181,26 +228,33 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, tree->SetBranchAddress("GenBQuarkFromH_pt", &(genBQuarkFromH_pT)); tree->SetBranchStatus("GenBQuarkFromH_pt", 1); tree->SetBranchAddress("GenBQuarkFromH_eta", &(genBQuarkFromH_eta)); tree->SetBranchStatus("GenBQuarkFromH_eta", 1); tree->SetBranchAddress("GenBQuarkFromH_phi", &(genBQuarkFromH_phi)); tree->SetBranchStatus("GenBQuarkFromH_phi", 1); - tree->SetBranchAddress("GenBQuarkFromH_mass", &(genBQuarkFromH_mass)); tree->SetBranchStatus("GenBQuarkFromH_mass", 1); + tree->SetBranchAddress("GenBQuarkFromH_mass", &(genBQuarkFromH_mass)); tree->SetBranchStatus("GenBQuarkFromH_mass", 1); } tree->SetBranchAddress("met_pt", &(met_pT)); tree->SetBranchStatus("met_pt", 1); tree->SetBranchAddress("met_phi", &(met_phi)); tree->SetBranchStatus("met_phi", 1); tree->SetBranchAddress("Jet_corr", &(jet_corrJEC)); tree->SetBranchAddress("Jet_corr_JECUp", &(jet_corrJECUp)); tree->SetBranchAddress("Jet_corr_JECDown", &(jet_corrJECDown)); - tree->SetBranchAddress("Jet_corr_JER", &(jet_corrJER)); + if(isMC==1){ tree->SetBranchAddress("Jet_corr_JER", &(jet_corrJER)); tree->SetBranchAddress("Jet_corr_JERUp", &(jet_corrJERUp)); tree->SetBranchAddress("Jet_corr_JERDown", &(jet_corrJERDown)); - tree->SetBranchAddress("Jet_mcFlavour", &(jet_flavor));// tree->SetBranchStatus("Jet_Flavour", 1); + tree->SetBranchAddress("Jet_mcFlavour", &(jet_flavor));// tree->SetBranchStatus("Jet_Flavour", 1); + } + + if(isMC==1){ tree->SetBranchAddress("btagWeightCMVAV2", &(btagWeightsCMVAV2));} + + if (regressionFile!="") { + tree->SetBranchAddress("Jet_corr", &(jet_corr)); - tree->SetBranchAddress("rho", &(rho)); + tree->SetBranchAddress("nPVs", &(nPVs)); tree->SetBranchAddress("Jet_leadTrackPt", &(jet_leadTrackPt)); tree->SetBranchAddress("Jet_leptonPtRel", &(jet_leptonPtRel)); tree->SetBranchAddress("Jet_leptonPt", &(jet_leptonPt)); tree->SetBranchAddress("Jet_leptonDeltaR", &(jet_leptonDeltaR)); tree->SetBranchAddress("Jet_neHEF", &(jet_neHEF)); + tree->SetBranchAddress("Jet_chHEF", &(jet_chHEF)); tree->SetBranchAddress("Jet_neEmEF", &(jet_neEmEF)); tree->SetBranchAddress("Jet_chMult", &(jet_chMult)); tree->SetBranchAddress("Jet_vtxPt", &(jet_vtxPt)); @@ -209,7 +263,8 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, tree->SetBranchAddress("Jet_vtx3DSig", &(jet_vtx3deL)); tree->SetBranchAddress("Jet_vtxNtracks", &(jet_vtxNtrk)); } - + + TH1F *h_nCbJets=new TH1F("h_nCbJets", "; #Jets with |#eta|<2.5, p_{T} > 30 GeV, CMVA > CMVAM; Events", 10, 0., 10.); TH1F *h_pTOrder_JetpT_1=new TH1F("h_pTOrder_JetpT_1", "; Jet pT 1 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 800.); @@ -217,6 +272,12 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, TH1F *h_pTOrder_JetpT_3=new TH1F("h_pTOrder_JetpT_3", "; Jet pT 3 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 350.); TH1F *h_pTOrder_JetpT_4=new TH1F("h_pTOrder_JetpT_4", "; Jet pT 4 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); TH1F *h_pTOrder_JetpT_5=new TH1F("h_pTOrder_JetpT_5", "; Jet pT 5 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); + + TH1F *h_pTreg_JetpT_1=new TH1F("h_pTreg_JetpT_1", "; Jet pT 1 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 800.); + TH1F *h_pTreg_JetpT_2=new TH1F("h_pTreg_JetpT_2", "; Jet pT 2 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 500.); + TH1F *h_pTreg_JetpT_3=new TH1F("h_pTreg_JetpT_3", "; Jet pT 3 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 350.); + TH1F *h_pTreg_JetpT_4=new TH1F("h_pTreg_JetpT_4", "; Jet pT 4 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); + TH1F *h_pTreg_JetpT_5=new TH1F("h_pTreg_JetpT_5", "; Jet pT 5 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); TH1F *h_CSVOrder_JetCSV_1=new TH1F("h_CSVOrder_JetCSV_1", "; Jet CSV 1 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); TH1F *h_CSVOrder_JetCSV_2=new TH1F("h_CSVOrder_JetCSV_2", "; Jet CSV 2 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); TH1F *h_CSVOrder_JetCSV_3=new TH1F("h_CSVOrder_JetCSV_3", "; Jet CSV 3 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); @@ -226,7 +287,13 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, TH1F *h_CMVAOrder_JetCMVA_3=new TH1F("h_CMVAOrder_JetCMVA_3", "; Jet CMVA 3 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); TH1F *h_CMVAOrder_JetCMVA_4=new TH1F("h_CMVAOrder_JetCMVA_4", "; Jet CMVA 4 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); - + TH1F *hSF =new TH1F("hSF"," ", 100, 0., 2.); + TH1F *hWeight =new TH1F("hWeight"," ", 100, 0., 2.); + + TH1F *hWeightH =new TH1F("hWeightH","Weight High", 100, 0., 5.); + TH1F *hWeightL =new TH1F("hWeightL","Weight Low", 100, 0., 5.); + TH1F *h_pt_spike=new TH1F("h_pt_spike", "pt in spike; Jet pT 1 for jets with |#eta|<2.5 (GeV); Events", 100, 0., 800.); + TH1F *h_GenX_mass=new TH1F("h_GenX_mass", "; m_{X}^{GEN} (GeV); Events", 1800, 200, 2000); TH1F *h_dR_genHbb=new TH1F("h_dR_genHbb", "; #Delta R(b#bar{b}}; Events", 1000, 0., 5.); @@ -244,15 +311,18 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, // Output tree in new file std::string outfilename="PreSelected_"+sample+".root"; + + TFile *outfile=new TFile(outfilename.c_str(), "recreate"); TTree *outtree=tree->CloneTree(0); + float jet_regressed_pT[100]; std::vector jetIndex_CentralpT40btag_pTOrder; std::vector jetIndex_CentralpT40btag_CSVOrder; std::vector jetIndex_CentralpT40btag_CMVAOrder; std::vector jetIndex_CentralpT40_CSVOrder; std::vector jetIndex_Central_pTOrder; - outtree->Branch("Jet_regressed_pt", jet_regressed_pT, "Jet_regressed_pt[nJet]/F"); + outtree->Branch("Jet_regressed_pt", &jet_regressed_pT, "Jet_regressed_pt[nJet]/F"); outtree->Branch("jetIndex_CentralpT40btag_pTOrder", &jetIndex_CentralpT40btag_pTOrder); outtree->Branch("jetIndex_CentralpT40btag_CSVOrder", &jetIndex_CentralpT40btag_CSVOrder); outtree->Branch("jetIndex_CentralpT40btag_CMVAOrder", &jetIndex_CentralpT40btag_CMVAOrder); @@ -262,15 +332,19 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, // Loop over events int nEvents=tree->GetEntries(); + + std::cout<GetEvent(i); - + + eventWeight=1; + if (isData==1 && json <1) continue; if (isData!=1) eventWeight=puWeight;//weight2( nTrueInt )*genWeight/fabs(genWeight); - else eventWeight=1; + if (isData!=1) { @@ -293,13 +367,14 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, h_MET->Fill(met_pT, eventWeight); h_MET_phi->Fill(met_phi, eventWeight); + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v!=1) nTrig1+=1; + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v==1) nTrig12+=1; + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v!=1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v==1) nTrig2+=1; + - if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v!=1) nTrig1+=1; - if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v==1) nTrig12+=1; - if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v!=1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v==1) nTrig2+=1; - - // std::cout<<"trigger_HLT_HH4bLowLumi = "<0) jetList_CentralpT40btag_CSVOrder[jet_btagCSV[j]]=j; @@ -385,10 +481,16 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, } } } + //std::cout<"<3) { + hSF->Fill(eventWeight); + if(isMC==1){ hWeight->Fill(btagWeightsCMVAV2); } + } h_nCbJets->Fill(nCbJets, eventWeight); // Fill jet pT order histograms std::vector v_pTOrder_JetpT = {h_pTOrder_JetpT_1, h_pTOrder_JetpT_2, h_pTOrder_JetpT_3, h_pTOrder_JetpT_4, h_pTOrder_JetpT_5}; + std::vector v_pTreg_JetpT = {h_pTreg_JetpT_1, h_pTreg_JetpT_2, h_pTreg_JetpT_3, h_pTreg_JetpT_4, h_pTreg_JetpT_5}; std::vector v_CSVOrder_JetCSV = {h_CSVOrder_JetCSV_1, h_CSVOrder_JetCSV_2, h_CSVOrder_JetCSV_3, h_CSVOrder_JetCSV_4}; std::vector v_CMVAOrder_JetCMVA = {h_CMVAOrder_JetCMVA_1, h_CMVAOrder_JetCMVA_2, h_CMVAOrder_JetCMVA_3, h_CMVAOrder_JetCMVA_4}; fillHistogramsFromJetList(jetList_Central_pTOrder, v_pTOrder_JetpT, eventWeight); @@ -431,10 +533,10 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, int jetIndex = jetIndex_CentralpT40btag_CMVAOrder.at(j); this_Jet_pt = jet_pT[jetIndex]; - if (isData!=1) this_Jet_corr = jet_corr[jetIndex]; - else this_Jet_corr = jet_pT[jetIndex]/jet_rawpT[jetIndex]; + // if (isData!=1) this_Jet_corr = jet_corr[jetIndex]; + // else this_Jet_corr = jet_pT[jetIndex]/jet_rawpT[jetIndex]; - this_rho = rho; + this_rho = nPVs; this_Jet_eta = jet_eta[jetIndex]; TLorentzVector jet; @@ -445,7 +547,7 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, this_Jet_leptonPtRel = jet_leptonPtRel[jetIndex]; this_Jet_leptonPt = jet_leptonPt[jetIndex]; this_Jet_leptonDeltaR = jet_leptonDeltaR[jetIndex]; - this_Jet_neHEF = jet_neHEF[jetIndex]; + this_Jet_neHEF = jet_neHEF[jetIndex];//+jet_chHEF[jetIndex]; this_Jet_neEmEF = jet_neEmEF[jetIndex]; this_Jet_chMult = jet_chMult[jetIndex]; this_Jet_vtxPt = jet_vtxPt[jetIndex]; @@ -455,16 +557,27 @@ void HbbHbb_PreSelection(std::string dir, std::string sample, this_Jet_vtx3deL = jet_vtx3deL[jetIndex]; double regressedJetpT=(reader->EvaluateRegression("BDTG method"))[0]; + // if( jet_pT[jetIndex]>400 ) jet_regressed_pT[jetIndex] = jet_pT[jetIndex]; + jet_regressed_pT[jetIndex]=regressedJetpT;// * jet_pT[jetIndex]; + if(jet_pT[jetIndex]<400) hWeightL->Fill( regressedJetpT/jet_pT[jetIndex] ); + if(jet_pT[jetIndex]>500) hWeightH->Fill( regressedJetpT/jet_pT[jetIndex] ); + if(regressedJetpT>450 && regressedJetpT<500) h_pt_spike->Fill( jet_pT[jetIndex] ); + //std::cout<<"Jet pT = "<HH->bbbb searches in CMS +Authors: Souvik Das (Univ. of Florida) & Caterina Vernieri (FNAL) +/----------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include "DrawFunctions.h" +#include "TLorentzVector.h" +#include "TMath.h" +//#include "Trigger/Double76.h" +//##include "Trigger/Quad76.h" +//#include "Trigger_ttbar/trig.h" +#include "trigger_tt/trig.h" +//#include "trigger-testerror/trig.h" +#include +#if not defined(__CINT__) || defined(__MAKECINT__) +#include "TMVA/Tools.h" +#include "TMVA/Reader.h" +#include "TMVA/MethodCuts.h" +#endif + +double pi=3.14159265358979; + +// Hardcoded configuration parameters +double jet_pT_cut=30.; +double jet_pT_ttbar_cut=20.; +double jet_eta_cut=2.4; +double jet_btag_cut=0.800;//0.185;//0.460; //0.605; +///////////////////////////////////// + +typedef std::map JetList; + +void fillHistogramsFromJetList(JetList jetList, std::vector histograms, double eventWeight) +{ + int nHistograms=histograms.size(); + int i_histogram=0; + for (JetList::reverse_iterator iJet=jetList.rbegin(); (iJet!=jetList.rend() && i_histogramFill(iJet->first, eventWeight); + } +} + +void fillIndexVectorFromJetList(JetList jetList, std::vector *indexVector) +{ + for (JetList::reverse_iterator iJet=jetList.rbegin(); iJet!=jetList.rend(); ++iJet) + { + indexVector->push_back(iJet->second); + } +} +TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) +{ + TLorentzVector jet_p4; + jet_p4.SetPtEtaPhiM(pT, eta, phi, M); + return jet_p4; +} + + +void HbbHbb_Trigger(std::string dir, std::string sample, + std::string sigmaJECUnc_string="JEC", + std::string sigmaJERUnc_string="JER", + std::string sigmaTrigUnc_string="Trig", + std::string sigmabTagUnc_string="bTag", + bool isLMR = false, + std::string regressionFile="") +{ + + std::string inputfilename=dir+"/"+sample+".root"; + TChain *tree=new TChain("tree"); + tree->Add(inputfilename.c_str()); + std::cout<<"Opened input file "<AddVariable("Jet_pt", &this_Jet_pt); + //reader->AddVariable("Jet_corr", &this_Jet_corr); + reader->AddVariable("nPVs", &this_rho); + reader->AddVariable("Jet_eta", &this_Jet_eta); + reader->AddVariable("Jet_mt", &this_Jet_mt); + reader->AddVariable("Jet_leadTrackPt", &this_Jet_leadTrackPt); + reader->AddVariable("Jet_leptonPtRel", &this_Jet_leptonPtRel); + reader->AddVariable("Jet_leptonPt", &this_Jet_leptonPt); + reader->AddVariable("Jet_leptonDeltaR", &this_Jet_leptonDeltaR); + reader->AddVariable("Jet_neHEF", &this_Jet_neHEF); + reader->AddVariable("Jet_neEmEF", &this_Jet_neEmEF); + //reader->AddVariable("Jet_chMult", &this_Jet_chMult); + reader->AddVariable("Jet_vtxPt", &this_Jet_vtxPt); + reader->AddVariable("Jet_vtxMass", &this_Jet_vtxMass); + reader->AddVariable("Jet_vtx3dL", &this_Jet_vtx3dL); + reader->AddVariable("Jet_vtxNtrk", &this_Jet_vtxNtrk); + reader->AddVariable("Jet_vtx3deL", &this_Jet_vtx3deL); + reader->BookMVA("BDTG method", regressionFile); + } + + // Retrieve variables + tree->SetBranchAddress("evt", &evt); + tree->SetBranchStatus("*", 0); + tree->SetBranchStatus("evt", 1); + tree->SetBranchAddress("run", &run); tree->SetBranchStatus("run", 1); + if(isMC==1){ tree->SetBranchAddress("nTrueInt",&nTrueInt); tree->SetBranchStatus("nTrueInt",1); } + tree->SetBranchAddress("isData", &isData); tree->SetBranchStatus("isData", 1); + + + // Different name for MC and data + if(isMC==1){ tree->SetBranchAddress("HLT_HH4bLowLumi", &trigger_HLT_HH4bLowLumi); tree->SetBranchStatus("HLT_HH4bLowLumi", 1); } + else { tree->SetBranchAddress("HLT_HH4bLowLumi", &trigger_HLT_HH4bLowLumi); tree->SetBranchStatus("HLT_HH4bLowLumi", 1); } + if(isMC==1){ tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",1); } + else { tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",1); } + + if(isMC==1){ tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",1); } + else { tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",&trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v",1); } + + tree->SetBranchAddress("Vtype", &(vType)); tree->SetBranchStatus("Vtype", 1); + if(isMC==1){ tree->SetBranchAddress("puWeight", &(puWeight)); tree->SetBranchStatus("puWeight", 1); } + if(isMC==1){ tree->SetBranchAddress("genWeight", &(genWeight)); tree->SetBranchStatus("genWeight", 1); } + tree->SetBranchAddress("nJet", &(nJets)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("Jet_btagCSV", &(jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(jet_btagCMVA)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + if(isMC==1){ tree->SetBranchAddress("Jet_btagCSVM_SF_up", &(jet_btagCMVAMSFUp)); tree->SetBranchStatus("Jet_btagCSVM_SF_up", 1); + tree->SetBranchAddress("Jet_btagCSVM_SF_down", &(jet_btagCMVAMSFDown)); tree->SetBranchStatus("Jet_btagCSVM_SF_down", 1); + tree->SetBranchAddress("Jet_btagCSVM_SF", &(jet_btagCMVAMSF)); tree->SetBranchStatus("Jet_btagCSVM_SF", 1); } + tree->SetBranchAddress("Jet_pt", &(jet_pT)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_rawPt", &(jet_rawpT)); tree->SetBranchStatus("Jet_rawPt", 1); + tree->SetBranchAddress("Jet_eta", &(jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_phi", &(jet_phi)); tree->SetBranchStatus("Jet_phi", 1); + tree->SetBranchAddress("Jet_mass", &(jet_mass)); tree->SetBranchStatus("Jet_mass", 1); + if(isMC==1){ tree->SetBranchAddress("Jet_mcPt", &(jet_MCpT)); tree->SetBranchStatus("Jet_mcPt", 1); + tree->SetBranchAddress("Jet_mcEta", &(jet_MCeta)); tree->SetBranchStatus("Jet_mcEta", 1); + tree->SetBranchAddress("Jet_mcPhi", &(jet_MCphi)); tree->SetBranchStatus("Jet_mcPhi", 1); + tree->SetBranchAddress("Jet_mcM", &(jet_MCmass)); tree->SetBranchStatus("Jet_mcM", 1); + tree->SetBranchAddress("nGenHiggsBoson", &(nGenHiggsBoson)); tree->SetBranchStatus("nGenHiggsBoson",1); + tree->SetBranchAddress("GenHiggsBoson_pt", &(genHiggsBoson_pT)); tree->SetBranchStatus("GenHiggsBoson_pt",1); + tree->SetBranchAddress("GenHiggsBoson_eta", &(genHiggsBoson_eta)); tree->SetBranchStatus("GenHiggsBoson_eta",1); + tree->SetBranchAddress("GenHiggsBoson_phi", &(genHiggsBoson_phi)); tree->SetBranchStatus("GenHiggsBoson_phi",1); + tree->SetBranchAddress("GenHiggsBoson_mass", &(genHiggsBoson_mass)); tree->SetBranchStatus("GenHiggsBoson_mass",1); + tree->SetBranchAddress("nGenBQuarkFromH", &(nGenBQuarkFromH)); tree->SetBranchStatus("nGenBQuarkFromH",1); + tree->SetBranchAddress("GenBQuarkFromH_pt", &(genBQuarkFromH_pT)); tree->SetBranchStatus("GenBQuarkFromH_pt", 1); + tree->SetBranchAddress("GenBQuarkFromH_eta", &(genBQuarkFromH_eta)); tree->SetBranchStatus("GenBQuarkFromH_eta", 1); + tree->SetBranchAddress("GenBQuarkFromH_phi", &(genBQuarkFromH_phi)); tree->SetBranchStatus("GenBQuarkFromH_phi", 1); + tree->SetBranchAddress("GenBQuarkFromH_mass", &(genBQuarkFromH_mass)); tree->SetBranchStatus("GenBQuarkFromH_mass", 1); } + tree->SetBranchAddress("met_pt", &(met_pT)); tree->SetBranchStatus("met_pt", 1); + tree->SetBranchAddress("met_phi", &(met_phi)); tree->SetBranchStatus("met_phi", 1); + tree->SetBranchAddress("Jet_corr", &(jet_corrJEC)); + tree->SetBranchAddress("Jet_corr_JECUp", &(jet_corrJECUp)); + tree->SetBranchAddress("Jet_corr_JECDown", &(jet_corrJECDown)); + if(isMC==1){ tree->SetBranchAddress("Jet_corr_JER", &(jet_corrJER)); + tree->SetBranchAddress("Jet_corr_JERUp", &(jet_corrJERUp)); + tree->SetBranchAddress("Jet_corr_JERDown", &(jet_corrJERDown)); + tree->SetBranchAddress("Jet_mcFlavour", &(jet_flavor));// tree->SetBranchStatus("Jet_Flavour", 1); + } + if(isMC==1){ tree->SetBranchAddress("btagWeightCMVAV2", &(btagWeightsCMVAV2));} + + tree->SetBranchAddress("Jet_puId", &(jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + + if (regressionFile!="") + { + tree->SetBranchAddress("Jet_corr", &(jet_corr)); + tree->SetBranchAddress("nPVs", &(nPVs)); + tree->SetBranchAddress("Jet_leadTrackPt", &(jet_leadTrackPt)); + tree->SetBranchAddress("Jet_leptonPtRel", &(jet_leptonPtRel)); + tree->SetBranchAddress("Jet_leptonPt", &(jet_leptonPt)); + tree->SetBranchAddress("Jet_leptonDeltaR", &(jet_leptonDeltaR)); + tree->SetBranchAddress("Jet_neHEF", &(jet_neHEF)); + tree->SetBranchAddress("Jet_chHEF", &(jet_chHEF)); + tree->SetBranchAddress("Jet_neEmEF", &(jet_neEmEF)); + tree->SetBranchAddress("Jet_chMult", &(jet_chMult)); + tree->SetBranchAddress("Jet_vtxPt", &(jet_vtxPt)); + tree->SetBranchAddress("Jet_vtxMass", &(jet_vtxMass)); + tree->SetBranchAddress("Jet_vtx3DVal", &(jet_vtx3dL)); + tree->SetBranchAddress("Jet_vtx3DSig", &(jet_vtx3deL)); + tree->SetBranchAddress("Jet_vtxNtracks", &(jet_vtxNtrk)); + } + + TH1F *h_nCbJets=new TH1F("h_nCbJets", "; #Jets with |#eta|<2.5, p_{T} > 30 GeV, CMVA > CMVAM; Events", 10, 0., 10.); + + TH1F *h_pTOrder_JetpT_1=new TH1F("h_pTOrder_JetpT_1", "; Jet pT 1 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 800.); + TH1F *h_pTOrder_JetpT_2=new TH1F("h_pTOrder_JetpT_2", "; Jet pT 2 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 500.); + TH1F *h_pTOrder_JetpT_3=new TH1F("h_pTOrder_JetpT_3", "; Jet pT 3 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 350.); + TH1F *h_pTOrder_JetpT_4=new TH1F("h_pTOrder_JetpT_4", "; Jet pT 4 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); + TH1F *h_pTOrder_JetpT_5=new TH1F("h_pTOrder_JetpT_5", "; Jet pT 5 for jets with |#eta|<2.5 (GeV); Events", 50, 0., 250.); + TH1F *h_CSVOrder_JetCSV_1=new TH1F("h_CSVOrder_JetCSV_1", "; Jet CSV 1 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CSVOrder_JetCSV_2=new TH1F("h_CSVOrder_JetCSV_2", "; Jet CSV 2 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CSVOrder_JetCSV_3=new TH1F("h_CSVOrder_JetCSV_3", "; Jet CSV 3 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CSVOrder_JetCSV_4=new TH1F("h_CSVOrder_JetCSV_4", "; Jet CSV 4 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CMVAOrder_JetCMVA_1=new TH1F("h_CMVAOrder_JetCMVA_1", "; Jet CMVA 1 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CMVAOrder_JetCMVA_2=new TH1F("h_CMVAOrder_JetCMVA_2", "; Jet CMVA 2 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CMVAOrder_JetCMVA_3=new TH1F("h_CMVAOrder_JetCMVA_3", "; Jet CMVA 3 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + TH1F *h_CMVAOrder_JetCMVA_4=new TH1F("h_CMVAOrder_JetCMVA_4", "; Jet CMVA 4 for jets with |#eta|<2.5, p_{T} > 30 GeV; Events", 50, -1., 1.); + + TH1F *hSF =new TH1F("hSF"," ", 100, 0., 2.); + TH1F *hWeight =new TH1F("hWeight"," ", 100, 0., 2.); + + TH1F *h_GenX_mass=new TH1F("h_GenX_mass", "; m_{X}^{GEN} (GeV); Events", 1800, 200, 2000); + TH1F *h_dR_genHbb=new TH1F("h_dR_genHbb", "; #Delta R(b#bar{b}}; Events", 1000, 0., 5.); + + TH1F *h_MET=new TH1F("h_MET", "; MET (GeV); Events", 50, 0., 500.); + TH1F *h_MET_phi=new TH1F("h_MET_phi", "; #phi_{MET} (GeV)", 50, -pi, pi); + + TH1F *h_Cuts=new TH1F("h_Cuts", "Cut flow", 18, 0, 18); + TAxis *a_Cuts=h_Cuts->GetXaxis(); + a_Cuts->SetBinLabel(2, "Initial"); + a_Cuts->SetBinLabel(4, "..."); + a_Cuts->SetBinLabel(6, "Vtype"); + a_Cuts->SetBinLabel(8, "nCbJets>=4"); + a_Cuts->SetBinLabel(10, "Trigger"); + a_Cuts->SetBinLabel(12, "Weight"); + a_Cuts->SetBinLabel(14, "Weight Up"); + a_Cuts->SetBinLabel(16, "Weight Down"); + + // Output tree in new file + std::string outfilename="PreSelected_"+sample+".root"; + // TFile *outfile=new TFile(outfilename.c_str(), "recreate"); + //TTree *outtree=tree->CloneTree(0); + float jet_regressed_pT[100]; + std::vector jetIndex_CentralpT40btag_pTOrder; + std::vector jetIndex_CentralpT40btag_CSVOrder; + std::vector jetIndex_CentralpT40btag_CMVAOrder; + std::vector jetIndex_CentralpT40_CSVOrder; + std::vector jetIndex_Central_pTOrder; +/* outtree->Branch("Jet_regressed_pt", jet_regressed_pT, "Jet_regressed_pt[nJet]/F"); + outtree->Branch("jetIndex_CentralpT40btag_pTOrder", &jetIndex_CentralpT40btag_pTOrder); + outtree->Branch("jetIndex_CentralpT40btag_CSVOrder", &jetIndex_CentralpT40btag_CSVOrder); + outtree->Branch("jetIndex_CentralpT40btag_CMVAOrder", &jetIndex_CentralpT40btag_CMVAOrder); + outtree->Branch("jetIndex_Central_pTOrder", &jetIndex_Central_pTOrder); + outtree->Branch("jetIndex_CentralpT40_CSVOrder", &jetIndex_CentralpT40_CSVOrder); + outtree->Branch("eventWeight", eventWeight);*/ + + // Loop over events + int nEvents=tree->GetEntries(); + double nCut0=0, nCut1=0, nCut2=0, nCut3=0, nCut4=0, nCut5=0,nCut5u=0,nCut5d=0, c=0; + double nTrig1=0, nTrig12=0, nTrig2=0; + for (int i=0; iGetEvent(i); + + eventWeight=1; + if (isData!=1) eventWeight=puWeight;//weight2( nTrueInt )*genWeight/fabs(genWeight); + if (isData!=1) eventWeight*=genWeight/fabs(genWeight); + if (isData!=1) + { + if (nGenHiggsBoson==2) + { + TLorentzVector gen_H1,gen_H2; + gen_H1.SetPtEtaPhiM(genHiggsBoson_pT[0], genHiggsBoson_eta[0], genHiggsBoson_phi[0], genHiggsBoson_mass[0]); + gen_H2.SetPtEtaPhiM(genHiggsBoson_pT[1], genHiggsBoson_eta[1], genHiggsBoson_phi[1], genHiggsBoson_mass[1]); + h_GenX_mass->Fill((gen_H1+gen_H2).M(), eventWeight); + } + + if (nGenBQuarkFromH==4) + { + TLorentzVector gen_H1_b, gen_H1_bbar; + gen_H1_b.SetPtEtaPhiM(genBQuarkFromH_pT[0], genBQuarkFromH_eta[0], genBQuarkFromH_phi[0], genBQuarkFromH_mass[0]); + gen_H1_bbar.SetPtEtaPhiM(genBQuarkFromH_pT[1], genBQuarkFromH_eta[1], genBQuarkFromH_phi[1], genBQuarkFromH_mass[1]); + h_dR_genHbb->Fill(gen_H1_b.DeltaR(gen_H1_bbar), eventWeight); + } + } + + h_MET->Fill(met_pT, eventWeight); + h_MET_phi->Fill(met_phi, eventWeight); + + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v!=1) nTrig1+=1; + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v==1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v==1) nTrig12+=1; + if (trigger_HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v!=1 && trigger_HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v==1) nTrig2+=1; + + // std::cout<<"trigger_HLT_HH4bLowLumi = "< 30) sumpt=sumpt+jet_pT[j]; + if (jet_pT[j]>jet_pT_cut) + { + jetList_Central_pTOrder[jet_pT[j]]=j; + + if (jet_btagCMVA[j]>0.185) ++nCVMAM; + if (jet_btagCSV[j]>-1) + { + // ++nCbJets; + jetList_CentralpT40_CSVOrder[jet_btagCSV[j]]=j; + if (jet_btagCSV[j]>jet_btag_cut) + { + //sumpt=sumpt+jet_pT[j]; + + nCbJets++; + if( nCbJets<= 4 && isData!=1) + { + if (sigmabTagUnc_string=="bTagp1") eventWeight=eventWeight*(jet_btagCMVAMSFUp[j]); + if (sigmabTagUnc_string=="bTagm1") eventWeight=eventWeight*(jet_btagCMVAMSFDown[j]); + //if (sigmabTagUnc_string!="bTagm1" && sigmabTagUnc_string!="bTagp1" ) eventWeight=eventWeight*jet_btagCMVAMSF[j]; + } + jetList_CentralpT40btag_pTOrder[jet_pT[j]]=j; + if (jet_btagCSV[j]>0) jetList_CentralpT40btag_CSVOrder[jet_btagCSV[j]]=j; + jetList_CentralpT40btag_CMVAOrder[jet_btagCSV[j]+0.0000001*j]=j; + // std::cout<< nCbJets << " cmva "<=4 )// && jetIndex_Central_pTOrder.size()>3)// && nCVMAM>=4) + { + fillIndexVectorFromJetList(jetList_CentralpT40btag_CMVAOrder, &jetIndex_CentralpT40btag_CMVAOrder); + fillIndexVectorFromJetList(jetList_Central_pTOrder, &jetIndex_Central_pTOrder); + int ajetIndex = jetIndex_CentralpT40btag_CMVAOrder.at(2); + float CSV3 = jet_btagCSV[ajetIndex]; + float CSV1 = jet_btagCSV[jetIndex_CentralpT40btag_CMVAOrder.at(0)]; + float CSV2 = jet_btagCSV[jetIndex_CentralpT40btag_CMVAOrder.at(1)]; + float CSV4 = jet_btagCSV[jetIndex_CentralpT40btag_CMVAOrder.at(3)]; + //std::cout<< " CSV3: "<< CSV3 << " CSV1 "<=4)){ GoodJets[counter]=j; CSV[counter]=jet_btagCSV[j]; counter++; } + // float pt4 = jet_pT[GoodJets[3]]; + // float pt2 = jet_pT[GoodJets[1]]; + + +// float sumpt =jet_pT[GoodJets[0]]+jet_pT[GoodJets[1]]+jet_pT[GoodJets[2]]+jet_pT[GoodJets[3]]; +// std::sort( CSV, CSV+counter, std::greater() ); + // float CSV3 = TMath::Min(CSV[2], (float) 0.9999999999); + + //CSV3=-log(1-CSV3+1.e-7); + //if( counter >=4 && pt4>30 ) + {// at least 4 good jets + + + + ////////////////////////////////////////////////////////////////////////// + // + // + + bool foundHH=false; + double m_diff_old=70.; + double chi2_old=200.; + int H1jet1_i=-1, H1jet2_i=-1; + int H2jet1_i=-1, H2jet2_i=-1; + + double mean_H1_mass_=120;//125; + double sigma_H1_mass_=25; + double mean_H2_mass_=120;//125; + double sigma_H2_mass_=25; + //std::cout<<"evt = "<Fill(1, nCut0); // Initial + h_Cuts->Fill(3, nCut1); // ... + h_Cuts->Fill(5, nCut2); // Vtype + h_Cuts->Fill(7, nCut3); // nCbJets>=4 + h_Cuts->Fill(9, nCut4); // Trigger + h_Cuts->Fill(11, nCut5); // Weight + h_Cuts->Fill(13, nCut5u); // Weight Down + h_Cuts->Fill(15, nCut5d); // Weight Up + + std::cout << (float)nCut4/nCut3<< std::endl; + std::cout << c<< std::endl; + std::cout << (float) nCut5/nCut3 << std::endl; + std::cout << (float)nCut5u/nCut3 << std::endl; + std::cout << (float) nCut5d/nCut3 << std::endl; + + + std::string histfilename="Histograms_Trigger_"+sample+".root"; + TFile *tFile=new TFile(histfilename.c_str(), "RECREATE"); + h_nCbJets->Write(); + h_pTOrder_JetpT_1->Write(); + h_pTOrder_JetpT_2->Write(); + h_pTOrder_JetpT_3->Write(); + h_pTOrder_JetpT_4->Write(); + h_pTOrder_JetpT_5->Write(); + h_CSVOrder_JetCSV_1->Write(); + h_CSVOrder_JetCSV_2->Write(); + h_CSVOrder_JetCSV_3->Write(); + h_CSVOrder_JetCSV_4->Write(); + h_CMVAOrder_JetCMVA_1->Write(); + h_CMVAOrder_JetCMVA_2->Write(); + h_CMVAOrder_JetCMVA_3->Write(); + h_CMVAOrder_JetCMVA_4->Write(); + hSF->Write(); + if(isMC==1){ hWeight->Write(); } + + h_GenX_mass->Write(); + h_dR_genHbb->Write(); + h_MET->Write(); + h_MET_phi->Write(); + h_Cuts->Write(); + tFile->Write(); + tFile->Close(); + std::cout<<"Wrote output file "< +#include +#include +#include + + +BTagEntry::Parameters::Parameters( + OperatingPoint op, + std::string measurement_type, + std::string sys_type, + JetFlavor jf, + float eta_min, + float eta_max, + float pt_min, + float pt_max, + float discr_min, + float discr_max +): + operatingPoint(op), + measurementType(measurement_type), + sysType(sys_type), + jetFlavor(jf), + etaMin(eta_min), + etaMax(eta_max), + ptMin(pt_min), + ptMax(pt_max), + discrMin(discr_min), + discrMax(discr_max) +{ + std::transform(measurementType.begin(), measurementType.end(), + measurementType.begin(), ::tolower); + std::transform(sysType.begin(), sysType.end(), + sysType.begin(), ::tolower); +} + +BTagEntry::BTagEntry(const std::string &csvLine) +{ + // make tokens + std::stringstream buff(csvLine); + std::vector vec; + std::string token; + while (std::getline(buff, token, ","[0])) { + token = BTagEntry::trimStr(token); + if (token.empty()) { + continue; + } + vec.push_back(token); + } + if (vec.size() != 11) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid csv line; num tokens != 11: " + << csvLine; +throw std::exception(); + } + + // clean string values + char chars[] = " \"\n"; + for (unsigned int i = 0; i < strlen(chars); ++i) { + vec[1].erase(remove(vec[1].begin(),vec[1].end(),chars[i]),vec[1].end()); + vec[2].erase(remove(vec[2].begin(),vec[2].end(),chars[i]),vec[2].end()); + vec[10].erase(remove(vec[10].begin(),vec[10].end(),chars[i]),vec[10].end()); + } + + // make formula + formula = vec[10]; + TF1 f1("", formula.c_str()); // compile formula to check validity + if (f1.IsZombie()) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid csv line; formula does not compile: " + << csvLine; +throw std::exception(); + } + + // make parameters + unsigned op = stoi(vec[0]); + if (op > 3) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid csv line; OperatingPoint > 3: " + << csvLine; +throw std::exception(); + } + unsigned jf = stoi(vec[3]); + if (jf > 2) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid csv line; JetFlavor > 2: " + << csvLine; +throw std::exception(); + } + params = BTagEntry::Parameters( + BTagEntry::OperatingPoint(op), + vec[1], + vec[2], + BTagEntry::JetFlavor(jf), + stof(vec[4]), + stof(vec[5]), + stof(vec[6]), + stof(vec[7]), + stof(vec[8]), + stof(vec[9]) + ); +} + +BTagEntry::BTagEntry(const std::string &func, BTagEntry::Parameters p): + formula(func), + params(p) +{ + TF1 f1("", formula.c_str()); // compile formula to check validity + if (f1.IsZombie()) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid func string; formula does not compile: " + << func; +throw std::exception(); + } +} + +BTagEntry::BTagEntry(const TF1* func, BTagEntry::Parameters p): + formula(std::string(func->GetExpFormula("p").Data())), + params(p) +{ + if (func->IsZombie()) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid TF1 function; function is zombie: " + << func->GetName(); +throw std::exception(); + } +} + +// Creates chained step functions like this: +// " : x" +// e.g. "x<0 ? 1 : x<1 ? 2 : x<2 ? 3 : 4" +std::string th1ToFormulaLin(const TH1* hist) { + int nbins = hist->GetNbinsX(); + TAxis const* axis = hist->GetXaxis(); + std::stringstream buff; + buff << "x<" << axis->GetBinLowEdge(1) << " ? 0. : "; // default value + for (int i=1; iGetBinUpEdge(i), + hist->GetBinContent(i)); + buff << tmp_buff; + } + buff << 0.; // default value + return buff.str(); +} + +// Creates step functions making a binary search tree: +// "x) : ()" +// e.g. "x<2 ? (x<1 ? (x<0 ? 0:0.1) : (1)) : (x<4 ? (x<3 ? 2:3) : (0))" +std::string th1ToFormulaBinTree(const TH1* hist, int start=0, int end=-1) { + if (end == -1) { // initialize + start = 0.; + end = hist->GetNbinsX()+1; + TH1* h2 = (TH1*) hist->Clone(); + h2->SetBinContent(start, 0); // kill underflow + h2->SetBinContent(end, 0); // kill overflow + std::string res = th1ToFormulaBinTree(h2, start, end); + delete h2; + return res; + } + if (start == end) { // leave is reached + char tmp_buff[20]; + sprintf(tmp_buff, "%g", hist->GetBinContent(start)); + return std::string(tmp_buff); + } + if (start == end - 1) { // no parenthesis for neighbors + char tmp_buff[70]; + sprintf(tmp_buff, + "x<%g ? %g:%g", + hist->GetXaxis()->GetBinUpEdge(start), + hist->GetBinContent(start), + hist->GetBinContent(end)); + return std::string(tmp_buff); + } + + // top-down recursion + std::stringstream buff; + int mid = (end-start)/2 + start; + char tmp_buff[25]; + sprintf(tmp_buff, + "x<%g ? (", + hist->GetXaxis()->GetBinUpEdge(mid)); + buff << tmp_buff + << th1ToFormulaBinTree(hist, start, mid) + << ") : (" + << th1ToFormulaBinTree(hist, mid+1, end) + << ")"; + return buff.str(); +} + +BTagEntry::BTagEntry(const TH1* hist, BTagEntry::Parameters p): + params(p) +{ + int nbins = hist->GetNbinsX(); + TAxis const* axis = hist->GetXaxis(); + + // overwrite bounds with histo values + if (params.operatingPoint == BTagEntry::OP_RESHAPING) { + params.discrMin = axis->GetBinLowEdge(1); + params.discrMax = axis->GetBinUpEdge(nbins); + } else { + params.ptMin = axis->GetBinLowEdge(1); + params.ptMax = axis->GetBinUpEdge(nbins); + } + + // balanced full binary tree height = ceil(log(2*n_leaves)/log(2)) + // breakes even around 10, but lower values are more propable in pt-spectrum + if (nbins < 15) { + formula = th1ToFormulaLin(hist); + } else { + formula = th1ToFormulaBinTree(hist); + } + + // compile formula to check validity + TF1 f1("", formula.c_str()); + if (f1.IsZombie()) { +std::cerr << "ERROR in BTagCalibration: " + << "Invalid histogram; formula does not compile (>150 bins?): " + << hist->GetName(); +throw std::exception(); + } +} + +std::string BTagEntry::makeCSVHeader() +{ + return "OperatingPoint, " + "measurementType, " + "sysType, " + "jetFlavor, " + "etaMin, " + "etaMax, " + "ptMin, " + "ptMax, " + "discrMin, " + "discrMax, " + "formula \n"; +} + +std::string BTagEntry::makeCSVLine() const +{ + std::stringstream buff; + buff << params.operatingPoint + << ", " << params.measurementType + << ", " << params.sysType + << ", " << params.jetFlavor + << ", " << params.etaMin + << ", " << params.etaMax + << ", " << params.ptMin + << ", " << params.ptMax + << ", " << params.discrMin + << ", " << params.discrMax + << ", \"" << formula + << "\" \n"; + return buff.str(); +} + +std::string BTagEntry::trimStr(std::string str) { + size_t s = str.find_first_not_of(" \n\r\t"); + size_t e = str.find_last_not_of (" \n\r\t"); + + if((std::string::npos == s) || (std::string::npos == e)) + return ""; + else + return str.substr(s, e-s+1); +} + + +#include +#include + + + +BTagCalibration::BTagCalibration(const std::string &taggr): + tagger_(taggr) +{} + +BTagCalibration::BTagCalibration(const std::string &taggr, + const std::string &filename): + tagger_(taggr) +{ + std::ifstream ifs(filename); + if (!ifs.good()) { +std::cerr << "ERROR in BTagCalibration: " + << "input file not available: " + << filename; +throw std::exception(); + } + readCSV(ifs); + ifs.close(); +} + +void BTagCalibration::addEntry(const BTagEntry &entry) +{ + data_[token(entry.params)].push_back(entry); +} + +const std::vector& BTagCalibration::getEntries( + const BTagEntry::Parameters &par) const +{ + std::string tok = token(par); + if (!data_.count(tok)) { +std::cerr << "ERROR in BTagCalibration: " + << "(OperatingPoint, measurementType, sysType) not available: " + << tok; +throw std::exception(); + } + return data_.at(tok); +} + +void BTagCalibration::readCSV(const std::string &s) +{ + std::stringstream buff(s); + readCSV(buff); +} + +void BTagCalibration::readCSV(std::istream &s) +{ + std::string line; + + // firstline might be the header + getline(s,line); + if (line.find("OperatingPoint") == std::string::npos) { + addEntry(BTagEntry(line)); + } + + while (getline(s,line)) { + line = BTagEntry::trimStr(line); + if (line.empty()) { // skip empty lines + continue; + } + addEntry(BTagEntry(line)); + } +} + +void BTagCalibration::makeCSV(std::ostream &s) const +{ + s << tagger_ << ";" << BTagEntry::makeCSVHeader(); + for (std::map >::const_iterator i + = data_.cbegin(); i != data_.cend(); ++i) { + const std::vector &vec = i->second; + for (std::vector::const_iterator j + = vec.cbegin(); j != vec.cend(); ++j) { + s << j->makeCSVLine(); + } + } +} + +std::string BTagCalibration::makeCSV() const +{ + std::stringstream buff; + makeCSV(buff); + return buff.str(); +} + +std::string BTagCalibration::token(const BTagEntry::Parameters &par) +{ + std::stringstream buff; + buff << par.operatingPoint << ", " + << par.measurementType << ", " + << par.sysType; + return buff.str(); +} + + + + +class BTagCalibrationReader::BTagCalibrationReaderImpl +{ + friend class BTagCalibrationReader; + +public: + struct TmpEntry { + float etaMin; + float etaMax; + float ptMin; + float ptMax; + float discrMin; + float discrMax; + TF1 func; + }; + +private: + BTagCalibrationReaderImpl(BTagEntry::OperatingPoint op, + const std::string & sysType, + const std::vector & otherSysTypes={}); + + void load(const BTagCalibration & c, + BTagEntry::JetFlavor jf, + std::string measurementType); + + double eval(BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr) const; + + double eval_auto_bounds(const std::string & sys, + BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr) const; + + std::pair min_max_pt(BTagEntry::JetFlavor jf, + float eta, + float discr) const; + + BTagEntry::OperatingPoint op_; + std::string sysType_; + std::vector > tmpData_; // first index: jetFlavor + std::vector useAbsEta_; // first index: jetFlavor + std::map> otherSysTypeReaders_; +}; + + +BTagCalibrationReader::BTagCalibrationReaderImpl::BTagCalibrationReaderImpl( + BTagEntry::OperatingPoint op, + const std::string & sysType, + const std::vector & otherSysTypes): + op_(op), + sysType_(sysType), + tmpData_(3), + useAbsEta_(3, true) +{ + for (const std::string & ost : otherSysTypes) { + if (otherSysTypeReaders_.count(ost)) { +std::cerr << "ERROR in BTagCalibration: " + << "Every otherSysType should only be given once. Duplicate: " + << ost; +throw std::exception(); + } + otherSysTypeReaders_[ost] = std::auto_ptr( + new BTagCalibrationReaderImpl(op, ost) + ); + } +} + +void BTagCalibrationReader::BTagCalibrationReaderImpl::load( + const BTagCalibration & c, + BTagEntry::JetFlavor jf, + std::string measurementType) +{ + if (tmpData_[jf].size()) { +std::cerr << "ERROR in BTagCalibration: " + << "Data for this jet-flavor is already loaded: " + << jf; +throw std::exception(); + } + + BTagEntry::Parameters params(op_, measurementType, sysType_); + const std::vector &entries = c.getEntries(params); + + for (const auto &be : entries) { + if (be.params.jetFlavor != jf) { + continue; + } + + TmpEntry te; + te.etaMin = be.params.etaMin; + te.etaMax = be.params.etaMax; + te.ptMin = be.params.ptMin; + te.ptMax = be.params.ptMax; + te.discrMin = be.params.discrMin; + te.discrMax = be.params.discrMax; + + if (op_ == BTagEntry::OP_RESHAPING) { + te.func = TF1("", be.formula.c_str(), + be.params.discrMin, be.params.discrMax); + } else { + te.func = TF1("", be.formula.c_str(), + be.params.ptMin, be.params.ptMax); + } + + tmpData_[be.params.jetFlavor].push_back(te); + if (te.etaMin < 0) { + useAbsEta_[be.params.jetFlavor] = false; + } + } + + for (auto & p : otherSysTypeReaders_) { + p.second->load(c, jf, measurementType); + } +} + +double BTagCalibrationReader::BTagCalibrationReaderImpl::eval( + BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr) const +{ + bool use_discr = (op_ == BTagEntry::OP_RESHAPING); + if (useAbsEta_[jf] && eta < 0) { + eta = -eta; + } + + // search linearly through eta, pt and discr ranges and eval + // future: find some clever data structure based on intervals + const auto &entries = tmpData_.at(jf); + for (unsigned i=0; i sf_bounds.second) { + pt_for_eval = sf_bounds.second - .0001; + is_out_of_bounds = true; + } + + // get central SF (and maybe return) + double sf = eval(jf, eta, pt_for_eval, discr); + if (sys == sysType_) { + return sf; + } + + // get sys SF (and maybe return) + if (!otherSysTypeReaders_.count(sys)) { +std::cerr << "ERROR in BTagCalibration: " + << "sysType not available (maybe not loaded?): " + << sys; +throw std::exception(); + } + double sf_err = otherSysTypeReaders_.at(sys)->eval(jf, eta, pt_for_eval, discr); + if (!is_out_of_bounds) { + return sf_err; + } + + // double uncertainty on out-of-bounds and return + sf_err = sf + 2*(sf_err - sf); + return sf_err; +} + +std::pair BTagCalibrationReader::BTagCalibrationReaderImpl::min_max_pt( + BTagEntry::JetFlavor jf, + float eta, + float discr) const +{ + bool use_discr = (op_ == BTagEntry::OP_RESHAPING); + if (useAbsEta_[jf] && eta < 0) { + eta = -eta; + } + + const auto &entries = tmpData_.at(jf); + float min_pt = -1., max_pt = -1.; + for (const auto & e: entries) { + if ( + e.etaMin <= eta && eta < e.etaMax // find eta + ){ + if (min_pt < 0.) { // init + min_pt = e.ptMin; + max_pt = e.ptMax; + continue; + } + + if (use_discr) { // discr. reshaping? + if (e.discrMin <= discr && discr < e.discrMax) { // check discr + min_pt = min_pt < e.ptMin ? min_pt : e.ptMin; + max_pt = max_pt > e.ptMax ? max_pt : e.ptMax; + } + } else { + min_pt = min_pt < e.ptMin ? min_pt : e.ptMin; + max_pt = max_pt > e.ptMax ? max_pt : e.ptMax; + } + } + } + + return std::make_pair(min_pt, max_pt); +} + + +BTagCalibrationReader::BTagCalibrationReader(BTagEntry::OperatingPoint op, + const std::string & sysType, + const std::vector & otherSysTypes): + pimpl(new BTagCalibrationReaderImpl(op, sysType, otherSysTypes)) {} + +void BTagCalibrationReader::load(const BTagCalibration & c, + BTagEntry::JetFlavor jf, + const std::string & measurementType) +{ + pimpl->load(c, jf, measurementType); +} + +double BTagCalibrationReader::eval(BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr) const +{ + return pimpl->eval(jf, eta, pt, discr); +} + +double BTagCalibrationReader::eval_auto_bounds(const std::string & sys, + BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr) const +{ + return pimpl->eval_auto_bounds(sys, jf, eta, pt, discr); +} + +std::pair BTagCalibrationReader::min_max_pt(BTagEntry::JetFlavor jf, + float eta, + float discr) const +{ + return pimpl->min_max_pt(jf, eta, discr); +} + + diff --git a/AnalysisCode/PDFs/BTagCalibrationStandalone.h b/AnalysisCode/PDFs/BTagCalibrationStandalone.h new file mode 100644 index 0000000..ae09d73 --- /dev/null +++ b/AnalysisCode/PDFs/BTagCalibrationStandalone.h @@ -0,0 +1,189 @@ +#ifndef BTagEntry_H +#define BTagEntry_H + +/** + * + * BTagEntry + * + * Represents one pt- or discriminator-dependent calibration function. + * + * measurement_type: e.g. comb, ttbar, di-mu, boosted, ... + * sys_type: e.g. central, plus, minus, plus_JEC, plus_JER, ... + * + * Everything is converted into a function, as it is easiest to store it in a + * txt or json file. + * + ************************************************************/ + +#include +#include +#include + + +class BTagEntry +{ +public: + enum OperatingPoint { + OP_LOOSE=0, + OP_MEDIUM=1, + OP_TIGHT=2, + OP_RESHAPING=3, + }; + enum JetFlavor { + FLAV_B=0, + FLAV_C=1, + FLAV_UDSG=2, + }; + struct Parameters { + OperatingPoint operatingPoint; + std::string measurementType; + std::string sysType; + JetFlavor jetFlavor; + float etaMin; + float etaMax; + float ptMin; + float ptMax; + float discrMin; + float discrMax; + + // default constructor + Parameters( + OperatingPoint op=OP_TIGHT, + std::string measurement_type="comb", + std::string sys_type="central", + JetFlavor jf=FLAV_B, + float eta_min=-99999., + float eta_max=99999., + float pt_min=0., + float pt_max=99999., + float discr_min=0., + float discr_max=99999. + ); + + }; + + BTagEntry() {} + BTagEntry(const std::string &csvLine); + BTagEntry(const std::string &func, Parameters p); + BTagEntry(const TF1* func, Parameters p); + BTagEntry(const TH1* histo, Parameters p); + ~BTagEntry() {} + static std::string makeCSVHeader(); + std::string makeCSVLine() const; + static std::string trimStr(std::string str); + + // public, no getters needed + std::string formula; + Parameters params; + +}; + +#endif // BTagEntry_H + + +#ifndef BTagCalibration_H +#define BTagCalibration_H + +/** + * BTagCalibration + * + * The 'hierarchy' of stored information is this: + * - by tagger (BTagCalibration) + * - by operating point or reshape bin + * - by jet parton flavor + * - by type of measurement + * - by systematic + * - by eta bin + * - as 1D-function dependent of pt or discriminant + * + ************************************************************/ + +#include +#include +#include +#include +#include + + +class BTagCalibration +{ +public: + BTagCalibration() {} + BTagCalibration(const std::string &tagger); + BTagCalibration(const std::string &tagger, const std::string &filename); + ~BTagCalibration() {} + + std::string tagger() const {return tagger_;} + + void addEntry(const BTagEntry &entry); + const std::vector& getEntries(const BTagEntry::Parameters &par) const; + + void readCSV(std::istream &s); + void readCSV(const std::string &s); + void makeCSV(std::ostream &s) const; + std::string makeCSV() const; + +protected: + static std::string token(const BTagEntry::Parameters &par); + + std::string tagger_; + std::map > data_; + +}; + +#endif // BTagCalibration_H + + +#ifndef BTagCalibrationReader_H +#define BTagCalibrationReader_H + +/** + * BTagCalibrationReader + * + * Helper class to pull out a specific set of BTagEntry's out of a + * BTagCalibration. TF1 functions are set up at initialization time. + * + ************************************************************/ + +#include +#include + + + +class BTagCalibrationReader +{ +public: + class BTagCalibrationReaderImpl; + + BTagCalibrationReader() {} + BTagCalibrationReader(BTagEntry::OperatingPoint op, + const std::string & sysType="central", + const std::vector & otherSysTypes={}); + + void load(const BTagCalibration & c, + BTagEntry::JetFlavor jf, + const std::string & measurementType="comb"); + + double eval(BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr=0.) const; + + double eval_auto_bounds(const std::string & sys, + BTagEntry::JetFlavor jf, + float eta, + float pt, + float discr=0.) const; + + std::pair min_max_pt(BTagEntry::JetFlavor jf, + float eta, + float discr=0.) const; + +protected: + std::shared_ptr pimpl; +}; + + +#endif // BTagCalibrationReader_H + + diff --git a/AnalysisCode/PDFs/ExpGaussExp.cxx b/AnalysisCode/PDFs/ExpGaussExp.cxx index dff0cc9..d2b9958 100644 --- a/AnalysisCode/PDFs/ExpGaussExp.cxx +++ b/AnalysisCode/PDFs/ExpGaussExp.cxx @@ -10,7 +10,7 @@ #include "Riostream.h" -#include "ExpGaussExp.h" +#include "PDFs/ExpGaussExp.h" #include "RooAbsReal.h" #include "RooAbsCategory.h" #include diff --git a/AnalysisCode/PDFs/deepCSV_BH_Moriond17.csv b/AnalysisCode/PDFs/deepCSV_BH_Moriond17.csv new file mode 100644 index 0000000..764ebb2 --- /dev/null +++ b/AnalysisCode/PDFs/deepCSV_BH_Moriond17.csv @@ -0,0 +1,250 @@ +DeepCSV;OperatingPoint, measurementType, sysType, jetFlavor, etaMin, etaMax, ptMin, ptMax, discrMin, discrMax, formula +0, mujets, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x)))" +0, mujets, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x)))" +0, mujets, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.05210084468126297" +0, mujets, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.030393190681934357" +0, mujets, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.033933129161596298" +0, mujets, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.032112229615449905" +0, mujets, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.032719358801841736" +0, mujets, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.030336670577526093" +0, mujets, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.049079995602369308" +0, mujets, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.050249915570020676" +0, mujets, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.069429211318492889" +0, mujets, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.020840337499976158" +0, mujets, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.012157276272773743" +0, mujets, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.013573251664638519" +0, mujets, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.012844892218708992" +0, mujets, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.013087743893265724" +0, mujets, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.012134668417274952" +0, mujets, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.019631998613476753" +0, mujets, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.02009996585547924" +0, mujets, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))-0.027771685272455215" +0, mujets, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.05210084468126297" +0, mujets, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.030393190681934357" +0, mujets, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.033933129161596298" +0, mujets, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.032112229615449905" +0, mujets, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.032719358801841736" +0, mujets, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.030336670577526093" +0, mujets, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.049079995602369308" +0, mujets, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.050249915570020676" +0, mujets, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.069429211318492889" +0, mujets, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.020840337499976158" +0, mujets, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.012157276272773743" +0, mujets, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.013573251664638519" +0, mujets, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.012844892218708992" +0, mujets, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.013087743893265724" +0, mujets, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.012134668417274952" +0, mujets, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.019631998613476753" +0, mujets, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.02009996585547924" +0, mujets, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.944549*((1.+(0.0094161*x))/(1.+(0.00853295*x))))+0.027771685272455215" +1, mujets, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x)))" +1, mujets, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x)))" +1, mujets, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.061311282217502594" +1, mujets, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.047958873212337494" +1, mujets, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.049318745732307434" +1, mujets, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.039772100746631622" +1, mujets, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.044449083507061005" +1, mujets, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.041772317141294479" +1, mujets, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.069491684436798096" +1, mujets, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.077339120209217072" +1, mujets, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.092476867139339447" +1, mujets, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.020437093451619148" +1, mujets, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.015986291691660881" +1, mujets, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.016439581289887428" +1, mujets, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.013257367536425591" +1, mujets, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.014816360548138618" +1, mujets, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.013924106024205685" +1, mujets, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.023163896054029465" +1, mujets, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.025779707357287407" +1, mujets, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))-0.030825622379779816" +1, mujets, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.061311282217502594" +1, mujets, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.047958873212337494" +1, mujets, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.049318745732307434" +1, mujets, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.039772100746631622" +1, mujets, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.044449083507061005" +1, mujets, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.041772317141294479" +1, mujets, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.069491684436798096" +1, mujets, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.077339120209217072" +1, mujets, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.092476867139339447" +1, mujets, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.020437093451619148" +1, mujets, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.015986291691660881" +1, mujets, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.016439581289887428" +1, mujets, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.013257367536425591" +1, mujets, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.014816360548138618" +1, mujets, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.013924106024205685" +1, mujets, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.023163896054029465" +1, mujets, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.025779707357287407" +1, mujets, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.86062*((1.+(0.0488148*x))/(1.+(0.0420298*x))))+0.030825622379779816" +2, mujets, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.458539*((1.+(0.517532*x))/(1.+(0.242737*x)))" +2, mujets, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.458539*((1.+(0.517532*x))/(1.+(0.242737*x)))" +2, mujets, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.098754741251468658" +2, mujets, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.074303515255451202" +2, mujets, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.072329215705394745" +2, mujets, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.054588425904512405" +2, mujets, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.06574828177690506" +2, mujets, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.06470392644405365" +2, mujets, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.11706253886222839" +2, mujets, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.12250801920890808" +2, mujets, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.13583827018737793" +2, mujets, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.028215641155838966" +2, mujets, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.0212295763194561" +2, mujets, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.020665490999817848" +2, mujets, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.015596693381667137" +2, mujets, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.018785223364830017" +2, mujets, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.018486836925148964" +2, mujets, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.033446438610553741" +2, mujets, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.035002291202545166" +2, mujets, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))-0.038810934871435165" +2, mujets, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.098754741251468658" +2, mujets, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.074303515255451202" +2, mujets, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.072329215705394745" +2, mujets, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.054588425904512405" +2, mujets, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.06574828177690506" +2, mujets, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.06470392644405365" +2, mujets, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.11706253886222839" +2, mujets, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.12250801920890808" +2, mujets, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.13583827018737793" +2, mujets, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.028215641155838966" +2, mujets, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.0212295763194561" +2, mujets, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.020665490999817848" +2, mujets, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.015596693381667137" +2, mujets, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.018785223364830017" +2, mujets, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.018486836925148964" +2, mujets, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.033446438610553741" +2, mujets, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.035002291202545166" +2, mujets, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.458539*((1.+(0.517532*x))/(1.+(0.242737*x))))+0.038810934871435165" +0, comb, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.733112*((1.+(0.336449*x))/(1.+(0.246914*x)))" +0, comb, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.733112*((1.+(0.336449*x))/(1.+(0.246914*x)))" +0, comb, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.05128663033246994" +0, comb, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.029492266476154327" +0, comb, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.030375970527529716" +0, comb, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.028453584760427475" +0, comb, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.027814172208309174" +0, comb, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.028020482510328293" +0, comb, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.038717329502105713" +0, comb, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.046419952064752579" +0, comb, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.06724056601524353" +0, comb, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.020514652132987976" +0, comb, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.011796906590461731" +0, comb, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.012150388211011887" +0, comb, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.01138143427670002" +0, comb, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.011125668883323669" +0, comb, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.011208193376660347" +0, comb, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.01548693235963583" +0, comb, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.018567981198430061" +0, comb, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))-0.026896225288510323" +0, comb, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.05128663033246994" +0, comb, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.029492266476154327" +0, comb, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.030375970527529716" +0, comb, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.028453584760427475" +0, comb, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.027814172208309174" +0, comb, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.028020482510328293" +0, comb, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.038717329502105713" +0, comb, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.046419952064752579" +0, comb, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.06724056601524353" +0, comb, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.020514652132987976" +0, comb, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.011796906590461731" +0, comb, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.012150388211011887" +0, comb, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.01138143427670002" +0, comb, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.011125668883323669" +0, comb, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.011208193376660347" +0, comb, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.01548693235963583" +0, comb, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.018567981198430061" +0, comb, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.733112*((1.+(0.336449*x))/(1.+(0.246914*x))))+0.026896225288510323" +1, comb, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.637301*((1.+(0.479205*x))/(1.+(0.311514*x)))" +1, comb, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.637301*((1.+(0.479205*x))/(1.+(0.311514*x)))" +1, comb, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.061392709612846375" +1, comb, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.042674362659454346" +1, comb, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.039014503359794617" +1, comb, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.038159977644681931" +1, comb, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.03673022985458374" +1, comb, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.035364653915166855" +1, comb, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.04905589297413826" +1, comb, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.071092776954174042" +1, comb, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.089895777404308319" +1, comb, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.020464235916733742" +1, comb, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.01422478724271059" +1, comb, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.01300483476370573" +1, comb, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.01271999254822731" +1, comb, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.01224341057240963" +1, comb, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.011788218282163143" +1, comb, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.016351964324712753" +1, comb, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.023697592318058014" +1, comb, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))-0.02996525913476944" +1, comb, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.061392709612846375" +1, comb, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.042674362659454346" +1, comb, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.039014503359794617" +1, comb, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.038159977644681931" +1, comb, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.03673022985458374" +1, comb, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.035364653915166855" +1, comb, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.04905589297413826" +1, comb, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.071092776954174042" +1, comb, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.089895777404308319" +1, comb, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.020464235916733742" +1, comb, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.01422478724271059" +1, comb, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.01300483476370573" +1, comb, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.01271999254822731" +1, comb, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.01224341057240963" +1, comb, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.011788218282163143" +1, comb, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.016351964324712753" +1, comb, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.023697592318058014" +1, comb, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.637301*((1.+(0.479205*x))/(1.+(0.311514*x))))+0.02996525913476944" +2, comb, central, 1, -2.4, 2.4, 20, 1000, 0, 1, "0.506673*((1.+(0.464958*x))/(1.+(0.239689*x)))" +2, comb, central, 0, -2.4, 2.4, 20, 1000, 0, 1, "0.506673*((1.+(0.464958*x))/(1.+(0.239689*x)))" +2, comb, down, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.097885541617870331" +2, comb, down, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.058861017227172852" +2, comb, down, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.049090541899204254" +2, comb, down, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.04910452663898468" +2, comb, down, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.048373281955718994" +2, comb, down, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.05458967387676239" +2, comb, down, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.072311915457248688" +2, comb, down, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.11711089313030243" +2, comb, down, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.13307270407676697" +2, comb, down, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.027967298403382301" +2, comb, down, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.016817433759570122" +2, comb, down, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.014025868847966194" +2, comb, down, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.014029864221811295" +2, comb, down, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.01382093783468008" +2, comb, down, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.01559704914689064" +2, comb, down, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.020660547539591789" +2, comb, down, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.033460255712270737" +2, comb, down, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))-0.038020770996809006" +2, comb, up, 1, -2.4, 2.4, 20, 30, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.097885541617870331" +2, comb, up, 1, -2.4, 2.4, 30, 50, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.058861017227172852" +2, comb, up, 1, -2.4, 2.4, 50, 70, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.049090541899204254" +2, comb, up, 1, -2.4, 2.4, 70, 100, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.04910452663898468" +2, comb, up, 1, -2.4, 2.4, 100, 140, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.048373281955718994" +2, comb, up, 1, -2.4, 2.4, 140, 200, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.05458967387676239" +2, comb, up, 1, -2.4, 2.4, 200, 300, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.072311915457248688" +2, comb, up, 1, -2.4, 2.4, 300, 600, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.11711089313030243" +2, comb, up, 1, -2.4, 2.4, 600, 1000, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.13307270407676697" +2, comb, up, 0, -2.4, 2.4, 20, 30, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.027967298403382301" +2, comb, up, 0, -2.4, 2.4, 30, 50, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.016817433759570122" +2, comb, up, 0, -2.4, 2.4, 50, 70, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.014025868847966194" +2, comb, up, 0, -2.4, 2.4, 70, 100, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.014029864221811295" +2, comb, up, 0, -2.4, 2.4, 100, 140, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.01382093783468008" +2, comb, up, 0, -2.4, 2.4, 140, 200, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.01559704914689064" +2, comb, up, 0, -2.4, 2.4, 200, 300, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.020660547539591789" +2, comb, up, 0, -2.4, 2.4, 300, 600, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.033460255712270737" +2, comb, up, 0, -2.4, 2.4, 600, 1000, 0, 1, "(0.506673*((1.+(0.464958*x))/(1.+(0.239689*x))))+0.038020770996809006" +0, incl, central, 2, 0, 2.4, 20, 1000, 0, 1, "1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x" +0, incl, down, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1-(0.0849411+5.63903e-05*x+-8.53443e-08*x*x))" +0, incl, down_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1-(0.0836686+5.72305e-05*x+-8.66078e-08*x*x))" +0, incl, down_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1-(0.0144772))" +0, incl, up, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1+(0.0849411+5.63903e-05*x+-8.53443e-08*x*x))" +0, incl, up_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1+(0.0836686+5.72305e-05*x+-8.66078e-08*x*x))" +0, incl, up_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.06765+0.000317422*x+-4.61732e-07*x*x+2.03608e-10*x*x*x)*(1+(0.0144772))" +1, incl, central, 2, 0, 2.4, 20, 1000, 0, 1, "1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x" +1, incl, down, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1-(0.08654+7.51946e-06*x+-2.06793e-09*x*x))" +1, incl, down_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1-(0.0690824+6.29264e-06*x+5.89898e-11*x*x))" +1, incl, down_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1-(0.0534645))" +1, incl, up, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1+(0.08654+7.51946e-06*x+-2.06793e-09*x*x))" +1, incl, up_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1+(0.0690824+6.29264e-06*x+5.89898e-11*x*x))" +1, incl, up_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.03216+0.000504744*x+2.12276e-08*x*x+-2.27663e-10*x*x*x)*(1+(0.0534645))" +2, incl, central, 2, 0, 2.4, 20, 1000, 0, 1, "1.00762+51.6984/(x*x)+0.000370519*x" +2, incl, down, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1-(0.301074+-0.000311873*x+2.63746e-07*x*x))" +2, incl, down_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1-(0.242204+-0.000389286*x+3.27266e-07*x*x))" +2, incl, down_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1-(0.1728))" +2, incl, up, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1+(0.301074+-0.000311873*x+2.63746e-07*x*x))" +2, incl, up_correlated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1+(0.242204+-0.000389286*x+3.27266e-07*x*x))" +2, incl, up_uncorrelated, 2, 0, 2.4, 20, 1000, 0, 1, "(1.00762+51.6984/(x*x)+0.000370519*x)*(1+(0.1728))" diff --git a/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/display_mHmX.c b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/display_mHmX.c new file mode 100644 index 0000000..371f0fd --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/display_mHmX.c @@ -0,0 +1,14 @@ +{ + std::vector files={ + "Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root" + }; + + std::vector mean_gen={260,300,350,400,450}; + + gROOT->LoadMacro("../../DisplaymHmX.cc"); + DisplaymHmX(files, mean_gen, 120, 25, 120, 25); +} diff --git a/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Data.c b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Data.c new file mode 100644 index 0000000..e594ff6 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Data.c @@ -0,0 +1,6 @@ +{ + gSystem->Load("../../libPhysicsToolsKinFitter.so"); + gROOT->LoadMacro("../../HbbHbb_LMRSelection_chi2.cc++"); + HbbHbb_LMRSelection_chi2("Data", "BTagCSV", 300, true); + +} diff --git a/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Graviton.c b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Graviton.c new file mode 100644 index 0000000..b185d10 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/LMRSelection_chi2/processLMRSelection_Graviton.c @@ -0,0 +1,22 @@ +{ + gSystem->Load("../../libPhysicsToolsKinFitter.so"); + gROOT->LoadMacro("../../HbbHbb_LMRSelection_chi2.cc++"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph", 260, true ); +//// HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph", 300, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph", 350, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph", 400, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph", 450, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph", 500, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph", 550, true ); + /*HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph", 260, true ); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph"); +//*/ +} diff --git a/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/display_mHmX.c b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/display_mHmX.c new file mode 100644 index 0000000..a3410ca --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/display_mHmX.c @@ -0,0 +1,14 @@ +{ + std::vector files={ + "Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root" + }; + + std::vector mean_gen={400, 500, 650, 750, 900}; + + gROOT->LoadMacro("../../DisplaymHmX.cc"); + DisplaymHmX(files, mean_gen, 125, 20, 125, 20); +} diff --git a/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Data.c b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Data.c new file mode 100644 index 0000000..2fd41d4 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Data.c @@ -0,0 +1,5 @@ +{ + gSystem->Load("../../libPhysicsToolsKinFitter.so"); + gROOT->LoadMacro("../../HbbHbb_MMRSelection_chi2.cc++"); + HbbHbb_MMRSelection_chi2("Data", "BTagCSV",300,true); +} diff --git a/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Graviton.c b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Graviton.c index b46ef12..4fb587a 100644 --- a/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Graviton.c +++ b/AnalysisCode/PreselectedWithRegression/MMRSelection_chi2/processMMRSelection_Graviton.c @@ -1,15 +1,21 @@ { gSystem->Load("../../libPhysicsToolsKinFitter.so"); gROOT->LoadMacro("../../HbbHbb_MMRSelection_chi2.cc++"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton260GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton270GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton300GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton400GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton600GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton800GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton1000GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton1200GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton1600GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton2000GeV"); - HbbHbb_MMRSelection_chi2("Signal", "Graviton3000GeV"); + /*HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph"); + // HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph");//*/ + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph", 400, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph", 450, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph", 500, true);//*/ + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph", 550, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph", 600, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph", 650, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph", 700, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph", 750, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph", 800, true); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph", 900, true); + /* HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph");//*/ } diff --git a/AnalysisCode/PreselectedWithRegression/grav_all_upTo1400.xml b/AnalysisCode/PreselectedWithRegression/grav_all_upTo1400.xml new file mode 100644 index 0000000..2659102 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/grav_all_upTo1400.xml @@ -0,0 +1,44632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AnalysisCode/PreselectedWithRegression/processPreSelection_Data.sh b/AnalysisCode/PreselectedWithRegression/processPreSelection_Data.sh index fb4cc7f..91e0c69 100644 --- a/AnalysisCode/PreselectedWithRegression/processPreSelection_Data.sh +++ b/AnalysisCode/PreselectedWithRegression/processPreSelection_Data.sh @@ -1,11 +1,20 @@ -#setenv dir /eos/uscms/store/user/souvik/HbbHbb_Run2/V15 +setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/V24/ -#root -l -b -q 'HbbHbb_PreSelection.cc++("$dir", "Data_BTagCSV_2015C_Skim", "TMVARegression_BDTG.weights.xml")' -#root -l -b -q 'HbbHbb_PreSelection.cc++("$dir", "Data_BTagCSV_2015D_Skim", "TMVARegression_BDTG.weights.xml")' -#hadd -f PreSelected_Data_BTagCSV_2015_Skim.root PreSelected_Data_BTagCSV_2015C_Skim.root PreSelected_Data_BTagCSV_2015D_Skim.root -#hadd -f Histograms_Data_BTagCSV_2015_Skim.root Histograms_Data_BTagCSV_2015D_Skim.root Histograms_Data_BTagCSV_2015D_Skim.root -setenv dir /eos/uscms/store/user/cvernier/ -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV_2015_Skim", "TMVARegression_BDTG.weights.xml")' + +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV0","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV1","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV2","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV3","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV4","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV5","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV6","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV6_1","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV8","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV7","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV9","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV11","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV10","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' + diff --git a/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton.sh b/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton.sh new file mode 100644 index 0000000..926edbc --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton.sh @@ -0,0 +1,23 @@ +setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/V25/ + +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' + +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag","grav_all_upTo1400.xml")' diff --git a/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton_regression.sh b/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton_regression.sh index 4adc1bd..233db46 100644 --- a/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton_regression.sh +++ b/AnalysisCode/PreselectedWithRegression/processPreSelection_Graviton_regression.sh @@ -1,4 +1,4 @@ -setenv dir /eos/uscms/store/user/souvik/HbbHbb_Run2/V14 +setenv dir root://cmseos.fnal.gov//store/user/souvik/HbbHbb_Run2/V14 root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "Graviton260GeV", "TMVARegression_BDTG.weights.xml")' root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "Graviton270GeV", "TMVARegression_BDTG.weights.xml")' diff --git a/AnalysisCode/PreselectedWithRegression/ttbar-fix-v23.weights.xml b/AnalysisCode/PreselectedWithRegression/ttbar-fix-v23.weights.xml new file mode 100644 index 0000000..681ff75 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegression/ttbar-fix-v23.weights.xml @@ -0,0 +1,259930 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_bern.c b/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_bern.c new file mode 100644 index 0000000..b6a3de4 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_bern.c @@ -0,0 +1,19 @@ +{ +// gSystem->Load("../../PDFs/GaussExpPol_cxx.so"); + gSystem->Load("../../PDFs/RevCrystalBall_cxx.so"); + gSystem->Load("HZGRooPdfs_cxx.so"); + gSystem->Load("../../PDFs/GaussExp_cxx.so"); + gROOT->LoadMacro("../../BackgroundPrediction_Kinematic_Bern.c"); + BackgroundPrediction_Kinematic_Bern(252, 455,3, // plot range + 252, 455, // fit range + 240, 280, // range of crystalBall mean + 3, 50, // range of crystalBall width + 0.01, 5.1, // range of crystalBall exponent + 0.01, 5.1, // range of crystalBall switch + +/* 260, 280, // range of gaussExp mean + 3., 50, // range of gaussExp width + 0.01, 3.1, // range of gaussExp exponent + */ "h_mX_SB_kinFit", // histogram + "lin"); +} diff --git a/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_crystal.c b/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_crystal.c new file mode 100644 index 0000000..33dc561 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegressionDeepCSV/LMRSelection_chi2/fit_crystal.c @@ -0,0 +1,17 @@ +{ + gSystem->Load("../../PDFs/RevCrystalBall_cxx.so"); + gSystem->Load("../../PDFs/GaussExp_cxx.so"); + gROOT->LoadMacro("../../BackgroundPrediction_Kinematic_CrystalBall.cc"); + BackgroundPrediction_Kinematic_CrystalBall("Histograms_BTagall.root", + 252, 455,3, // plot range + 252, 455, // fit range + 240, 280, // range of crystalBall mean + 3, 30, // range of crystalBall width + 0.01, 5.1, // range of crystalBall exponent + 0.01, 5.1, // range of crystalBall switch + 250, 350, // range of gaussExp mean + 3., 50, // range of gaussExp width + 0.01, 3.1, // range of gaussExp exponent + "h_mX_SB_kinFit", // histogram + "lin"); +} diff --git a/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_bern.c b/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_bern.c new file mode 100644 index 0000000..bf7f950 --- /dev/null +++ b/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_bern.c @@ -0,0 +1,15 @@ +{ +// gSystem->Load("../../PDFs/GaussExpPol_cxx.so"); + gSystem->Load("../../PDFs/RevCrystalBall_cxx.so"); + gSystem->Load("HZGRooPdfs_cxx.so"); + gSystem->Load("../../PDFs/GaussExp_cxx.so"); + gROOT->LoadMacro("../../BackgroundPrediction_Kinematic_Bern.c"); + BackgroundPrediction_Kinematic_Bern(350, 1400, 5, // plot range + 350, 1400, // fit range + 400, 600, // range of crystalBall mean + 10, 200, // range of crystalBall width + 0.01, 5.1, // range of crystalBall exponent + 0.01, 5.1, // range of crystalBall switch + "h_mX_SB_kinFit", // histogram + "lin"); +} diff --git a/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_crystal.c b/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_crystal.c new file mode 100644 index 0000000..c58708c --- /dev/null +++ b/AnalysisCode/PreselectedWithRegressionDeepCSV/MMRSelection_chi2/fit_crystal.c @@ -0,0 +1,17 @@ +{ + gSystem->Load("../../PDFs/RevCrystalBall_cxx.so"); + gSystem->Load("../../PDFs/GaussExp_cxx.so"); + gROOT->LoadMacro("../../BackgroundPrediction_Kinematic_CrystalBall.cc"); + BackgroundPrediction_Kinematic_CrystalBall("Histograms_BTagall.root", + 350, 1200, 5, // plot range + 350, 1200, // fit range + 400, 600, // range of crystalBall mean + 10, 200, // range of crystalBall width + 0.01, 5.1, // range of crystalBall exponent + 0.01, 5.1, // range of crystalBall switch + 450, 550, + 50, 120, + 0.01, 2.1, + "h_mX_SB_kinFit", // histogram + "lin"); +} diff --git a/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/display_mHmX.c b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/display_mHmX.c new file mode 100644 index 0000000..0638653 --- /dev/null +++ b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/display_mHmX.c @@ -0,0 +1,14 @@ +{ + std::vector files={ + "Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph.root" + }; + + std::vector mean_gen={260,300,350,400,450}; + + gROOT->LoadMacro("../../DisplaymHmX.cc"); + DisplaymHmX(files, mean_gen, 115, 30, 115, 30); +} diff --git a/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Data.c b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Data.c new file mode 100644 index 0000000..39200e3 --- /dev/null +++ b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Data.c @@ -0,0 +1,6 @@ +{ + gSystem->Load("../../libPhysicsToolsKinFitter.so"); + gROOT->LoadMacro("../../HbbHbb_LMRSelection_chi2.cc++"); + HbbHbb_LMRSelection_chi2("Data", "BTagCSV"); + +} diff --git a/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Graviton.c b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Graviton.c index 6fc058c..18a6269 100644 --- a/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Graviton.c +++ b/AnalysisCode/PreselectedWithoutRegression/LMRSelection_chi2/processLMRSelection_Graviton.c @@ -1,15 +1,22 @@ { gSystem->Load("../../libPhysicsToolsKinFitter.so"); gROOT->LoadMacro("../../HbbHbb_LMRSelection_chi2.cc++"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph"); - HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph"); - // HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph", 260); +// HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph", 300); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph", 350); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph", 400); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph", 450); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph", 500); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph", 550); + /* HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph"); HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph"); - //HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-1000_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph"); + HbbHbb_LMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph");*/ + } diff --git a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/display_mHmX.c b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/display_mHmX.c index 8e6ceeb..e40fff2 100644 --- a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/display_mHmX.c +++ b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/display_mHmX.c @@ -1,14 +1,14 @@ { std::vector files={ - /* "Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root", + "Histograms_GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph.root", "Histograms_GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph.root", "Histograms_GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph.root", "Histograms_GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph.root", - "Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"*/ + "Histograms_GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root" }; std::vector mean_gen={400, 500, 650, 750, 900}; gROOT->LoadMacro("../../DisplaymHmX.cc"); - DisplaymHmX(files, mean_gen, 115, 23, 115, 23); + DisplaymHmX(files, mean_gen, 120, 20, 120, 20); } diff --git a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Data.c b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Data.c index 603d28b..9cb5d24 100644 --- a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Data.c +++ b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Data.c @@ -1,5 +1,5 @@ { gSystem->Load("../../libPhysicsToolsKinFitter.so"); gROOT->LoadMacro("../../HbbHbb_MMRSelection_chi2.cc++"); - HbbHbb_MMRSelection_chi2("Data", "Data_BTagCSV_2015_Skim"); + HbbHbb_MMRSelection_chi2("Data", "BTagCSV"); } diff --git a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Graviton.c b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Graviton.c index d998d7a..062cb57 100644 --- a/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Graviton.c +++ b/AnalysisCode/PreselectedWithoutRegression/MMRSelection_chi2/processMMRSelection_Graviton.c @@ -1,19 +1,21 @@ { gSystem->Load("../../libPhysicsToolsKinFitter.so"); gROOT->LoadMacro("../../HbbHbb_MMRSelection_chi2.cc++"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); + /* HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph"); + //HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph"); HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "RSGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph"); - HbbHbb_MMRSelection_chi2("Signal", "RSGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph");*/ + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph", 400); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph", 450); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph", 500); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph", 550); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph", 600); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph", 650); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph", 700); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph", 750); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph", 800); + HbbHbb_MMRSelection_chi2("Signal", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph", 900); + /* HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph"); + HbbHbb_MMRSelection_chi2("Signal", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph");*/ } diff --git a/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Data.sh b/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Data.sh index d04aaad..d7800c2 100644 --- a/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Data.sh +++ b/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Data.sh @@ -1,3 +1,8 @@ -setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/H21b/ +setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/V23 -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV_Skim")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV0")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV1")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV2")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV3")' +root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV4")' +##root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BTagCSV5")' diff --git a/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Graviton.sh b/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Graviton.sh index df2c55f..3d453bd 100644 --- a/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Graviton.sh +++ b/AnalysisCode/PreselectedWithoutRegression/processPreSelection_Graviton.sh @@ -1,20 +1,23 @@ -setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/H21b/ -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/V23 + +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' #root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "RSGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph","JEC","JER","Trig","bTag")' -root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "RSGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph","JEC","JER","Trig","bTag")' -#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' -#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph","JEC","JER","Trig","bTag")' +##root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +##root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' + ##root -l -b -q '../HbbHbb_PreSelection.cc++("$dir", "GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' + diff --git a/AnalysisCode/PreselectedWithoutRegression/processTrigger_Graviton.sh b/AnalysisCode/PreselectedWithoutRegression/processTrigger_Graviton.sh new file mode 100644 index 0000000..c99ff1e --- /dev/null +++ b/AnalysisCode/PreselectedWithoutRegression/processTrigger_Graviton.sh @@ -0,0 +1,23 @@ +setenv dir /eos/uscms/store/user/lpchbb/HeppyNtuples/V24 + +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph","JEC","JER","Trig","bTag",true)' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-270_narrow_13TeV-madgraph","JEC","JER","Trig","bTag",true)' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph","JEC","JER","Trig","bTag",true)' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-350_narrow_13TeV-madgraph","JEC","JER","Trig","bTag",true)' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-400_narrow_13TeV-madgraph","JEC","JER","Trig","bTag",true)' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-450_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-500_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-550_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-650_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-750_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-800_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "BulkGravTohhTohbbhbb_narrow_M-1000_13TeV-madgraph","JEC","JER","Trig","bTag")' +root -l -b -q '../HbbHbb_Trigger.cc("$dir", "BulkGravTohhTohbbhbb_narrow_M-1200_13TeV-madgraph","JEC","JER","Trig","bTag")' +#root -l -b -q '../HbbHbb_Trigger.cc("$dir", "BulkGravTohhTohbbhbb_narrow_M-1400_13TeV-madgraph","JEC","JER","Trig","bTag")' +##root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-1600_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' +##root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-2000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' + ##root -l -b -q '../HbbHbb_Trigger.cc("$dir", "GluGluToBulkGravitonToHHTo4B_M-3000_narrow_13TeV-madgraph","JEC","JER","Trig","bTag")' + diff --git a/AnalysisCode/Trigger/DoTurnOn.py b/AnalysisCode/Trigger/DoTurnOn.py new file mode 100644 index 0000000..f0b9a2c --- /dev/null +++ b/AnalysisCode/Trigger/DoTurnOn.py @@ -0,0 +1,435 @@ +import ROOT +import copy +from math import * +import array + +runName = "RunB" + +ffName = "fittedFunctions_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger)) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection)) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + nsigma = 0 + fit_goodness = 999 + while(fit_goodness>0.25): + nsigma +=0.25 + for i in range(len(parameters)): + print "XXXXXXXXX" + print "i=",i + print fitResult.UpperError(i) + print fitResult.LowerError(i) + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + print "fit.GetParameter(1)*fit.GetParameter(2)" + print fit.GetParameter(1)*fit.GetParameter(2) + print "(fit.GetParameter(1)*fit.GetParameter(2))<0" + print (fit.GetParameter(1)*fit.GetParameter(2))<0 + print "fit.GetParameter(1)" + print fit.GetParameter(1) + print "fit.GetParameter(2)" + print fit.GetParameter(2) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + ## end + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + excess_squared = 0 + for i in range(graph.GetN()): +# excess_up = max(0, (graph.GetY()[i] - fitUp.Eval(graph.GetX()[i]) )/(1E-3+graph.GetErrorYlow(i)) ) +# excess_down = max(0, (fitDown.Eval(graph.GetX()[i]) - graph.GetY()[i] )/(1E-3+graph.GetErrorYhigh(i)) ) + excess_up = max(0, (graph.GetY()[i] + graph.GetErrorYhigh(i) - fitUp.Eval(graph.GetX()[i]-graph.GetErrorXlow(i)) )/(1E-3*nsigma+abs(fitUp.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + excess_down = max(0, (fitDown.Eval(graph.GetX()[i]+graph.GetErrorXhigh(i)) - graph.GetY()[i] - graph.GetErrorYlow(i) )/(1E-3*nsigma+abs(fitDown.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + if True: + print "i:",i, + print "Y:",graph.GetY()[i], + print "fitUp",fitUp.Eval(graph.GetX()[i]), + print "fitDown:",fitDown.Eval(graph.GetX()[i]), + print "graphErrHigh",graph.GetErrorYhigh(i), + print "graphErrLow:",graph.GetErrorYlow(i), + print "excess_up:",excess_up, + print "excess_down:",excess_down + print "excess_squared:",excess_squared + excess_squared += (excess_up**2 + excess_down**2) + print "test: ", graph.GetN() + fit_goodness = excess_squared/ graph.GetN() + print "ped: ",ped + print "nsigma: ",nsigma + print "fit goodness: ",fit_goodness + if nsigma>120: + Exception("Too many sigmas") + return fit,fitUp,fitDown + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]**2)/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+"_"+runName+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+".pdf") + #c1.SaveAs("turnOn_"+ped+"_"+runName+".root") + + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "/scratch/sdonato/VHbbRun2/V20/CMSSW_7_1_5/src/Xbb/env_turnOnMET90/ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +preselection = "HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4" #"HLT_BIT_HLT_IsoMu18_v" + +parametersTurnOn_funct = () +#################### L1 ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 50 +functionMin = 110 +functionMax = 310 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +##################### CaloPt4 ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 35 +functionMin = 35 +functionMax = 105 +#var = "Jet_pt[3]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4" +title = "p^{T}_{4}" +doPlots() + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 24 +functionMin = 0.4 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1) + +Nbins = 50 +functionMin = 40 +functionMax = 140 +#var = "Jet_pt[3]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger/DoTurnOn2.py b/AnalysisCode/Trigger/DoTurnOn2.py new file mode 100644 index 0000000..f682553 --- /dev/null +++ b/AnalysisCode/Trigger/DoTurnOn2.py @@ -0,0 +1,464 @@ +import ROOT +import copy +from math import * +import array + +runName = "RunB" + +ffName = "fittedFunctions2_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger)) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection)) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" +# fit.FixParameter(4,0) +# fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + nsigma = 0 + fit_goodness = 999 + while(fit_goodness>0.25): + nsigma +=0.25 + for i in range(len(parameters)): + print "XXXXXXXXX" + print "i=",i + print fitResult.UpperError(i) + print fitResult.LowerError(i) + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + print "fit.GetParameter(1)*fit.GetParameter(2)" + print fit.GetParameter(1)*fit.GetParameter(2) + print "(fit.GetParameter(1)*fit.GetParameter(2))<0" + print (fit.GetParameter(1)*fit.GetParameter(2))<0 + print "fit.GetParameter(1)" + print fit.GetParameter(1) + print "fit.GetParameter(2)" + print fit.GetParameter(2) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + ## end + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + excess_squared = 0 + for i in range(graph.GetN()): +# excess_up = max(0, (graph.GetY()[i] - fitUp.Eval(graph.GetX()[i]) )/(1E-3+graph.GetErrorYlow(i)) ) +# excess_down = max(0, (fitDown.Eval(graph.GetX()[i]) - graph.GetY()[i] )/(1E-3+graph.GetErrorYhigh(i)) ) + excess_up = max(0, (graph.GetY()[i] + graph.GetErrorYhigh(i) - fitUp.Eval(graph.GetX()[i]-graph.GetErrorXlow(i)) )/(1E-3*nsigma+abs(fitUp.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + excess_down = max(0, (fitDown.Eval(graph.GetX()[i]+graph.GetErrorXhigh(i)) - graph.GetY()[i] - graph.GetErrorYlow(i) )/(1E-3*nsigma+abs(fitDown.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + if True: + print "i:",i, + print "Y:",graph.GetY()[i], + print "fitUp",fitUp.Eval(graph.GetX()[i]), + print "fitDown:",fitDown.Eval(graph.GetX()[i]), + print "graphErrHigh",graph.GetErrorYhigh(i), + print "graphErrLow:",graph.GetErrorYlow(i), + print "excess_up:",excess_up, + print "excess_down:",excess_down + print "excess_squared:",excess_squared + excess_squared += (excess_up**2 + excess_down**2) + fit_goodness = excess_squared/ graph.GetN() + print "ped: ",ped + print "nsigma: ",nsigma + print "fit goodness: ",fit_goodness + if nsigma>120: + Exception("Too many sigmas") + return fit,fitUp,fitDown + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +preselection = "HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4" + +parametersTurnOn_funct = () +#################### L1 ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 110 +functionMax = 310 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +##################### CaloPt4 ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 40 +functionMin = 35 +functionMax = 85 +#var = "Jet_pt[3]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4" +title = "p^{T}_{4}" +doPlots() + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 60 +functionMax = 120 +var = "Jet_pt[1]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 24 +functionMin = 0.4 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 25 +functionMax = 125 +#var = "Jet_pt[3]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 80 +functionMax = 180 +#var = "Jet_pt[1]" +var = "Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger/DoTurnOnDJ.py b/AnalysisCode/Trigger/DoTurnOnDJ.py new file mode 100644 index 0000000..da7338f --- /dev/null +++ b/AnalysisCode/Trigger/DoTurnOnDJ.py @@ -0,0 +1,499 @@ +import ROOT +import copy +from math import * +import array + +runName = "" +fitName = "_v0" + +ffName = "fittedFunctions2_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev=100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger),"",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection),"",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" +# fit.FixParameter(4,0) +# fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + nsigma = 0 + fit_goodness = 999 + while(fit_goodness>0.25): + nsigma +=0.25 + for i in range(len(parameters)): + print "XXXXXXXXX" + print "i=",i + print fitResult.UpperError(i) + print fitResult.LowerError(i) + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + print "fit.GetParameter(1)*fit.GetParameter(2)" + print fit.GetParameter(1)*fit.GetParameter(2) + print "(fit.GetParameter(1)*fit.GetParameter(2))<0" + print (fit.GetParameter(1)*fit.GetParameter(2))<0 + print "fit.GetParameter(1)" + print fit.GetParameter(1) + print "fit.GetParameter(2)" + print fit.GetParameter(2) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + ## end + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + excess_squared = 0 + for i in range(graph.GetN()): +# excess_up = max(0, (graph.GetY()[i] - fitUp.Eval(graph.GetX()[i]) )/(1E-3+graph.GetErrorYlow(i)) ) +# excess_down = max(0, (fitDown.Eval(graph.GetX()[i]) - graph.GetY()[i] )/(1E-3+graph.GetErrorYhigh(i)) ) + excess_up = max(0, (graph.GetY()[i] + graph.GetErrorYhigh(i) - fitUp.Eval(graph.GetX()[i]-graph.GetErrorXlow(i)) )/(1E-3*nsigma+abs(fitUp.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + excess_down = max(0, (fitDown.Eval(graph.GetX()[i]+graph.GetErrorXhigh(i)) - graph.GetY()[i] - graph.GetErrorYlow(i) )/(1E-3*nsigma+abs(fitDown.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + if True: + print "i:",i, + print "Y:",graph.GetY()[i], + print "fitUp",fitUp.Eval(graph.GetX()[i]), + print "fitDown:",fitDown.Eval(graph.GetX()[i]), + print "graphErrHigh",graph.GetErrorYhigh(i), + print "graphErrLow:",graph.GetErrorYlow(i), + print "excess_up:",excess_up, + print "excess_down:",excess_down + print "excess_squared:",excess_squared + excess_squared += (excess_up**2 + excess_down**2) + fit_goodness = excess_squared/ graph.GetN() + print "ped: ",ped + print "nsigma: ",nsigma + print "fit goodness: ",fit_goodness + if nsigma>120: + Exception("Too many sigmas") + return fit,fitUp,fitDown + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="SingleMuonSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +preselection = "HLT_BIT_HLT_IsoMu24_v && Vtype==2 && CSVsorted[2]>0.6" + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 30#50 +functionMin = 60#100 +functionMax = 120#200 +#var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1l" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 50#50 +functionMin = 120#200 +functionMax = 270#350 +#var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1h" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30#60 +functionMin = 15#25 +functionMax = 45#85 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + +##################### CaloPt4 high ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 40 +functionMax = 95 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 60 +functionMax = 120 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 24 +functionMin = 0.4 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 60 +functionMin = 20#25 +functionMax = 80#125 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 80 +functionMax = 180 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger/DoTurnOnQJ.py b/AnalysisCode/Trigger/DoTurnOnQJ.py new file mode 100644 index 0000000..933320e --- /dev/null +++ b/AnalysisCode/Trigger/DoTurnOnQJ.py @@ -0,0 +1,471 @@ +import ROOT +import copy +from math import * +import array + +runName = "" +fitName = "_CC" + +ffName = "fittedFunctions_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev = 100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger), "",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger ) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection), "",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + nsigma = 0 + fit_goodness = 999 + while(fit_goodness>0.25): + nsigma +=0.25 + for i in range(len(parameters)): + print "XXXXXXXXX" + print "i=",i + print fitResult.UpperError(i) + print fitResult.LowerError(i) + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i)*nsigma + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i)*nsigma + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02)*nsigma + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02)*nsigma + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + print "fit.GetParameter(1)*fit.GetParameter(2)" + print fit.GetParameter(1)*fit.GetParameter(2) + print "(fit.GetParameter(1)*fit.GetParameter(2))<0" + print (fit.GetParameter(1)*fit.GetParameter(2))<0 + print "fit.GetParameter(1)" + print fit.GetParameter(1) + print "fit.GetParameter(2)" + print fit.GetParameter(2) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + ## end + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + excess_squared = 0 + for i in range(graph.GetN()): +# excess_up = max(0, (graph.GetY()[i] - fitUp.Eval(graph.GetX()[i]) )/(1E-3+graph.GetErrorYlow(i)) ) +# excess_down = max(0, (fitDown.Eval(graph.GetX()[i]) - graph.GetY()[i] )/(1E-3+graph.GetErrorYhigh(i)) ) + excess_up = max(0, (graph.GetY()[i] + graph.GetErrorYhigh(i) - fitUp.Eval(graph.GetX()[i]-graph.GetErrorXlow(i)) )/(1E-3*nsigma+abs(fitUp.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + excess_down = max(0, (fitDown.Eval(graph.GetX()[i]+graph.GetErrorXhigh(i)) - graph.GetY()[i] - graph.GetErrorYlow(i) )/(1E-3*nsigma+abs(fitDown.Eval(graph.GetX()[i])-fit.Eval(graph.GetX()[i]))) ) + if True: + print "i:",i, + print "Y:",graph.GetY()[i], + print "fitUp",fitUp.Eval(graph.GetX()[i]), + print "fitDown:",fitDown.Eval(graph.GetX()[i]), + print "graphErrHigh",graph.GetErrorYhigh(i), + print "graphErrLow:",graph.GetErrorYlow(i), + print "excess_up:",excess_up, + print "excess_down:",excess_down + print "excess_squared:",excess_squared + excess_squared += (excess_up**2 + excess_down**2) + print "test: ", graph.GetN() + fit_goodness = excess_squared/ graph.GetN() + print "ped: ",ped + print "nsigma: ",nsigma + print "fit goodness: ",fit_goodness + if nsigma>120: + Exception("Too many sigmas") + return fit,fitUp,fitDown + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]**2)/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+"_"+runName+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+"_"+runName+".root") + + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="SingleMuonSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "/scratch/sdonato/VHbbRun2/V20/CMSSW_7_1_5/src/Xbb/env_turnOnMET90/ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +preselection = "HLT_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185"#&& CSVsorted[2]>0.6 " # && Jet_puId>=4" #"HLT_BIT_HLT_IsoMu18_v" + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 60#100 +functionMax = 160#200 +#var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1l" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 10#50 +functionMin = 150#120 +functionMax = 350#270 +#var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1h" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 10#140#70 +functionMin = 10#30#35 +functionMax = 60#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt4 high ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 20#140#70 +functionMin = 60#30#35 +functionMax = 160#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 4#80#24 +functionMin = 0.6#0.2#0.4 #CSVL = 0.460 +functionMax = 1.0#1.0#1.0 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "CSVsorted[2]" +#var = "Jet_btagCSV[2]" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1) + +Nbins = 40#100#50 +functionMin = 35#30#40 +functionMax = 115#130#140 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger/Doubleplots_fit_test_singleBtag.C b/AnalysisCode/Trigger/Doubleplots_fit_test_singleBtag.C index 48d64e7..af02226 100644 --- a/AnalysisCode/Trigger/Doubleplots_fit_test_singleBtag.C +++ b/AnalysisCode/Trigger/Doubleplots_fit_test_singleBtag.C @@ -1,42 +1,301 @@ -#include"fittedFunctions.h" +#include"fittedFunctions2_RunC.h" //#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" + +TString runName = "RunC"; + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return DoubleJet_L1->Eval(sumpt)*DoubleJet_CaloPt4->Eval(pt4)*DoubleJet_CaloPt2->Eval(pt2)*DoubleJet_CSV3->Eval(CSV3)*DoubleJet_PFPt4->Eval(pt4)*DoubleJet_PFPt2->Eval(pt2); +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return DoubleJet_L1Up->Eval(sumpt)*DoubleJet_CaloPt4Up->Eval(pt4)*DoubleJet_CaloPt2Up->Eval(pt2)*DoubleJet_CSV3Up->Eval(CSV3)*DoubleJet_PFPt4Up->Eval(pt4)*DoubleJet_PFPt2Up->Eval(pt2); +} + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return DoubleJet_L1Down->Eval(sumpt)*DoubleJet_CaloPt4Down->Eval(pt4)*DoubleJet_CaloPt2Down->Eval(pt2)*DoubleJet_CSV3Down->Eval(CSV3)*DoubleJet_PFPt4Down->Eval(pt4)*DoubleJet_PFPt2Down->Eval(pt2); +} void Doubleplots_fit_test_singleBtag(){ gStyle->SetOptStat(0); // gROOT->SetBatch(); + setTDRStyle(); + TCanvas* c1 = new TCanvas("c1","c1",800,800); + TPad * mainPad = new TPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad->SetBottomMargin(0.05); // Upper and lower plot are joined + // mainPad->SetGridx(); // Vertical grid - TCanvas* c1 = new TCanvas("c1","c1"); - c1->SetGridx(); - c1->SetGridy(); + mainPad->SetLeftMargin(0.13); + mainPad->Draw(); // Draw the upper pad: pad1 + // mainPad->cd(); // pad1 becomes the current pad -// TFile *_file0 = TFile::Open("SingleElectronVBF.root"); - TFile *_file0 = TFile::Open("../SingleElectronVBF.root"); + TPad * ratioPad = new TPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad->SetTopMargin(0.03); + ratioPad->SetBottomMargin(0.3); + // ratioPad->SetGridx(); // vertical grid + + ratioPad->SetLeftMargin(0.13); + ratioPad->Draw(); + // c1->SetGridx(); + // c1->SetGridy(); + + // TFile *_file0 = TFile::Open("SingleElectronVBF.root"); + // TFile *_file0 = TFile::Open("ZvvHighPt_V20_SingleMuon.root"); + TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + // TString fileName = "../PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root"; + TFile *_file0 = TFile::Open(fileName); TTree* tree = (TTree*) _file0->Get("tree"); + TString outName; + TH1* h,*h1,*hR, *hU,*hD, *hRU, *hRD; + + Long64_t maxEv = tree->GetEntries(); ////////////////////////////////////////////////// - // plots for the single b-tag trigger, starting from (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30) + // plots for the single b-tag trigger, starting from (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30) ////////////////////////////////////////////////// + gPad->RedrawAxis(); + mainPad->cd(); + tree->Draw("Jet_pt[3] >> h(25,0,200)"," TurnOnDouble(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); + h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); + tree->Draw("Jet_pt[3] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("Jet_pt[3] >> h2(25,0,200)"," TurnOnDoubleUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_pt[3] >> h3(25,0,200)"," TurnOnDoubleDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + - tree->Draw("Jet_pt[3] >> h(25,0,200)"," DoubleTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("p_{T}^{3}"); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(0,1,200,1); + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + outName = "check_full2_" + runName; + c1->SaveAs( outName+"_pt4_single.pdf"); + // c1->SaveAs("check_full_pt4_single.C"); + + // return; + // + mainPad->cd(); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h(25,0,1)"," TurnOnDouble(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("Jet_pt[3]"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h2(25,0,200)"," TurnOnDoubleUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h3(25,0,200)"," TurnOnDoubleDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + - c1->SaveAs("check_full_pt4_single.png"); - c1->SaveAs("check_full_pt4_single.C"); + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); - tree->Draw("CSV[2] >> h(25,0,1)"," DoubleTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("CSV^{3}"); + horiz_line->DrawLine(0,1,1,1); + gPad->RedrawAxis(); + c1->SaveAs( outName+"_CSV3_single.pdf"); + // c1->SaveAs("check_full_CSV3_single.C"); + + mainPad->cd(); + tree->Draw("Jet_eta[0] >> h(25,-4,+4)"," TurnOnDouble(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("CSV[2]"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("Jet_eta[0] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + + tree->Draw("Jet_eta[0] >> h2(25,0,200)"," TurnOnDoubleUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_eta[0] >> h3(25,0,200)"," TurnOnDoubleDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); - c1->SaveAs("check_full_CSV3_single.png"); - c1->SaveAs("check_full_CSV3_single.C"); + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); - tree->Draw("Jet_eta[0] >> h(25,-4,+4)"," DoubleTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("#eta^1"); + horiz_line->DrawLine(-4,1,4,1); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + + gPad->RedrawAxis(); + c1->SaveAs( outName+"_eta1_single.pdf"); + //c1->SaveAs("check_full_eta0_single.C"); + //*/ + + + mainPad->cd(); + tree->Draw("Jet_pt[1] >> h(25,0,200)"," TurnOnDouble(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("Jet_eta[0]"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("Jet_pt[1] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("Jet_pt[1] >> h2(25,0,200)"," TurnOnDoubleUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_pt[1] >> h3(25,0,200)"," TurnOnDoubleDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("p_{T}^{2}"); + horiz_line->DrawLine(0,1,200,1); + hR->GetYaxis()->SetRangeUser(0.5,1.5); - c1->SaveAs("check_full_eta0_single.png"); - c1->SaveAs("check_full_eta0_single.C"); + gPad->RedrawAxis(); + c1->SaveAs( outName+"_pt2_single.pdf"); } diff --git a/AnalysisCode/Trigger/Quadplots_fit_test_singleBtag.C b/AnalysisCode/Trigger/Quadplots_fit_test_singleBtag.C index 0e6949f..a2ef13e 100644 --- a/AnalysisCode/Trigger/Quadplots_fit_test_singleBtag.C +++ b/AnalysisCode/Trigger/Quadplots_fit_test_singleBtag.C @@ -1,42 +1,318 @@ -#include"fittedFunctions.h" +#include "fittedFunctions_RunC.h" //#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" + +TString runName = "RunC"; +//-log(1-CSV3+1.e-7 + +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return QuaJet_L1->Eval(sumpt)*QuaJet_CaloPt4->Eval(pt4)*QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return QuaJet_L1Up->Eval(sumpt)*QuaJet_CaloPt4Up->Eval(pt4)*QuaJet_CSV3Up->Eval(CSV3)*QuaJet_PFPt4Up->Eval(pt4); +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + return QuaJet_L1Down->Eval(sumpt)*QuaJet_CaloPt4Down->Eval(pt4)*QuaJet_CSV3Down->Eval(CSV3)*QuaJet_PFPt4Down->Eval(pt4); +} void Quadplots_fit_test_singleBtag(){ gStyle->SetOptStat(0); -// gROOT->SetBatch(); + // gROOT->SetBatch(); + setTDRStyle(); + + TCanvas* c1 = new TCanvas("c1","c1",800,800); + TPad * mainPad = new TPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad->SetBottomMargin(0.05); // Upper and lower plot are joined + // mainPad->SetGridx(); // Vertical grid - TCanvas* c1 = new TCanvas("c1","c1"); - c1->SetGridx(); - c1->SetGridy(); + mainPad->SetLeftMargin(0.13); + mainPad->Draw(); // Draw the upper pad: pad1 + // mainPad->cd(); // pad1 becomes the current pad -// TFile *_file0 = TFile::Open("SingleElectronVBF.root"); - TFile *_file0 = TFile::Open("/eos/uscms/store/user/cvernier/SingleElectronVBF.root"); + TPad * ratioPad = new TPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad->SetTopMargin(0.03); + ratioPad->SetBottomMargin(0.3); + // ratioPad->SetGridx(); // vertical grid + + ratioPad->SetLeftMargin(0.13); + ratioPad->Draw(); + // c1->SetGridx(); + // c1->SetGridy(); + + // TFile *_file0 = TFile::Open("SingleElectronVBF.root"); + // TFile *_file0 = TFile::Open("ZvvHighPt_V20_SingleMuon.root"); + TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + // TString fileName = "../PreselectedWithoutRegression/Histograms_GluGluToBulkGravitonToHHTo4B_M-260_narrow_13TeV-madgraph.root"; + TFile *_file0 = TFile::Open(fileName); TTree* tree = (TTree*) _file0->Get("tree"); + TString outName; + TH1* h,*h1,*hR, *hU,*hD; + + /* c1->SetLogy(); + gPad->RedrawAxis(); + // mainPad->cd(); + // tree->Draw("run >> h(200,275600,276500)","HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",""); + tree->Draw("run >> h(200,275600,276500)","",""); + tree->Draw("run >> h1(200,275600,276500)","HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4","same"); + tree->Draw("run >> h2(200,275600,276500)","!HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4","same"); + + h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kRed);h->GetYaxis()->SetRangeUser(1e3,10e6); + h = (TProfile*) gDirectory->Get("h2");h->SetLineColor(kBlack);//h->SetMaximum(2.0*h->GetMaximum()); + + outName = "check_full_" + runName; + h->GetXaxis()->SetTitle("Run Number"); + c1->SaveAs( outName+"trigger.pdf"); +*/ + + Long64_t maxEv = tree->GetEntries(); ////////////////////////////////////////////////// - // plots for the single b-tag trigger, starting from (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30) + // plots for the single b-tag trigger, starting from (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30) ////////////////////////////////////////////////// + gPad->RedrawAxis(); + mainPad->cd(); + tree->Draw("Jet_pt[3] >> h(25,0,200)"," TurnOnQuad(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); + h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); + tree->Draw("Jet_pt[3] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("Jet_pt[3] >> h2(25,0,200)"," TurnOnQuadUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_pt[3] >> h3(25,0,200)"," TurnOnQuadDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); - tree->Draw("Jet_pt[3] >> h(25,0,200)"," QuadTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("p_{T}^{3}"); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(0,1,200,1); + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + outName = "check_full_" + runName; + c1->SaveAs( outName+"_pt4_single.pdf"); + // c1->SaveAs("check_full_pt4_single.C"); + + // return; + // + mainPad->cd(); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h(25,0,1)"," TurnOnQuad(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("Jet_pt[3]"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h2(25,0,200)"," TurnOnQuadUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))) >> h3(25,0,200)"," TurnOnQuadDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + - c1->SaveAs("check_full_pt4_single.png"); - c1->SaveAs("check_full_pt4_single.C"); + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); - tree->Draw("CSV[2] >> h(25,0,1)"," QuadTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("CSV^{3}"); + horiz_line->DrawLine(0,1,1,1); + gPad->RedrawAxis(); + c1->SaveAs( outName+"_CSV3_single.pdf"); + // c1->SaveAs("check_full_CSV3_single.C"); + + mainPad->cd(); + tree->Draw("Jet_eta[0] >> h(25,-4,+4)"," TurnOnQuad(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("CSV[2]"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("Jet_eta[0] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + + tree->Draw("Jet_eta[0] >> h2(25,0,200)"," TurnOnQuadUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_eta[0] >> h3(25,0,200)"," TurnOnQuadDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); - c1->SaveAs("check_full_CSV3_single.png"); - c1->SaveAs("check_full_CSV3_single.C"); - tree->Draw("Jet_eta[0] >> h(25,-4,+4)"," QuadTriggerWeight(Jet_pt[0], Jet_pt[1], Jet_pt[2], Jet_pt[3], min(CSV[2],1-1.e-7))*(HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)",""); + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("#eta^1"); + horiz_line->DrawLine(-4,1,4,1); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + + gPad->RedrawAxis(); + c1->SaveAs( outName+"_eta1_single.pdf"); + //c1->SaveAs("check_full_eta0_single.C"); + //*/ + + + mainPad->cd(); + tree->Draw("Jet_pt[1] >> h(25,0,200)"," TurnOnQuad(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","",maxEv); h = (TProfile*) gDirectory->Get("h");h->SetLineColor(kBlack);h->SetMaximum(2.0*h->GetMaximum()); - tree->Draw("Jet_eta[0]"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV0p67_v && (HLT_BIT_HLT_Ele23_WPLoose_Gsf_v && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same"); + tree->Draw("Jet_pt[1] >> h1(25,0,1)"," 1.0001*(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v && (HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4))","same",maxEv); + h1 = (TProfile*) gDirectory->Get("h1"); + tree->Draw("Jet_pt[1] >> h2(25,0,200)"," TurnOnQuadUp(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + tree->Draw("Jet_pt[1] >> h3(25,0,200)"," TurnOnQuadDown(Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3], Sum$(Pt4(Jet_pt,Jet_eta,1,Iteration$,Length$)), Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)), min(MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))),1-1.e-7))*(HLT_BIT_HLT_IsoMu24_v && Jet_puId>=4 && Alt$(Jet_pt[3],0)>30 && abs(Jet_eta[0])<2.4 && abs(Jet_eta[1])<2.4 && abs(Jet_eta[2])<2.4 && abs(Jet_eta[3])<2.4)","Lhistsame",maxEv); + + hU=(TProfile*) gDirectory->Get("h2"); + hU->SetLineStyle(2); + hU->SetLineColor(kBlack); + hD=(TProfile*) gDirectory->Get("h3"); + hD->SetLineStyle(2); + hD->SetLineColor(kBlack); + + + h1->SetLineColor( kRed ); + h1->GetYaxis()->SetLabelSize(20); + h1->GetYaxis()->SetTitleSize(20); + h1->GetXaxis()->SetLabelSize(20); + + hR = (TH1*) h->Clone("hR"); + hR->Divide(h1); + hRU = (TH1*) hU->Clone("hRU"); + hRU->Divide(h1); + hRD = (TH1*) hD->Clone("hRD"); + hRD->Divide(h1); + + ratioPad->cd(); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); - c1->SaveAs("check_full_eta0_single.png"); - c1->SaveAs("check_full_eta0_single.C"); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle("p_{T}^{2}"); + horiz_line->DrawLine(0,1,200,1); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + gPad->RedrawAxis(); + c1->SaveAs( outName+"_pt2_single.pdf"); } diff --git a/AnalysisCode/Trigger/TE_presel.cc b/AnalysisCode/Trigger/TE_presel.cc new file mode 100644 index 0000000..cc5e8fe --- /dev/null +++ b/AnalysisCode/Trigger/TE_presel.cc @@ -0,0 +1,113 @@ +TString runName = "RunB"; + +void TE_presel() +{ + + TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + // TFile *_file0 = TFile::Open(fileName); + TChain *tree=new TChain("tree"); + tree->Add(fileName); + // TChain* tree = (TChain*) _file0->Get("tree"); + + int HLT_BIT_HLT_IsoMu24_v, Vtype; + int nJet, Jet_puId[100], HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, ntrgObjects_hltQuadCentralJet45, ntrgObjects_hltBTagCaloCSVp087Triple, ntrgObjects_hltQuadPFCentralJetLooseID45,ntrgObjects_hltQuadCentralJet30, ntrgObjects_hltDoubleCentralJet90, ntrgObjects_hltQuadPFCentralJetLooseID30, ntrgObjects_hltDoublePFCentralJetLooseID90, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v; + Float_t jet_pt[100], Jet_eta[100], Jet_btagCSV[100], vLeptons_pt[100], Jet_btagCMVAV2[100]; + tree->SetBranchStatus("*",0); + tree->SetBranchAddress("Jet_pt", &(jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet30", &(ntrgObjects_hltQuadCentralJet30)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoubleCentralJet90", &(ntrgObjects_hltDoubleCentralJet90)); tree->SetBranchStatus("ntrgObjects_hltDoubleCentralJet90", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID30", &(ntrgObjects_hltQuadPFCentralJetLooseID30)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoublePFCentralJetLooseID90", &(ntrgObjects_hltDoublePFCentralJetLooseID90)); tree->SetBranchStatus("ntrgObjects_hltDoublePFCentralJetLooseID90", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet45", &(ntrgObjects_hltQuadCentralJet45)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet45", 1); + tree->SetBranchAddress("ntrgObjects_hltBTagCaloCSVp087Triple", &(ntrgObjects_hltBTagCaloCSVp087Triple)); tree->SetBranchStatus("ntrgObjects_hltBTagCaloCSVp087Triple", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID45", &(ntrgObjects_hltQuadPFCentralJetLooseID45)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID45", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("vLeptons_pt", &(vLeptons_pt)); tree->SetBranchStatus("vLeptons_pt", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Float_t jet_pt_[100], Jet_eta_[100], Jet_btagCSV_[100], Jet_btagCMVAV2_[100]; + int Jet_puId_[100]; + TFile *outfile=new TFile("SingleMuonSkimmed"+runName+".root", "recreate"); + TTree *outtree=tree->CloneTree(0); + Float_t CSVsorted[100], CMVAVsorted[100]; + // outtree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + outtree->Branch("CMVAVsorted",&CMVAVsorted,"CMVAVsorted[nJet]/F"); + outtree->Branch("CSVsorted",&CSVsorted,"CSVsorted[nJet]/F"); + outtree->SetBranchAddress("Jet_pt", &(jet_pt_)); tree->SetBranchStatus("Jet_pt", 1); + outtree->SetBranchAddress("Jet_eta", &(Jet_eta_)); tree->SetBranchStatus("Jet_eta", 1); + outtree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV_)); tree->SetBranchStatus("Jet_btagCSV", 1); + + outtree->SetBranchAddress("Jet_puId", &(Jet_puId_)); tree->SetBranchStatus("Jet_puId", 1); + outtree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2_)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + /* outtree->Branch("Jet_pt",&Jet_pt,"Jet_pt/F"); + outtree->Branch("Jet_eta",&Jet_eta,"Jet_eta/F"); + outtree->Branch("Jet_btagCSV",&Jet_btagCSV,"Jet_btagCSV/F"); + outtree->Branch("HLT_BIT_HLT_IsoMu24_v",&HLT_BIT_HLT_IsoMu24_v,"HLT_BIT_HLT_IsoMu24_v/i"); + outtree->Branch("Jet_puId",&Jet_puId,"Jet_puId/i"); + outtree->Branch("ntrgObjects_hltQuadCentralJet30",&ntrgObjects_hltQuadCentralJet30,"ntrgObjects_hltQuadCentralJet30/i"); + outtree->Branch("ntrgObjects_hltDoubleCentralJet90",&ntrgObjects_hltDoubleCentralJet90,"ntrgObjects_hltDoubleCentralJet90/i"); + outtree->Branch("ntrgObjects_hltQuadPFCentralJetLooseID30",&ntrgObjects_hltQuadPFCentralJetLooseID30,"ntrgObjects_hltQuadPFCentralJetLooseID30/i"); + outtree->Branch("ntrgObjects_hltDoublePFCentralJetLooseID90",&ntrgObjects_hltDoublePFCentralJetLooseID90,"ntrgObjects_hltDoublePFCentralJetLooseID90/i"); + outtree->Branch("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v,"HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v/i"); + outtree->Branch("nJet",&nJet,"nJet/i"); + outtree->Branch("ntrgObjects_hltQuadCentralJet45",&ntrgObjects_hltQuadCentralJet45,"ntrgObjects_hltQuadCentralJet45/i"); + outtree->Branch("ntrgObjects_hltBTagCaloCSVp087Triple",&ntrgObjects_hltBTagCaloCSVp087Triple,"ntrgObjects_hltBTagCaloCSVp087Triple/i"); + outtree->Branch("ntrgObjects_hltQuadPFCentralJetLooseID45",&ntrgObjects_hltQuadPFCentralJetLooseID45,"ntrgObjects_hltQuadPFCentralJetLooseID45/i");*/ + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (Int_t i=0; i= shout ){ std::cout << "Event " << i << "/" << nEvents << std::endl; shout=shout+nEvents/10; } + + tree->GetEvent(i); + if( ! ( HLT_BIT_HLT_IsoMu24_v ) ) continue; + Int_t counter = 0; + Int_t GoodJets[100]; + for( Int_t j=0; j=4 ){ GoodJets[counter]=j; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + //CSVsorted[0] = Jet_btagCSV[GoodJets[0]]; CSVsorted[1] = Jet_btagCSV[GoodJets[1]]; CSVsorted[2] = Jet_btagCSV[GoodJets[2]]; CSVsorted[3] = Jet_btagCSV[GoodJets[3]]; + //float CSVsorted[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + //std::cout << "here" << std::endl; + + for( Int_t j=0; j() ); + std::sort( CMVAVsorted, CMVAVsorted+counter, std::greater() ); + nJet=counter; + /* HLT_BIT_HLT_IsoMu24_v_ = HLT_BIT_HLT_IsoMu24_v; + ntrgObjects_hltQuadCentralJet30_ = ntrgObjects_hltQuadCentralJet30; + ntrgObjects_hltDoubleCentralJet90_ =ntrgObjects_hltDoubleCentralJet90; + ntrgObjects_hltQuadPFCentralJetLooseID30_ = ntrgObjects_hltQuadPFCentralJetLooseID30; + ntrgObjects_hltDoublePFCentralJetLooseID90_ = ntrgObjects_hltDoublePFCentralJetLooseID90; + HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v_ = HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v; + ntrgObjects_hltQuadCentralJet45_ = ntrgObjects_hltQuadCentralJet45; + ntrgObjects_hltBTagCaloCSVp087Triple_ = ntrgObjects_hltBTagCaloCSVp087Triple; + ntrgObjects_hltQuadPFCentralJetLooseID45_ = ntrgObjects_hltQuadPFCentralJetLooseID45;*/ + outtree->Fill(); + // if (i%1000 == 1) outtree->AutoSave("SaveSelf"); + + + } + outtree->Write("tree"); + outfile->Close(); +} + diff --git a/AnalysisCode/Trigger/clos_AJ.cc b/AnalysisCode/Trigger/clos_AJ.cc new file mode 100644 index 0000000..ce7696a --- /dev/null +++ b/AnalysisCode/Trigger/clos_AJ.cc @@ -0,0 +1,361 @@ +#include "fittedFunctions_.h" +#include "fittedFunctions2_.h" +#include "fittedFunctions3_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" + +TString runName = ""; +TString fitName = "_v0C_NC"; + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4l->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1l->Eval(sumpt); + else L1=DoubleJet_L1h->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2->Eval(pt2)*DoubleJet_CSV3->Eval(CSV3)*DoubleJet_PFPt4->Eval(pt4)*DoubleJet_PFPt2->Eval(pt2); +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4lUp->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1lUp->Eval(sumpt); + else L1=DoubleJet_L1hUp->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2Up->Eval(pt2)*DoubleJet_CSV3Up->Eval(CSV3)*DoubleJet_PFPt4Up->Eval(pt4)*DoubleJet_PFPt2Up->Eval(pt2); +}; + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4lDown->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1lDown->Eval(sumpt); + else L1=DoubleJet_L1hDown->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2Down->Eval(pt2)*DoubleJet_CSV3Down->Eval(CSV3)*DoubleJet_PFPt4Down->Eval(pt4)*DoubleJet_PFPt2Down->Eval(pt2); +} + +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4l->Eval(pt4); + else calopt4 = QuaJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1l->Eval(sumpt); + else L1=QuaJet_L1h->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4lUp->Eval(pt4); + else calopt4 = QuaJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1lUp->Eval(sumpt); + else L1=QuaJet_L1hUp->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3Up->Eval(CSV3)*QuaJet_PFPt4Up->Eval(pt4); +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4lDown->Eval(pt4); + else calopt4 = QuaJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1lDown->Eval(sumpt); + else L1=QuaJet_L1hDown->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3Down->Eval(CSV3)*QuaJet_PFPt4Down->Eval(pt4); +} + +double QaD_TurnOnDouble(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = QaD_DoubleJet_CaloPt4l->Eval(pt4); + else calopt4 = QaD_DoubleJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<120) L1 = QaD_DoubleJet_L1l->Eval(sumpt); + else L1=QaD_DoubleJet_L1h->Eval(sumpt); + return L1*calopt4*QaD_DoubleJet_CaloPt2->Eval(pt2)*QaD_DoubleJet_CSV3->Eval(CSV3)*QaD_DoubleJet_PFPt4->Eval(pt4)*QaD_DoubleJet_PFPt2->Eval(pt2); +} + +double QaD_TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = QaD_DoubleJet_CaloPt4lUp->Eval(pt4); + else calopt4 = QaD_DoubleJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<120) L1 = QaD_DoubleJet_L1lUp->Eval(sumpt); + else L1=QaD_DoubleJet_L1hUp->Eval(sumpt); + return L1*calopt4*QaD_DoubleJet_CaloPt2Up->Eval(pt2)*QaD_DoubleJet_CSV3Up->Eval(CSV3)*QaD_DoubleJet_PFPt4Up->Eval(pt4)*QaD_DoubleJet_PFPt2Up->Eval(pt2); +}; + +double QaD_TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = QaD_DoubleJet_CaloPt4lDown->Eval(pt4); + else calopt4 = QaD_DoubleJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<120) L1 = QaD_DoubleJet_L1lDown->Eval(sumpt); + else L1=QaD_DoubleJet_L1hDown->Eval(sumpt); + return L1*calopt4*QaD_DoubleJet_CaloPt2Down->Eval(pt2)*QaD_DoubleJet_CSV3Down->Eval(CSV3)*QaD_DoubleJet_PFPt4Down->Eval(pt4)*QaD_DoubleJet_PFPt2Down->Eval(pt2); +} + +double QaD_TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QaD_QuaJet_CaloPt4l->Eval(pt4); + else calopt4 = QaD_QuaJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<210) L1 = QaD_QuaJet_L1l->Eval(sumpt); + else L1=QaD_QuaJet_L1h->Eval(sumpt); + return L1*calopt4*QaD_QuaJet_CSV3->Eval(CSV3)*QaD_QuaJet_PFPt4->Eval(pt4); +} + +double QaD_TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QaD_QuaJet_CaloPt4lUp->Eval(pt4); + else calopt4 = QaD_QuaJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<210) L1 = QaD_QuaJet_L1lUp->Eval(sumpt); + else L1=QaD_QuaJet_L1hUp->Eval(sumpt); + return L1*calopt4*QaD_QuaJet_CSV3Up->Eval(CSV3)*QaD_QuaJet_PFPt4Up->Eval(pt4); +} + +double QaD_TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QaD_QuaJet_CaloPt4lDown->Eval(pt4); + else calopt4 = QaD_QuaJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<210) L1 = QaD_QuaJet_L1lDown->Eval(sumpt); + else L1=QaD_QuaJet_L1hDown->Eval(sumpt); + return L1*calopt4*QaD_QuaJet_CSV3Down->Eval(CSV3)*QaD_QuaJet_PFPt4Down->Eval(pt4); +} + + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + +void clos_AJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + + //TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",50,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",50,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",80,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",50,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",50,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",50,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, CSVsorted[100], Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype == 2 ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3] < 0.8 ) continue; + if( CSV[2] < 0.6 ) continue; + // if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + } + + TString title = "QuadJet||DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.8,0.8,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + + TString outName = "check_full_AJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ) +{ + float weight = 0, weightUp = 0, weightDown = 0; +/* if( pass_trigger1==1 ){ weight += TurnOnDouble( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ); } + if( pass_trigger2==1 ){ weight += TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); } + if( pass_trigger1==1 &&pass_trigger2==1 ){ weight-=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); } +//*/ + weight += TurnOnDouble( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ); + weight += TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); + // weight-=QaD_TurnOnDouble( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=QaD_TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=QaD_TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + weight-=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + + + if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1. ); } + histos[1]->Fill( variable, weight ); + histos[2]->Fill( variable, weightUp ); + histos[3]->Fill( variable, weightDown );//*/ + + /* if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1./weight ); } + histos[1]->Fill( variable, 1. ); + histos[2]->Fill( variable, weightUp/weight ); + histos[3]->Fill( variable, weightDown/weight ); //*/ +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger/clos_DJ.cc b/AnalysisCode/Trigger/clos_DJ.cc new file mode 100644 index 0000000..ccda706 --- /dev/null +++ b/AnalysisCode/Trigger/clos_DJ.cc @@ -0,0 +1,234 @@ +#include "fittedFunctions2_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" + +TString runName = ""; +TString fitName = "_v0C"; + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4l->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1l->Eval(sumpt); + else L1=DoubleJet_L1h->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2->Eval(pt2)*DoubleJet_CSV3->Eval(CSV3)*DoubleJet_PFPt4->Eval(pt4)*DoubleJet_PFPt2->Eval(pt2); +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4lUp->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1lUp->Eval(sumpt); + else L1=DoubleJet_L1hUp->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2Up->Eval(pt2)*DoubleJet_CSV3Up->Eval(CSV3)*DoubleJet_PFPt4Up->Eval(pt4)*DoubleJet_PFPt2Up->Eval(pt2); +} + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<45) calopt4 = DoubleJet_CaloPt4lDown->Eval(pt4); + else calopt4 = DoubleJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<120) L1 = DoubleJet_L1lDown->Eval(sumpt); + else L1=DoubleJet_L1hDown->Eval(sumpt); + return L1*calopt4*DoubleJet_CaloPt2Down->Eval(pt2)*DoubleJet_CSV3Down->Eval(CSV3)*DoubleJet_PFPt4Down->Eval(pt4)*DoubleJet_PFPt2Down->Eval(pt2); +} + + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_DJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + //TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",50,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",50,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",80,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",50,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",50,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",50,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + // std::cout << Vtype << std::endl; + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype==2) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt =/* Jet_pt[GoodJets[0]]+*/Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + if( CSV[2] < 0.6 ) continue; + // if( CSV[3] < 0.8 ) continue; + // if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + + } + + TString title = "DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.8,0.8,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43);leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_DJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnDouble( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ) ); +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger/clos_QJ.cc b/AnalysisCode/Trigger/clos_QJ.cc new file mode 100644 index 0000000..8ebdbe4 --- /dev/null +++ b/AnalysisCode/Trigger/clos_QJ.cc @@ -0,0 +1,238 @@ +#include "fittedFunctions_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" + +TString runName = ""; +TString fitName = "_v0C"; +//-log(1-CSV3+1.e-7 + +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4l->Eval(pt4); + else calopt4 = QuaJet_CaloPt4h->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1l->Eval(sumpt); + else L1=QuaJet_L1h->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4lUp->Eval(pt4); + else calopt4 = QuaJet_CaloPt4hUp->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1lUp->Eval(sumpt); + else L1=QuaJet_L1hUp->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3Up->Eval(CSV3)*QuaJet_PFPt4Up->Eval(pt4); +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + if(pt4<60) calopt4 = QuaJet_CaloPt4lDown->Eval(pt4); + else calopt4 = QuaJet_CaloPt4hDown->Eval(pt4); + float L1; + if(sumpt<120) L1 = QuaJet_L1lDown->Eval(sumpt); + else L1=QuaJet_L1hDown->Eval(sumpt); + return L1*calopt4*QuaJet_CSV3Down->Eval(CSV3)*QuaJet_PFPt4Down->Eval(pt4); +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_QJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",50,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",50,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",50,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",50,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",50,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], CSVsorted[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype == 2 ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + //float sumpt = Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]; + // float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + float sumpt = Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //CSV = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3]<0.8) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + + } + + TString title = "QuadJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); + +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.8,0.8,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnQuad( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ) ); + //std::cout << TurnOnQuad( sumpt, pt2, pt4, CSV3 ) << std::endl; +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger/test.h b/AnalysisCode/Trigger/test.h new file mode 100644 index 0000000..0e38391 --- /dev/null +++ b/AnalysisCode/Trigger/test.h @@ -0,0 +1,51 @@ +#include +#include + +std::vector pts; +std::vector csvs; + + +float Pt4(float pt, float eta, int Jet_puId, int element, int iteration, int length){ + float value = 0; + if(iteration==0){ + pts.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4){ + pts.push_back(pt); + } + if (iteration==length-1){ +// pts.sort(); + if (pts.size()>=4){ + value= pts[element]; + pts.clear(); + } + } + return value; +} + +float CSV(float csv, float eta, int Jet_puId, int element, int iteration, int length){ + float value = -10; + if(iteration==0){ + csvs.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4 && csvs.size()<=4){ + csvs.push_back(csv); + } + if (iteration==length-1){ +// pts.sort(); + if (csvs.size()>=4){ + std::sort( csvs.begin(), csvs.end(), std::greater() ); + // std::cout<<"here"<Scan("Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)):Jet_pt[3]") +// +// diff --git a/AnalysisCode/Trigger_data/CSVsort.C b/AnalysisCode/Trigger_data/CSVsort.C new file mode 100644 index 0000000..67f1023 --- /dev/null +++ b/AnalysisCode/Trigger_data/CSVsort.C @@ -0,0 +1,79 @@ + +double singleCSV(float x) { + float value = -0.192834+4.02025*pow(x,1)+-11.8859*pow(x,2)+14.9736*pow(x,3)+-5.93882*pow(x,4); + if(value>1) value = 1; + if(value<0) value = 0; + return value; +// return -0.192834+4.43014*pow(x,1)-11.8859*pow(x,2)+14.9736*pow(x,3)-5.93882*pow(x,4); +// return -5.93882+14.9736*pow(x,1)-11.8859*pow(x,2)+4.43014*pow(x,3)+-0.192834*pow(x,4); +} + +double CSVn(int n, float x, float y, float z, float w) { + float c0Y = singleCSV(x); + float c1Y = singleCSV(y); + float c2Y = singleCSV(z); + float c3Y = singleCSV(w); + float c0N = 1-singleCSV(x); + float c1N = 1-singleCSV(y); + float c2N = 1-singleCSV(z); + float c3N = 1-singleCSV(w); + + float value = 0; + // + if(n<=4){ + value += c0Y * c1Y * c2Y * c3Y; + } + + if(n<=3){ + value += c0N * c1Y * c2Y * c3Y; + value += c0Y * c1N * c2Y * c3Y; + value += c0Y * c1Y * c2N * c3Y; + value += c0Y * c1Y * c2Y * c3N; + } + + if(n<=2){ + value += c0N * c1N * c2Y * c3Y; + value += c0N * c1Y * c2N * c3Y; + value += c0N * c1Y * c2Y * c3N; + value += c0Y * c1N * c2N * c3Y; + value += c0Y * c1N * c2Y * c3N; + value += c0Y * c1Y * c2N * c3N; + } + + if(n<=1){ + value += c0Y * c1N * c2N * c3N; + value += c0N * c1Y * c2N * c3N; + value += c0N * c1N * c2Y * c3N; + value += c0N * c1N * c2N * c3Y; + } + + if(n<=0){ + value += c0N * c1N * c2N * c3N; + } + + return value; +} + +double CSVn(int n, float x, float y) { + float c0Y = singleCSV(x); + float c1Y = singleCSV(y); + float c0N = 1-singleCSV(x); + float c1N = 1-singleCSV(y); + + float value = 0; + // + if(n<=2){ + value += c0Y * c1Y; + } + + if(n<=1){ + value += c0N * c1Y; + value += c0Y * c1N; + } + + if(n<=0){ + value += c0N * c1N; + } + + return value; +} diff --git a/AnalysisCode/Trigger_data/DoTurnOnAJ.py b/AnalysisCode/Trigger_data/DoTurnOnAJ.py new file mode 100644 index 0000000..cbfe7bb --- /dev/null +++ b/AnalysisCode/Trigger_data/DoTurnOnAJ.py @@ -0,0 +1,580 @@ +import ROOT +import copy +from math import * +import array + +import CMS_lumi, tdrstyle +import array + +#set the tdr style +tdrstyle.setTDRStyle() + +#change the CMS_lumi variables (see CMS_lumi.py) +CMS_lumi.lumi_7TeV = "4.8 fb^{-1}" +CMS_lumi.lumi_13TeV = "7.1 fb^{-1} (RunG)" +CMS_lumi.writeExtraText = 1 +CMS_lumi.extraText = "Preliminary" +CMS_lumi.lumi_sqrtS = "RunG 13 TeV" # used with iPeriod = 0, e.g. for simulation-only plots (default is an empty string) +iPeriod =4 +iPos = 11 + +runName = "RunG" +fitName = "_G" + +ffName = "fittedFunctions3_.h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev=100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger),"",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection),"",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) + # elif i in [1]: # check-me! + # parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) + # parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) + # elif i in [2]: # check-me! + # parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + # parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",700,700) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+".C") + CMS_lumi.CMS_lumi(c1, iPeriod, iPos) + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="SingleMuonSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +#preselection = "HLT_BIT_HLT_IsoMu24_v && Vtype==2 && CSVsorted[2]>0.6" +preselection = "HLT_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185 && diHiggs" + +#&& diHiggs"#s && LPt_mass > 400" +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 40#50 +functionMin = 10#100 +functionMax = 600#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_L1" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +#doPlots() + +#################### L1 high######################### +''' +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 15#50 +functionMin = 100#200 +functionMax = 400#350 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_L1h" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +#doPlots() + +''' +##################### CaloPt4 low ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30#60 +functionMin = 15#25 +functionMax = 145#85 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt4" +title = "p^{T}_{4}" +#doPlots() + +##################### CaloPt4 high ###et###################### +''' +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 20 +functionMin = 20 +functionMax = 150 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt4h" +title = "p^{T}_{4}" +#doPlots() +''' + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 24 +functionMin = 0.4 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CSV3" +title = "CSV_{3}" +#doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 20#25 +functionMax = 140#125 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_PFPt4" +title = "p^{T}_{4}" +#doPlots() + + + +################### L1 low ################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 250#100 +functionMax = 600#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_L1" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high ######################### +''' +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 300#120 +functionMax = 600#270 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +''' +##################### CaloPt4 low ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 30#140#70 +functionMin = 40#30#35 +functionMax = 150#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CaloPt4" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 60 +functionMax = 250 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + +##################### CaloPt4 high ######################### +''' +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 20#140#70 +functionMin = 40#30#35 +functionMax = 100#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() +''' + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 10#80#24 +functionMin = 0.6#0.2#0.4 #CSVL = 0.460 +functionMax = 1.0#1.0#1.0 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "CSVsorted[2]" +#var = "Jet_btagCSV[2]" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1) + +Nbins = 15#100#50 +functionMin = 45#30#40 +functionMax = 205#130#140 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_PFPt4" +title = "p^{T}_{4}" +#doPlots() + +############################################## + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 80 +functionMax = 400 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + + +##f.Close() diff --git a/AnalysisCode/Trigger_data/DoTurnOnDJ.py b/AnalysisCode/Trigger_data/DoTurnOnDJ.py new file mode 100644 index 0000000..50b2bb6 --- /dev/null +++ b/AnalysisCode/Trigger_data/DoTurnOnDJ.py @@ -0,0 +1,483 @@ +import ROOT +import copy +from math import * +import array + + +import CMS_lumi, tdrstyle +import array + +#set the tdr style +tdrstyle.setTDRStyle() + +#change the CMS_lumi variables (see CMS_lumi.py) +CMS_lumi.lumi_7TeV = "4.8 fb^{-1}" +CMS_lumi.lumi_13TeV = "7.1 fb^{-1} (RunG)" +CMS_lumi.writeExtraText = 1 +CMS_lumi.extraText = "Preliminary" +CMS_lumi.lumi_sqrtS = "RunG 13 TeV" # used with iPeriod = 0, e.g. for simulation-only plots (default is an empty string) +iPeriod =4 +iPos = 11 + + + +runName = "RunG" +fitName = "_G" + +ffName = "fittedFunctions2_.h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev=100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger),"",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection),"",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) + # elif i in [1]: # check-me! + # parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) + # parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) + #elif i in [2]: # check-me! + # parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + # parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",700,700) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + CMS_lumi.CMS_lumi(c1, iPeriod, iPos) + + #c1.SaveAs("turnOn_"+ped+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="SingleMuonSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +#preselection = "HLT_BIT_HLT_IsoMu24_v && Vtype==2 && CSVsorted[2]>0.6" +preselection = "HLT_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185 && diHiggs"# && LPt_mass > 400" + + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 30#50 +functionMin = 220#100 +functionMax = 600#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +''' +#################### L1 high######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 20#50 +functionMin = 200#200 +functionMax = 600#350 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +''' +##################### CaloPt4 low ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 20#60 +functionMin = 30#25 +functionMax = 140#85 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4" +title = "p^{T}_{4}" +doPlots() +''' +##################### CaloPt4 high ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 20 +functionMin = 20 +functionMax = 120 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + +''' + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 8 #64 +functionMin = 0.6 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CSV3" +title = "CSV_{3}" +doPlots() + + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 20 +functionMin = 50 +functionMax = 300 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 45#25 +functionMax = 150#125 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 80 +functionMax = 400 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger_data/DoTurnOnQJ.py b/AnalysisCode/Trigger_data/DoTurnOnQJ.py new file mode 100644 index 0000000..b07993e --- /dev/null +++ b/AnalysisCode/Trigger_data/DoTurnOnQJ.py @@ -0,0 +1,448 @@ +import ROOT +import copy +from math import * +import array + + +import CMS_lumi, tdrstyle +import array + +#set the tdr style +tdrstyle.setTDRStyle() + +#change the CMS_lumi variables (see CMS_lumi.py) +CMS_lumi.lumi_7TeV = "4.8 fb^{-1}" +CMS_lumi.lumi_13TeV = "7.1 fb^{-1} (RunG)" +CMS_lumi.writeExtraText = 1 +CMS_lumi.extraText = "Preliminary" +CMS_lumi.lumi_sqrtS = "RunG 13 TeV" # used with iPeriod = 0, e.g. for simulation-only plots (default is an empty string) +iPeriod =4 +iPos = 11 + + +runName = "RunG" +fitName = "_G" + +ffName = "fittedFunctions_.h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev = 100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger), "",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger ) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection), "",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) +# elif i in [1]: # check-me! +# parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) +# parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) +# elif i in [2]: # check-me! +# parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) +# parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]**2)/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",700,700) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + CMS_lumi.CMS_lumi(c1, iPeriod, iPos) + #c1.SaveAs("turnOn_"+ped+"_"+runName+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+"_"+runName+".root") + + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="/eos/uscms/store/user/cvernier/SingleMuonSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "/scratch/sdonato/VHbbRun2/V20/CMSSW_7_1_5/src/Xbb/env_turnOnMET90/ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +#preselection = "HLT_BIT_HLT_IsoMu24_v&& Vtype==2&& CSVsorted[2]>0.6 " # && CMVAVsorted[3]>0.185"# && Jet_puId>=4" #"HLT_BIT_HLT_IsoMu18_v" +preselection = "HLT_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185 && diHiggs"# && LPt_mass > 400"# && diHiggs"#" + + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (100,50,0.01,1) + +Nbins = 20#50 +functionMin = 210#100 +functionMax = 600#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +''' +#################### L1 high ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 200#120 +functionMax = 600#270 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +''' +##################### CaloPt4 low ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 25#140#70 +functionMin = 40#30#35 +functionMax = 175#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4" +title = "p^{T}_{4}" +doPlots() + +''' +##################### CaloPt4 high ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 20#140#70 +functionMin = 30#30#35 +functionMax = 110#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() +''' + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 12#80#24 +functionMin = 0.72#0.2#0.4 #CSVL = 0.460 +functionMax = 1.0#1.0#1.0 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV))" +#var = "CSVsorted[2]" +#var = "Jet_btagCSV[2]" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 20#100#50 +functionMin = 45#30#40 +functionMax = 200#130#140 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger_data/README b/AnalysisCode/Trigger_data/README new file mode 100644 index 0000000..f6bce22 --- /dev/null +++ b/AnalysisCode/Trigger_data/README @@ -0,0 +1,18 @@ +1) Produce skimmed ttrees using TE_presel.C, example of how to run it for v24 Run B is in TE_runB.sh + + 1a) hadd all relavant runs as SingleMuonSkimmed.root + +2) Produce turn-on using DoTurnOnXJ, where + X=Q for Quad Jet Trigger + X=D for Double Jet Trigger + X=A for Quad&&Double Trigger + + This produces fitterFunction*.h, the efficiency is then produced using trig.h + +3) Produce closure plots using clos_XJ.cc, where + X=Q for Quad Jet Trigger + X=D for Double Jet Trigger + X=C for Quad&&Double Trigger + X=A for Quad||Double Trigger + +4) Compare in signal using ../Hbb_Trigger.cc, change path to trig.h in the header to data/ttbar accordingly diff --git a/AnalysisCode/Trigger_data/TE_presel.cc b/AnalysisCode/Trigger_data/TE_presel.cc new file mode 100644 index 0000000..89e2b7b --- /dev/null +++ b/AnalysisCode/Trigger_data/TE_presel.cc @@ -0,0 +1,198 @@ +TString runName = ""; + + +TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) +{ + TLorentzVector jet_p4; + jet_p4.SetPtEtaPhiM(pT, eta, phi, M); + return jet_p4; +} + + +void TE_presel( TString run = "RunB", TString folder = "VHBB_HEPPY_V24_SingleMuon__Run2016B-PromptReco-v2/160910_205020/", TString subfolder = "0000/", TString file = "tree_31" ) +{ + + TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V24/SingleMuon/" + folder + subfolder + file + ".root"; + + // TFile *_file0 = TFile::Open(fileName); + TChain *tree=new TChain("tree"); + tree->Add(fileName); + // TChain* tree = (TChain*) _file0->Get("tree"); + runName = run+"_"+file; + Int_t HLT_BIT_HLT_IsoMu24_v; + Int_t nJet, Jet_puId[100], HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, ntrgObjects_hltQuadCentralJet45, ntrgObjects_hltBTagCaloCSVp087Triple, ntrgObjects_hltQuadPFCentralJetLooseID45,ntrgObjects_hltQuadCentralJet30, ntrgObjects_hltDoubleCentralJet90, ntrgObjects_hltQuadPFCentralJetLooseID30, ntrgObjects_hltDoublePFCentralJetLooseID90, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v; + Float_t jet_pt[100], Jet_eta[100], Jet_btagCSV[100], vLeptons_pt[100], Jet_btagCMVAV2[100], Jet_phi[100], Jet_mass[100], Vtype; + tree->SetBranchStatus("*",0); + tree->SetBranchAddress("Jet_pt", &(jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_phi", &(Jet_phi)); tree->SetBranchStatus("Jet_phi", 1); + tree->SetBranchAddress("Jet_mass", &(Jet_mass)); tree->SetBranchStatus("Jet_mass", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet30", &(ntrgObjects_hltQuadCentralJet30)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoubleCentralJet90", &(ntrgObjects_hltDoubleCentralJet90)); tree->SetBranchStatus("ntrgObjects_hltDoubleCentralJet90", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID30", &(ntrgObjects_hltQuadPFCentralJetLooseID30)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoublePFCentralJetLooseID90", &(ntrgObjects_hltDoublePFCentralJetLooseID90)); tree->SetBranchStatus("ntrgObjects_hltDoublePFCentralJetLooseID90", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet45", &(ntrgObjects_hltQuadCentralJet45)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet45", 1); + tree->SetBranchAddress("ntrgObjects_hltBTagCaloCSVp087Triple", &(ntrgObjects_hltBTagCaloCSVp087Triple)); tree->SetBranchStatus("ntrgObjects_hltBTagCaloCSVp087Triple", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID45", &(ntrgObjects_hltQuadPFCentralJetLooseID45)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID45", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("vLeptons_pt", &(vLeptons_pt)); tree->SetBranchStatus("vLeptons_pt", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + if( tree->GetEntries() == 0 ) return; + Float_t jet_pt_[100], Jet_eta_[100], Jet_btagCSV_[100], Jet_btagCMVAV2_[100], LPt_mass; + Int_t Jet_puId_[100], diHiggs, diHiggsTight; + //TFile *outfile=new TFile("TTbarSkimmed"+runName+".root", "recreate"); + TFile *outfile=new TFile(run+"/"+subfolder+"SingleMuonSkimmed"+runName+".root", "recreate"); + + TTree *outtree=tree->CloneTree(0); + Float_t CSVsorted[100], CMVAVsorted[100]; + // outtree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + outtree->Branch("CMVAVsorted",&CMVAVsorted,"CMVAVsorted[nJet]/F"); + outtree->Branch("CSVsorted",&CSVsorted,"CSVsorted[nJet]/F"); + outtree->Branch("LPt_mass",&LPt_mass,"LPt_mass/F"); + outtree->Branch("diHiggs",&diHiggs,"diHiggs/I"); + outtree->Branch("diHiggsTight",&diHiggsTight,"diHiggsTight/I"); + + outtree->SetBranchAddress("Jet_pt", &(jet_pt_)); outtree->SetBranchStatus("Jet_pt", 1); + outtree->SetBranchAddress("Jet_eta", &(Jet_eta_)); outtree->SetBranchStatus("Jet_eta", 1); + outtree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV_)); outtree->SetBranchStatus("Jet_btagCSV", 1); + + outtree->SetBranchAddress("Jet_puId", &(Jet_puId_)); outtree->SetBranchStatus("Jet_puId", 1); + outtree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2_)); outtree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (Int_t i=0; i= shout ){ std::cout << "Event " << i << "/" << nEvents << std::endl; shout=shout+nEvents/10; } + + tree->GetEvent(i); + if( ! ( HLT_BIT_HLT_IsoMu24_v ) ) continue; + Int_t counter = 0; + Int_t GoodJets[100]; + for( Int_t j=0; j=4 ){ GoodJets[counter]=j; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + //CSVsorted[0] = Jet_btagCSV[GoodJets[0]]; CSVsorted[1] = Jet_btagCSV[GoodJets[1]]; CSVsorted[2] = Jet_btagCSV[GoodJets[2]]; CSVsorted[3] = Jet_btagCSV[GoodJets[3]]; + //float CSVsorted[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + //std::cout << "here" << std::endl; + for( Int_t j=0; j() ); + std::sort( CMVAVsorted, CMVAVsorted+counter, std::greater() ); + nJet=counter; + + + + + bool foundHH=false; + diHiggs = 0; diHiggsTight = 0; + double m_diff_old=70.; + double chi2_old=200.; + int H1jet1_i=-1, H1jet2_i=-1; + int H2jet1_i=-1, H2jet2_i=-1; + double jet_pT_cut1=45.; + + double mean_H1_mass_=120;//125; + double sigma_H1_mass_=25; + double mean_H2_mass_=120;//125; + double sigma_H2_mass_=25; + //std::cout<<"evt = "<Write("tree"); + outfile->Close(); +} + diff --git a/AnalysisCode/Trigger_data/TE_runB.sh b/AnalysisCode/Trigger_data/TE_runB.sh new file mode 100644 index 0000000..8129a51 --- /dev/null +++ b/AnalysisCode/Trigger_data/TE_runB.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +run="RunB" +folder="VHBB_HEPPY_V24_SingleMuon__Run2016B-PromptReco-v2/160910_205020/" + + +for i in {1..3023} #3023 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +done + +sfs="0000 0001 0002 0003" +out_L1="" + +for f in $sfs +do + name="SingleMuonSkimmed$f.root" + echo "Output file: $name" + echo "Input files:" + files=$(ls $run/$f) + new_files="" + for file in $files + do + # echo $file + new_files="$new_files $run/$f/$file" + done + hadd -f $run/$name $new_files + out_L1="$out_L1 $run/$name" +done + +hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/Trigger_data/clos_AJ.cc b/AnalysisCode/Trigger_data/clos_AJ.cc new file mode 100644 index 0000000..9fd60b8 --- /dev/null +++ b/AnalysisCode/Trigger_data/clos_AJ.cc @@ -0,0 +1,220 @@ +//#include "fittedFunctions_.h" +//#include "fittedFunctions2_.h" +//#include "fittedFunctions3_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + +TString runName = ""; +TString fitName = "_1B_C"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + +void clos_AJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + + //TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, CSVsorted[100], Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3] < 0.8 ) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + } + + TString title = "QuadJet||DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + + TString outName = "check_full_AJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ) +{ + float weight = 0, weightUp = 0, weightDown = 0; + float weightT = TurnOnDouble( sumpt, pt2, pt4, CSV3 ); float weightUpT = TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ); float weightDownT = TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ); + weight+=weightT;weightUp+=pow(weightUpT-weightT,2);weightDown+=pow(weightDownT-weightT,2); + + weightT = TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUpT = TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDownT = TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); + weight+=weightT;weightUp+=pow(weightUpT-weightT,2);weightDown+=pow(weightDownT-weightT,2); + + weightT=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUpT=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDownT=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + // weightT=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUpT=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDownT=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + weight-=weightT;weightUp+=pow(weightUpT-weightT,2);weightDown+=pow(weightDownT-weightT,2); + weightUp=weight+sqrt(weightUp); weightDown=weight-sqrt(weightDown); + + if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1. ); } + histos[1]->Fill( variable, weight ); + histos[2]->Fill( variable, weightUp ); + histos[3]->Fill( variable, weightDown );//*/ + + /* if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1./weight ); } + histos[1]->Fill( variable, 1. ); + histos[2]->Fill( variable, weightUp/weight ); + histos[3]->Fill( variable, weightDown/weight ); //*/ +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_data/clos_CJ.cc b/AnalysisCode/Trigger_data/clos_CJ.cc new file mode 100644 index 0000000..127c62b --- /dev/null +++ b/AnalysisCode/Trigger_data/clos_CJ.cc @@ -0,0 +1,207 @@ +//#include "fittedFunctions_.h" +//#include "fittedFunctions2_.h" +//#include "fittedFunctions3_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + +TString runName = ""; +TString fitName = "_1B_C"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + +void clos_CJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + + //TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, CSVsorted[100], Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3] < 0.8 ) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + } + + TString title = "QuadJet&&DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.855,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + + TString outName = "check_full_CJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ) +{ + float weight = 0, weightUp = 0, weightDown = 0; + weight=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + + if( pass_trigger1==1 && pass_trigger2==1 ){ histos[0]->Fill( variable, 1. ); } + histos[1]->Fill( variable, weight ); + histos[2]->Fill( variable, weightUp ); + histos[3]->Fill( variable, weightDown );//*/ + +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_data/clos_DJ.cc b/AnalysisCode/Trigger_data/clos_DJ.cc new file mode 100644 index 0000000..0e68130 --- /dev/null +++ b/AnalysisCode/Trigger_data/clos_DJ.cc @@ -0,0 +1,199 @@ +//#include "fittedFunctions2_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + +TString runName = ""; +TString fitName = "_1B"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_DJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + //TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + // std::cout << Vtype << std::endl; + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype==2 && diHiggs ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt =Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[2] < 0.6 ) continue; + // if( CSV[3] < 0.8 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + + } + + TString title = "DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + histos[0]->SetTitle(Title); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43);leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_DJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnDouble( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ) ); +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_data/clos_QJ.cc b/AnalysisCode/Trigger_data/clos_QJ.cc new file mode 100644 index 0000000..4a626a9 --- /dev/null +++ b/AnalysisCode/Trigger_data/clos_QJ.cc @@ -0,0 +1,204 @@ +//#include "fittedFunctions_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + +TString runName = ""; +TString fitName = "_1B"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_QJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; + TString fileName = "SingleMuonSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",20,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, HLT_BIT_HLT_IsoMu24_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], CSVsorted[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT_BIT_HLT_IsoMu24_v", &(HLT_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs ) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + //float sumpt = Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float sumpt = Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //CSV = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3]<0.8) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + + } + + TString title = "QuadJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); + +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.8,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnQuad( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ) ); + //std::cout << TurnOnQuad( sumpt, pt2, pt4, CSV3 ) << std::endl; +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_data/comp_TO.C b/AnalysisCode/Trigger_data/comp_TO.C new file mode 100644 index 0000000..6bffe06 --- /dev/null +++ b/AnalysisCode/Trigger_data/comp_TO.C @@ -0,0 +1,137 @@ +#include "../TDRStyle.h" +int comp_TO() +{ + TF1* QuaJet_L1B = new TF1("QuaJet_L1","(1-((0.5-(0.5*TMath::Erf((x-269.548)*((1+sq(0))/64.3428))))*0.842623))-0.157454", 50,500 ); + TF1* QuaJet_L1C = new TF1("QuaJet_L1","(1-((0.5-(0.5*TMath::Erf((x-269.048)*((1+sq(0))/64.6114))))*0.839642))-0.160377", 50,500 ); + TF1* QuaJet_L1D = new TF1("QuaJet_L1","(1-((0.5-(0.5*TMath::Erf((x-273.166)*((1+sq(0))/66.5749))))*0.872202))-0.127885", 50,500 ); + + TF1* QuaJet_CaloPt4B = new TF1("QuaJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x-30.7698)*((1+sq(0))/27.9577))))*2))-0.0227452", 25,200 ); + TF1* QuaJet_CaloPt4C = new TF1("QuaJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x-29.6498)*((1+sq(0))/28.6924))))*2))-0.0224492", 25,200 ); + TF1* QuaJet_CaloPt4D = new TF1("QuaJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x-30.0768)*((1+sq(0))/29.0729))))*2))-0.00832278", 25,200 ); + + TF1* QuaJet_CSV3B = new TF1("QuaJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.861822)*((1+sq(0))/0.338825))))*0.938819))-2.44655e-10"); + TF1* QuaJet_CSV3C = new TF1("QuaJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.867794)*((1+sq(0))/0.338295))))*0.92719))-1.17284e-09"); + TF1* QuaJet_CSV3D = new TF1("QuaJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.843022)*((1+sq(0))/0.347002))))*0.919297))-1.4537e-10"); + + + TF1* QuaJet_PFPt4B = new TF1("QuaJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-28.8291)*((1+sq(0))/17.4039))))*2))-0.000753323", 25,200 ); + TF1* QuaJet_PFPt4C = new TF1("QuaJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-28.3691)*((1+sq(0))/18.3054))))*2))-0.000390085", 25,200 ); + TF1* QuaJet_PFPt4D = new TF1("QuaJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-33.5366)*((1+sq(0))/13.5425))))*2))-1.19182e-13", 25,200 ); + + + + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + TCanvas c("c","c",800,800); + c.cd(); + QuaJet_L1B->Draw(); + QuaJet_L1C->Draw("same"); + QuaJet_L1D->Draw("same"); + QuaJet_L1B->SetLineColor( kBlack ); + QuaJet_L1C->SetLineColor( kRed ); + QuaJet_L1D->SetLineColor( kGreen ); + + c.SaveAs("comp_QJ_L1.pdf"); + + QuaJet_CaloPt4B->Draw(); + QuaJet_CaloPt4C->Draw("same"); + QuaJet_CaloPt4D->Draw("same"); + QuaJet_CaloPt4B->SetLineColor( kBlack ); + QuaJet_CaloPt4C->SetLineColor( kRed ); + QuaJet_CaloPt4D->SetLineColor( kGreen ); + + c.SaveAs("comp_QJ_CaloPt4.pdf"); + + QuaJet_CSV3B->Draw(); + QuaJet_CSV3C->Draw("same"); + QuaJet_CSV3D->Draw("same"); + QuaJet_CSV3B->SetLineColor( kBlack ); + QuaJet_CSV3C->SetLineColor( kRed ); + QuaJet_CSV3D->SetLineColor( kGreen ); + + c.SaveAs("comp_QJ_CSV3.pdf"); + + QuaJet_PFPt4B->Draw(); + QuaJet_PFPt4C->Draw("same"); + QuaJet_PFPt4D->Draw("same"); + QuaJet_PFPt4B->SetLineColor( kBlack ); + QuaJet_PFPt4C->SetLineColor( kRed ); + QuaJet_PFPt4D->SetLineColor( kGreen ); + + c.SaveAs("comp_QJ_PFPt4.pdf"); + +TF1* DoubleJet_L1B = new TF1("DoubleJet_L1","(1-((0.5-(0.5*TMath::Erf((x-269.502)/61.7696)))*0.990749))-0.00916106", 50,500); +TF1* DoubleJet_L1C = new TF1("DoubleJet_L1","(1-((0.5-(0.5*TMath::Erf((x-267.463)/61.036)))*0.965259))-0.0345786", 50,500); +TF1* DoubleJet_L1D = new TF1("DoubleJet_L1","(1-((0.5-(0.5*TMath::Erf((x-270.835)/62.4551)))*0.99053))-0.00938728", 50,500); +TF1* DoubleJet_CaloPt2B = new TF1("DoubleJet_CaloPt2","(1-((0.5-(0.5*TMath::Erf((x-90.7333)/15.999)))*0.874868))-0.0769032", 25,200); +TF1* DoubleJet_CaloPt2C = new TF1("DoubleJet_CaloPt2","(1-((0.5-(0.5*TMath::Erf((x-89.503)/16.7813)))*0.882343))-0.0733072", 25,200); +TF1* DoubleJet_CaloPt2D = new TF1("DoubleJet_CaloPt2","(1-((0.5-(0.5*TMath::Erf((x-90.0974)/16.8363)))*0.881546))-0.0654595", 25,200); +TF1* DoubleJet_CaloPt4B = new TF1("DoubleJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x-1.46332)/33.421)))*2))-0.0093725", 25,200); +TF1* DoubleJet_CaloPt4C = new TF1("DoubleJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x+5.88453)/39.0734)))*2))-0.00644141", 25,200); +TF1* DoubleJet_CaloPt4D = new TF1("DoubleJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x+5.38785)/39.8142)))*2))-1.08473e-11", 25,200); +TF1* DoubleJet_CSV3B = new TF1("DoubleJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.868794)/0.348695)))*0.953974))-1.28995e-09"); +TF1* DoubleJet_CSV3C = new TF1("DoubleJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.878593)/0.36211)))*0.945802))-7.64778e-10"); +TF1* DoubleJet_CSV3D = new TF1("DoubleJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.842657)/0.293373)))*0.908824))-5.72134e-10"); +TF1* DoubleJet_PFPt4B = new TF1("DoubleJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-13.0155)/15.7164)))*1.66151))-0.000731984", 25,200); +TF1* DoubleJet_PFPt4C = new TF1("DoubleJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-30.888)/6.19168)))*0.162489))-0.000675357", 25,200); +TF1* DoubleJet_PFPt4D = new TF1("DoubleJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-20.1888)/9.76471)))*2))-0.000464548", 25,200); +TF1* DoubleJet_PFPt2B = new TF1("DoubleJet_PFPt2","(1-((0.5-(0.5*TMath::Erf((x-84.5527)/16.8585)))*1.00809))-0.000363484", 25,200); +TF1* DoubleJet_PFPt2C = new TF1("DoubleJet_PFPt2","(1-((0.5-(0.5*TMath::Erf((x-76.8024)/19.5322)))*1.80434))-0.000367159", 25,200); +TF1* DoubleJet_PFPt2D = new TF1("DoubleJet_PFPt2","(1-((0.5-(0.5*TMath::Erf((x-91.4797)/10.4933)))*0.626132))-2.96839e-07", 25,200); + + DoubleJet_L1B->Draw(); + DoubleJet_L1C->Draw("same"); + DoubleJet_L1D->Draw("same"); + DoubleJet_L1B->SetLineColor( kBlack ); + DoubleJet_L1C->SetLineColor( kRed ); + DoubleJet_L1D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_L1.pdf"); + + DoubleJet_CaloPt4B->Draw(); + DoubleJet_CaloPt4C->Draw("same"); + DoubleJet_CaloPt4D->Draw("same"); + DoubleJet_CaloPt4B->SetLineColor( kBlack ); + DoubleJet_CaloPt4C->SetLineColor( kRed ); + DoubleJet_CaloPt4D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_CaloPt4.pdf"); + + DoubleJet_CSV3B->Draw(); + DoubleJet_CSV3C->Draw("same"); + DoubleJet_CSV3D->Draw("same"); + DoubleJet_CSV3B->SetLineColor( kBlack ); + DoubleJet_CSV3C->SetLineColor( kRed ); + DoubleJet_CSV3D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_CSV3.pdf"); + + DoubleJet_PFPt4B->Draw(); + DoubleJet_PFPt4C->Draw("same"); + DoubleJet_PFPt4D->Draw("same"); + DoubleJet_PFPt4B->SetLineColor( kBlack ); + DoubleJet_PFPt4C->SetLineColor( kRed ); + DoubleJet_PFPt4D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_PFPt4.pdf"); + + DoubleJet_CaloPt2B->Draw(); + DoubleJet_CaloPt2C->Draw("same"); + DoubleJet_CaloPt2D->Draw("same"); + DoubleJet_CaloPt2B->SetLineColor( kBlack ); + DoubleJet_CaloPt2C->SetLineColor( kRed ); + DoubleJet_CaloPt2D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_CaloPt2.pdf"); + + DoubleJet_PFPt2B->Draw(); + DoubleJet_PFPt2C->Draw("same"); + DoubleJet_PFPt2D->Draw("same"); + DoubleJet_PFPt2B->SetLineColor( kBlack ); + DoubleJet_PFPt2C->SetLineColor( kRed ); + DoubleJet_PFPt2D->SetLineColor( kGreen ); + + c.SaveAs("comp_DJ_PFPt2.pdf"); + return 0; +} diff --git a/AnalysisCode/Trigger_data/fittedFunctions2_.h b/AnalysisCode/Trigger_data/fittedFunctions2_.h new file mode 100644 index 0000000..4458784 --- /dev/null +++ b/AnalysisCode/Trigger_data/fittedFunctions2_.h @@ -0,0 +1,18 @@ +TF1* DoubleJet_L1 = new TF1("DoubleJet_L1","1-(0.5-0.5*TMath::Erf((x-201.354)/101.605))*1.63395-0.00122198"); +TF1* DoubleJet_L1Up = new TF1("DoubleJet_L1Up","1-(0.5-0.5*TMath::Erf((x-197.234)/101.605))*1.63395--0.018778"); +TF1* DoubleJet_L1Down = new TF1("DoubleJet_L1Down","1-(0.5-0.5*TMath::Erf((x-205.439)/101.605))*1.63395-0.021222"); +TF1* DoubleJet_CaloPt4 = new TF1("DoubleJet_CaloPt4","1-(0.5-0.5*TMath::Erf((x-42.5075)/3.85283))*1.71272-0.00157397"); +TF1* DoubleJet_CaloPt4Up = new TF1("DoubleJet_CaloPt4Up","1-(0.5-0.5*TMath::Erf((x-40.8228)/3.85283))*1.71272--0.018426"); +TF1* DoubleJet_CaloPt4Down = new TF1("DoubleJet_CaloPt4Down","1-(0.5-0.5*TMath::Erf((x-49.9242)/3.85283))*1.71272-0.021574"); +TF1* DoubleJet_CaloPt2 = new TF1("DoubleJet_CaloPt2","1-(0.5-0.5*TMath::Erf((x-88.8755)/16.6398))*0.973186-0.00759618"); +TF1* DoubleJet_CaloPt2Up = new TF1("DoubleJet_CaloPt2Up","1-(0.5-0.5*TMath::Erf((x-87.9863)/16.6398))*0.973186--0.0124038"); +TF1* DoubleJet_CaloPt2Down = new TF1("DoubleJet_CaloPt2Down","1-(0.5-0.5*TMath::Erf((x-89.764)/16.6398))*0.973186-0.0275962"); +TF1* DoubleJet_CSV3 = new TF1("DoubleJet_CSV3","1-(0.5-0.5*TMath::Erf((x--1.68888)/2.08796))*1.13811-0.120878"); +TF1* DoubleJet_CSV3Up = new TF1("DoubleJet_CSV3Up","1-(0.5-0.5*TMath::Erf((x--1.91114)/2.08796))*1.13811-0.0890158"); +TF1* DoubleJet_CSV3Down = new TF1("DoubleJet_CSV3Down","1-(0.5-0.5*TMath::Erf((x--1.46725)/2.08796))*1.13811-0.150426"); +TF1* DoubleJet_PFPt4 = new TF1("DoubleJet_PFPt4","1-(0.5-0.5*TMath::Erf((x-44.6869)/0.504244))*-0.00493864-0"); +TF1* DoubleJet_PFPt4Up = new TF1("DoubleJet_PFPt4Up","1-(0.5-0.5*TMath::Erf((x-80.5313)/0.504244))*-0.00493864--0.02"); +TF1* DoubleJet_PFPt4Down = new TF1("DoubleJet_PFPt4Down","1-(0.5-0.5*TMath::Erf((x-80.5313)/0.504244))*-0.00493864-0.02"); +TF1* DoubleJet_PFPt2 = new TF1("DoubleJet_PFPt2","1-(0.5-0.5*TMath::Erf((x-91.638)/16.0837))*0.560166-0"); +TF1* DoubleJet_PFPt2Up = new TF1("DoubleJet_PFPt2Up","1-(0.5-0.5*TMath::Erf((x-89.401)/16.0837))*0.560166--0.02"); +TF1* DoubleJet_PFPt2Down = new TF1("DoubleJet_PFPt2Down","1-(0.5-0.5*TMath::Erf((x-93.8346)/16.0837))*0.560166-0.02"); diff --git a/AnalysisCode/Trigger_data/fittedFunctions3_.h b/AnalysisCode/Trigger_data/fittedFunctions3_.h new file mode 100644 index 0000000..b1a014a --- /dev/null +++ b/AnalysisCode/Trigger_data/fittedFunctions3_.h @@ -0,0 +1,9 @@ +TF1* QaD_DoubleJet_L1 = new TF1("QaD_DoubleJet_L1","1-(0.5-0.5*TMath::Erf((x-345.851)/28.9685))*0.124959-7.44815e-10"); +TF1* QaD_DoubleJet_L1Up = new TF1("QaD_DoubleJet_L1Up","1-(0.5-0.5*TMath::Erf((x-335.992)/28.9685))*0.124959--0.02"); +TF1* QaD_DoubleJet_L1Down = new TF1("QaD_DoubleJet_L1Down","1-(0.5-0.5*TMath::Erf((x-355.131)/28.9685))*0.124959-0.02"); +TF1* QaD_DoubleJet_CaloPt2 = new TF1("QaD_DoubleJet_CaloPt2","1-(0.5-0.5*TMath::Erf((x-88.3836)/15.1338))*0.964401-0.00999634"); +TF1* QaD_DoubleJet_CaloPt2Up = new TF1("QaD_DoubleJet_CaloPt2Up","1-(0.5-0.5*TMath::Erf((x-87.3837)/15.1338))*0.964401--0.0100037"); +TF1* QaD_DoubleJet_CaloPt2Down = new TF1("QaD_DoubleJet_CaloPt2Down","1-(0.5-0.5*TMath::Erf((x-89.3855)/15.1338))*0.964401-0.0299963"); +TF1* QaD_DoubleJet_PFPt2 = new TF1("QaD_DoubleJet_PFPt2","1-(0.5-0.5*TMath::Erf((x-91.2598)/14.3756))*0.554165-0"); +TF1* QaD_DoubleJet_PFPt2Up = new TF1("QaD_DoubleJet_PFPt2Up","1-(0.5-0.5*TMath::Erf((x-88.8341)/14.3756))*0.554165--0.02"); +TF1* QaD_DoubleJet_PFPt2Down = new TF1("QaD_DoubleJet_PFPt2Down","1-(0.5-0.5*TMath::Erf((x-93.8287)/14.3756))*0.554165-0.02"); diff --git a/AnalysisCode/Trigger_data/fittedFunctions_.h b/AnalysisCode/Trigger_data/fittedFunctions_.h new file mode 100644 index 0000000..afac770 --- /dev/null +++ b/AnalysisCode/Trigger_data/fittedFunctions_.h @@ -0,0 +1,12 @@ +TF1* QuaJet_L1 = new TF1("QuaJet_L1","(1-((0.5-(0.5*TMath::Erf((x-195.877)*((1+sq(0))/69.9309))))*2))-0.00506127"); +TF1* QuaJet_L1Up = new TF1("QuaJet_L1Up","(1-((0.5-(0.5*TMath::Erf((x-189.057)*((1+sq(0))/69.9309))))*1.98))-0.00506127"); +TF1* QuaJet_L1Down = new TF1("QuaJet_L1Down","(1-((0.5-(0.5*TMath::Erf((x-202.411)*((1+sq(0))/69.9309))))*2.02))-0.00506127"); +TF1* QuaJet_CaloPt4 = new TF1("QuaJet_CaloPt4","(1-((0.5-(0.5*TMath::Erf((x-37.2939)*((1+sq(0))/19.5017))))*1.14212))-1.50174e-12"); +TF1* QuaJet_CaloPt4Up = new TF1("QuaJet_CaloPt4Up","(1-((0.5-(0.5*TMath::Erf((x-35.3386)*((1+sq(0))/19.5017))))*1.12212))-1.50174e-12"); +TF1* QuaJet_CaloPt4Down = new TF1("QuaJet_CaloPt4Down","(1-((0.5-(0.5*TMath::Erf((x-39.0542)*((1+sq(0))/19.5017))))*1.16212))-1.50174e-12"); +TF1* QuaJet_CSV3 = new TF1("QuaJet_CSV3","(1-((0.5-(0.5*TMath::Erf((x-0.762439)*((1+sq(0))/0.0105339))))*0.419395))-0.180613"); +TF1* QuaJet_CSV3Up = new TF1("QuaJet_CSV3Up","(1-((0.5-(0.5*TMath::Erf((x-0.750149)*((1+sq(0))/0.0105339))))*0.399395))-0.180613"); +TF1* QuaJet_CSV3Down = new TF1("QuaJet_CSV3Down","(1-((0.5-(0.5*TMath::Erf((x-0.779783)*((1+sq(0))/0.0105339))))*0.439395))-0.180613"); +TF1* QuaJet_PFPt4 = new TF1("QuaJet_PFPt4","(1-((0.5-(0.5*TMath::Erf((x-46.5954)*((1+sq(0))/2.10924))))*1.39475))-0.00518259"); +TF1* QuaJet_PFPt4Up = new TF1("QuaJet_PFPt4Up","(1-((0.5-(0.5*TMath::Erf((x-45.2209)*((1+sq(0))/2.10924))))*1.37475))-0.00518259"); +TF1* QuaJet_PFPt4Down = new TF1("QuaJet_PFPt4Down","(1-((0.5-(0.5*TMath::Erf((x-50.115)*((1+sq(0))/2.10924))))*1.41475))-0.00518259"); diff --git a/AnalysisCode/Trigger_data/tdrstyleTrigger.C b/AnalysisCode/Trigger_data/tdrstyleTrigger.C new file mode 100644 index 0000000..55cc858 --- /dev/null +++ b/AnalysisCode/Trigger_data/tdrstyleTrigger.C @@ -0,0 +1,157 @@ +#include "TStyle.h" + +// tdrGrid: Turns the grid lines on (true) or off (false) + +void tdrGrid(bool gridOn, TStyle *tdrStyle) { + tdrStyle->SetPadGridX(gridOn); + tdrStyle->SetPadGridY(gridOn); +} + +// fixOverlay: Redraws the axis + +// void fixOverlay() { +// gPad->RedrawAxis(); +// } + +void setTDRStyle() { + TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); + +// For the canvas: + tdrStyle->SetCanvasBorderMode(0); + tdrStyle->SetCanvasColor(kWhite); + tdrStyle->SetCanvasDefH(600); //Height of canvas + tdrStyle->SetCanvasDefW(600); //Width of canvas + tdrStyle->SetCanvasDefX(0); //POsition on screen + tdrStyle->SetCanvasDefY(0); + +// For the Pad: + tdrStyle->SetPadBorderMode(0); + // tdrStyle->SetPadBorderSize(Width_t size = 1); + tdrStyle->SetPadColor(kWhite); + tdrStyle->SetPadGridX(true); + tdrStyle->SetPadGridY(true); + tdrStyle->SetGridColor(0); + tdrStyle->SetGridStyle(3); + tdrStyle->SetGridWidth(1); + +// For the frame: + tdrStyle->SetFrameBorderMode(0); + tdrStyle->SetFrameBorderSize(1); + tdrStyle->SetFrameFillColor(0); + tdrStyle->SetFrameFillStyle(0); + tdrStyle->SetFrameLineColor(1); + tdrStyle->SetFrameLineStyle(1); + tdrStyle->SetFrameLineWidth(1); + +// For the histo: + // tdrStyle->SetHistFillColor(1); + // tdrStyle->SetHistFillStyle(0); + tdrStyle->SetHistLineColor(1); + tdrStyle->SetHistLineStyle(0); + tdrStyle->SetHistLineWidth(1); + // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); + // tdrStyle->SetNumberContours(Int_t number = 20); + + tdrStyle->SetEndErrorSize(2); +// tdrStyle->SetErrorMarker(20); + tdrStyle->SetErrorX(0.); + + tdrStyle->SetMarkerStyle(20); + +//For the fit/function: + tdrStyle->SetOptFit(1); + tdrStyle->SetFitFormat("5.4g"); + tdrStyle->SetFuncColor(2); + tdrStyle->SetFuncStyle(1); + tdrStyle->SetFuncWidth(1); + +//For the date: + tdrStyle->SetOptDate(0); + // tdrStyle->SetDateX(Float_t x = 0.01); + // tdrStyle->SetDateY(Float_t y = 0.01); + +// For the statistics box: + tdrStyle->SetOptFile(0); + tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); + tdrStyle->SetStatColor(kWhite); + tdrStyle->SetStatFont(42); + tdrStyle->SetStatFontSize(0.025); + tdrStyle->SetStatTextColor(1); + tdrStyle->SetStatFormat("6.4g"); + tdrStyle->SetStatBorderSize(1); + tdrStyle->SetStatH(0.1); + tdrStyle->SetStatW(0.15); + // tdrStyle->SetStatStyle(Style_t style = 1001); + // tdrStyle->SetStatX(Float_t x = 0); + // tdrStyle->SetStatY(Float_t y = 0); + +// Margins: + tdrStyle->SetPadTopMargin(0.05); + tdrStyle->SetPadBottomMargin(0.13); + tdrStyle->SetPadLeftMargin(0.16); + tdrStyle->SetPadRightMargin(0.02); + +// For the Global title: + + tdrStyle->SetOptTitle(0); + tdrStyle->SetTitleFont(42); + tdrStyle->SetTitleColor(1); + tdrStyle->SetTitleTextColor(1); + tdrStyle->SetTitleFillColor(10); + tdrStyle->SetTitleFontSize(0.05); + // tdrStyle->SetTitleH(0); // Set the height of the title box + // tdrStyle->SetTitleW(0); // Set the width of the title box + // tdrStyle->SetTitleX(0); // Set the position of the title box + // tdrStyle->SetTitleY(0.985); // Set the position of the title box + // tdrStyle->SetTitleStyle(Style_t style = 1001); + // tdrStyle->SetTitleBorderSize(2); + +// For the axis titles: + + tdrStyle->SetTitleColor(1, "XYZ"); + tdrStyle->SetTitleFont(42, "XYZ"); + tdrStyle->SetTitleSize(0.06, "XYZ"); + // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? + // tdrStyle->SetTitleYSize(Float_t size = 0.02); + tdrStyle->SetTitleXOffset(0.9); + tdrStyle->SetTitleYOffset(1.25); + // tdrStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset + +// For the axis labels: + + tdrStyle->SetLabelColor(1, "XYZ"); + tdrStyle->SetLabelFont(42, "XYZ"); + tdrStyle->SetLabelOffset(0.007, "XYZ"); + tdrStyle->SetLabelSize(0.05, "XYZ"); + +// For the axis: + + tdrStyle->SetAxisColor(1, "XYZ"); + tdrStyle->SetStripDecimals(kTRUE); + tdrStyle->SetTickLength(0.03, "XYZ"); + tdrStyle->SetNdivisions(510, "XYZ"); + tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame + tdrStyle->SetPadTickY(1); + +// Change for log plots: + tdrStyle->SetOptLogx(0); + tdrStyle->SetOptLogy(0); + tdrStyle->SetOptLogz(0); + +// Postscript options: + tdrStyle->SetPaperSize(20.,20.); + // tdrStyle->SetLineScalePS(Float_t scale = 3); + // tdrStyle->SetLineStyleString(Int_t i, const char* text); + // tdrStyle->SetHeaderPS(const char* header); + // tdrStyle->SetTitlePS(const char* pstitle); + + // tdrStyle->SetBarOffset(Float_t baroff = 0.5); + // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); + // tdrStyle->SetPaintTextFormat(const char* format = "g"); + // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); + // tdrStyle->SetTimeOffset(Double_t toffset); + // tdrStyle->SetHistMinimumZero(kTRUE); + + tdrStyle->cd(); + +} diff --git a/AnalysisCode/Trigger_data/test.h b/AnalysisCode/Trigger_data/test.h new file mode 100644 index 0000000..0e38391 --- /dev/null +++ b/AnalysisCode/Trigger_data/test.h @@ -0,0 +1,51 @@ +#include +#include + +std::vector pts; +std::vector csvs; + + +float Pt4(float pt, float eta, int Jet_puId, int element, int iteration, int length){ + float value = 0; + if(iteration==0){ + pts.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4){ + pts.push_back(pt); + } + if (iteration==length-1){ +// pts.sort(); + if (pts.size()>=4){ + value= pts[element]; + pts.clear(); + } + } + return value; +} + +float CSV(float csv, float eta, int Jet_puId, int element, int iteration, int length){ + float value = -10; + if(iteration==0){ + csvs.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4 && csvs.size()<=4){ + csvs.push_back(csv); + } + if (iteration==length-1){ +// pts.sort(); + if (csvs.size()>=4){ + std::sort( csvs.begin(), csvs.end(), std::greater() ); + // std::cout<<"here"<Scan("Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)):Jet_pt[3]") +// +// diff --git a/AnalysisCode/Trigger_data/trig.h b/AnalysisCode/Trigger_data/trig.h new file mode 100644 index 0000000..893018f --- /dev/null +++ b/AnalysisCode/Trigger_data/trig.h @@ -0,0 +1,226 @@ +#include "fittedFunctions_.h" +#include "fittedFunctions2_.h" +#include "fittedFunctions3_.h" +#include "CSVsort.C" + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV1, float CSV2, float CSV3, float CSV4) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + float calopt4 = DoubleJet_CaloPt4->Eval(pt4); + float L1 = DoubleJet_L1->Eval(sumpt); + float res = L1*calopt4*DoubleJet_CaloPt2->Eval(pt2)*CSVn(3, CSV1, CSV2, CSV3, CSV4)*DoubleJet_PFPt2->Eval(pt2)*DoubleJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + CSV3 = -log(1-CSV3); + float mu[6], sig[6]; + mu[0]=DoubleJet_L1->Eval(sumpt); + sig[0]=DoubleJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4->Eval(pt4); + sig[1]=DoubleJet_CaloPt4Up->Eval(pt4)-mu[1]; + mu[2]=DoubleJet_CSV3->Eval(CSV3); + sig[2]=DoubleJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[3]=DoubleJet_PFPt4->Eval(pt4); + sig[3]=DoubleJet_PFPt4Up->Eval(pt4)-mu[3]; + mu[4]=DoubleJet_PFPt2->Eval(pt2); + sig[4]=DoubleJet_PFPt4Up->Eval(pt2)-mu[4]; + mu[5]=DoubleJet_CaloPt2->Eval(pt2); + sig[5]=DoubleJet_CaloPt2Up->Eval(pt2)-mu[5]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 6; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 6; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +}; + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + CSV3 = -log(1-CSV3); + float mu[6], sig[6]; + mu[0]=DoubleJet_L1->Eval(sumpt); + sig[0]=DoubleJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4->Eval(pt4); + sig[1]=DoubleJet_CaloPt4Down->Eval(pt4)-mu[1]; + mu[2]=DoubleJet_CSV3->Eval(CSV3); + sig[2]=DoubleJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[3]=DoubleJet_PFPt4->Eval(pt4); + sig[3]=DoubleJet_PFPt4Down->Eval(pt4)-mu[3]; + mu[4]=DoubleJet_PFPt2->Eval(pt2); + sig[4]=DoubleJet_PFPt4Down->Eval(pt2)-mu[4]; + mu[5]=DoubleJet_CaloPt2->Eval(pt2); + sig[5]=DoubleJet_CaloPt2Down->Eval(pt2)-mu[5]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 6; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 6; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + + if( res < 0 ) return 0; + return res; +} + +double QuaJet_L1_(float sumpt){ + return QuaJet_L1->Eval(sumpt); +} +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV1, float CSV2, float CSV3, float CSV4) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + float calopt4 = QuaJet_CaloPt4->Eval(pt4); + float L1 =QuaJet_L1->Eval(sumpt); +// L1 =1; +// calopt4 = 1; + + float res = L1*calopt4*CSVn(3, CSV1, CSV2, CSV3, CSV4)*QuaJet_PFPt4->Eval(pt4); +// float res = QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + CSV3 = -log(1-CSV3); + float mu[4], sig[4]; + mu[0]=QuaJet_L1->Eval(sumpt); + sig[0]=QuaJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4->Eval(pt4); + sig[1]=QuaJet_CaloPt4Up->Eval(pt4)-mu[1]; + mu[2]=QuaJet_CSV3->Eval(CSV3); + sig[2]=QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[3]=QuaJet_PFPt4->Eval(pt4); + sig[3]=QuaJet_PFPt4Up->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + CSV3 = -log(1-CSV3); + float mu[4], sig[4]; + mu[0]=QuaJet_L1->Eval(sumpt); + sig[0]=QuaJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4->Eval(pt4); + sig[1]=QuaJet_CaloPt4Down->Eval(pt4)-mu[1]; + mu[2]=QuaJet_CSV3->Eval(CSV3); + sig[2]=QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[3]=QuaJet_PFPt4->Eval(pt4); + sig[3]=QuaJet_PFPt4Down->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + float res = QaD_DoubleJet_L1->Eval(sumpt)*QaD_DoubleJet_PFPt2->Eval(pt2)*QaD_DoubleJet_CaloPt2->Eval(pt2); + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + CSV3 = -log(1-CSV3); + float mu[4], sig[4]; + // mu[0]=QaD_QuaJet_L1->Eval(sumpt); + // sig[0]=QaD_QuaJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=QaD_DoubleJet_CaloPt2->Eval(pt2); + sig[1]=QaD_DoubleJet_CaloPt2Up->Eval(pt2)-mu[1]; + // mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + // sig[2]=QaD_QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[2]=QaD_DoubleJet_PFPt2->Eval(pt2); + sig[2]=QaD_DoubleJet_PFPt2Up->Eval(pt2)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 1; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 1; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + CSV3 = -log(1-CSV3); + float mu[4], sig[4]; + // mu[0]=QaD_QuaJet_L1->Eval(sumpt); + // sig[0]=QaD_QuaJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=QaD_DoubleJet_CaloPt2->Eval(pt2); + sig[1]=QaD_DoubleJet_CaloPt2Down->Eval(pt2)-mu[1]; + // mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + // sig[2]=QaD_QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[2]=QaD_DoubleJet_PFPt2->Eval(pt2); + sig[2]=QaD_DoubleJet_PFPt2Down->Eval(pt2)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 1; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 1; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + + diff --git a/AnalysisCode/Trigger_ttbar/DoTurnOnAJ.py b/AnalysisCode/Trigger_ttbar/DoTurnOnAJ.py new file mode 100644 index 0000000..87fc925 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/DoTurnOnAJ.py @@ -0,0 +1,551 @@ +import ROOT +import copy +from math import * +import array + +runName = "" +fitName = "_1B" + +ffName = "fittedFunctions3_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev=100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger),"",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection),"",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="TTbarSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +#preselection = "HLT2_BIT_HLT_IsoMu24_v && Vtype==2 && CSVsorted[2]>0.6" +preselection = "HLT2_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185 && diHiggs"#&& LPt_mass>400 && && CSVsorted[2]>0.6 LPt_mass < 1200"#85 " # && Jet_puId>=4" #"HLT2_BIT_HLT_IsoMu18_v" +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 25#50 +functionMin = 160#100 +functionMax = 260#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_L1l" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 50#50 +functionMin = 120#200 +functionMax = 270#350 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_L1h" +title = "p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30#60 +functionMin = 15#25 +functionMax = 145#85 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + +##################### CaloPt4 high ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 40 +functionMax = 95 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 60 +functionMax = 120 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 24 +functionMin = 0.4 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 60 +functionMin = 20#25 +functionMax = 80#125 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 80 +functionMax = 180 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + +################### L1 low ################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 190#100 +functionMax = 290#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_L1l" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 20#50 +functionMin = 210#120 +functionMax = 360#270 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 25#140#70 +functionMin = 10#30#35 +functionMax = 60#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt4 high ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 30#140#70 +functionMin = 40#30#35 +functionMax = 100#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 5#80#24 +functionMin = 0.8#0.2#0.4 #CSVL = 0.460 +functionMax = 1.0#1.0#1.0 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "CSVsorted[2]" +#var = "Jet_btagCSV[2]" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1) + +Nbins = 40#100#50 +functionMin = 35#30#40 +functionMax = 75#130#140 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QaD_QuaJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger_ttbar/DoTurnOnDJ.py b/AnalysisCode/Trigger_ttbar/DoTurnOnDJ.py new file mode 100644 index 0000000..0e43820 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/DoTurnOnDJ.py @@ -0,0 +1,458 @@ +import ROOT +import copy +from math import * +import array + +runName = "" +fitName = "_1B" + +ffName = "fittedFunctions2_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev=100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger),"",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection),"",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+".root") + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="TTbarSkimmed"+runName+".root" +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +#preselection = "HLT2_BIT_HLT_IsoMu24_v && Vtype==2 && CSVsorted[2]>0.6" +preselection = "HLT2_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185&& diHiggs"# && LPt_mass>400 && && CSVsorted[2]>0.6 LPt_mass < 1200"#85 " # && Jet_puId>=4" #"HLT2_BIT_HLT_IsoMu18_v" + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 50#50 +functionMin = 60#100 +functionMax = 260#200 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1l" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high######################### +parametersTurnOn_funct = (200,100,0.01,1,1E-3,1E-3) + +Nbins = 20#50 +functionMin = 220#200 +functionMax = 470#350 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet30>=1" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30#60 +functionMin = 15#25 +functionMax = 95#85 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + +##################### CaloPt4 high ###et###################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 20 +functionMin = 40 +functionMax = 50 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt2 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) + +Nbins = 30 +functionMin = 60 +functionMax = 150 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoubleCentralJet90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CaloPt2" +title = "p^{T}_{2}" +doPlots() + + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1,1E-3,1E-3) +Nbins = 10 +functionMin = 0.8 #CSVL = 0.460 +functionMax = 1 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +#trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 50 +functionMin = 20#25 +functionMax = 120#125 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID30>=4" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +###################### PFPt2 ######################## +parametersTurnOn_funct = (0,20,0.01,1,1E-3,1E-3) + +Nbins = 8 +functionMin = 70 +functionMax = 120 +var = "Jet_pt[1]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,1,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltDoublePFCentralJetLooseID90>=2" +binning = (Nbins,functionMin,functionMax) +ped = "DoubleJet_PFPt2" +title = "p^{T}_{2}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger_ttbar/DoTurnOnQJ.py b/AnalysisCode/Trigger_ttbar/DoTurnOnQJ.py new file mode 100644 index 0000000..acef889 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/DoTurnOnQJ.py @@ -0,0 +1,432 @@ +import ROOT +import copy +from math import * +import array + +runName = "" +fitName = "_1B" + +ffName = "fittedFunctions_" + runName + ".h" +f = open( ffName , 'w') + +ROOT.gROOT.LoadMacro("tdrstyleTrigger.C") +ROOT.gROOT.LoadMacro("test.h") +ROOT.setTDRStyle() + +minTurnOn_funct = 0 +maxTurnOn_funct = 1.05 + +minRatio = 0.8 +maxRatio = 1.2 + +functionMin = 80 +functionMax = 500 + +ped = "function" + +title = "aaa" + +var ="Jet_pt[3]" +trigger ="ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning =(40,0,120) +preselection ="1" + +maxev = 100000000 + +def getTitle(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("unten") + title = pad.GetPrimitive("Ratio").GetXaxis().GetTitle() + return title + +def DivideTGraph(num,den): + Ns_den = den.GetN() + Xs_den = den.GetX() + Ys_den = den.GetY() + EXLs_den = den.GetEXlow() + EXHs_den = den.GetEXhigh() + EYLs_den = den.GetEYlow() + EYHs_den = den.GetEYhigh() + + print "den.GetN()",den.GetN() + print "num.GetN()",num.GetN() + + Ys_num = num.GetY() + EYLs_num = num.GetEYlow() + EYHs_num = num.GetEYhigh() + + print "DivideTGraph: new" + + bins = [ i for i in range( Ns_den) if Ys_den[i]>0] + + print "Xs_den",Xs_den + Xs_new = [ Xs_den[i] for i in bins] + print "Xs_new",Xs_new + Ys_new = [ Ys_num[i]/(Ys_den[i]) for i in bins] + EXLs_new = [ EXLs_den[i] for i in bins] + EXHs_new = [ EXHs_den[i] for i in bins] + [ EYLs_num[i] for i in bins] + [ ((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2) for i in bins] + EYLs_new = [ Ys_new[i]*sqrt((EYLs_num[i]/(Ys_num[i]+1E-3))**2+(EYHs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + EYHs_new = [ Ys_new[i]*sqrt((EYHs_num[i]/(Ys_num[i]+1E-3))**2+(EYLs_den[i]/(Ys_den[i]+1E-3))**2) for i in bins] + + print "DivideTGraph: len" + + n = len(Xs_new) + + print "DivideTGraph: array" + + Xs_new = array.array('f',Xs_new) + Ys_new = array.array('f',Ys_new) + EXLs_new = array.array('f',EXLs_new) + EXHs_new = array.array('f',EXHs_new) + EYLs_new = array.array('f',EYLs_new) + EYHs_new = array.array('f',EYHs_new) + + print "DivideTGraph: ratio" + + ratio = ROOT.TGraphAsymmErrors(n, Xs_new, Ys_new, EXLs_new, EXHs_new, EYLs_new, EYHs_new) + print "DivideTGraph: done" + + return ratio + +def makeHistos(): + tree = ROOT.TChain("tree") + tree.Add(fileName) + print "fileName=",fileName + print "var=",var + print "trigger=",trigger + print "preselection=",preselection + print "binning=",str(binning) + tree.Draw(var+">>num"+str(binning),str(preselection+"&&"+trigger), "",maxev) + print "Draw:\t",var+">>num"+str(binning),str(preselection+"&&"+trigger ) + num = ROOT.gDirectory.Get("num") + num = copy.copy(num) + tree.Draw(var+">>den"+str(binning),str(preselection), "",maxev) + print "Draw:\t",var+">>den"+str(binning),str(preselection) + den = ROOT.gDirectory.Get("den") + den = copy.copy(den) + print "num,den = ",num.Integral(),den.Integral() + return num,den + + + +def getMCAndData(fileName): + file_ = ROOT.TFile.Open(fileName) + file_.cd() + name = file_.GetListOfKeys().First().GetName() + canvas = file_.Get(name) + pad = canvas.GetPrimitive("oben") + mystack = pad.GetPrimitive(name) + MC_tmp = mystack.GetStack().Last() + data_tmp = pad.GetPrimitive("noData") + MC = MC_tmp.Clone("MC") + data = data_tmp.Clone("data") + MC.SetTitle("MC") + data.SetTitle("data") + MC.GetXaxis().SetTitle(title) + data.GetXaxis().SetTitle(title) + MC.SetMarkerStyle(20) + data.SetMarkerStyle(20) + MC.SetMarkerColor(ROOT.kBlack) + data.SetMarkerColor(ROOT.kBlack) + MC = copy.copy(MC) + data = copy.copy(data) + file_.Close() + return MC,data + +def doRatio(num, den, option=""): +# mratio = den.Clone("mratio") +# mratio.SetTitle("Ratio") +# mratio.Reset() +# if option is "b": +# mratio.Divide(num,den,1,1,"b") +# else: +# mratio.Divide(num,den) +# return mratio + mratio = ROOT.TGraphAsymmErrors() + mratio.SetMarkerColor(ROOT.kBlack) + mratio.SetLineColor(ROOT.kBlack) + mratio.SetName("ratio") + mratio.GetXaxis().SetTitle(title) +# mratio = histo.Clone(triggerName+"_eff") +# mratio.Divide(histo,inclusive,1.,1.,"B") +# mratio.Divide(histo,inclusive,1.,1.,"cl=0.683 b(1,1) mode") +# print num.GetNbinsX(),num.GetXaxis().GetXmin(),num.GetXaxis().GetXmax() +# print den.GetNbinsX(),den.GetXaxis().GetXmin(),den.GetXaxis().GetXmax() + for i in range(num.GetNbinsX()):print num.GetBinLowEdge(i), + print "" + for i in range(den.GetNbinsX()): print den.GetBinLowEdge(i), + print "" + + for i in range(den.GetNbinsX()+2): + if den.GetBinContent(i)<=0: + den.SetBinError(i,1.) + den.SetBinContent(i,0) + num.SetBinContent(i,0) +# for i in range(num.GetNbinsX()+2): +# if num.GetBinContent(i)<=0: +# num.SetBinError(i,10.) +# num.SetBinContent(i,1.E-7) + for i in range(den.GetNbinsX()+2): + if num.GetBinContent(i)>den.GetBinContent(i): + print "WARNING!" + print num.GetBinContent(i),den.GetBinContent(i) + num.SetBinContent(i,den.GetBinContent(i)) +# num.SetBinContent(i,num.GetBinContent(i)) +# den.SetBinContent(i,den.GetBinContent(i)) + + mratio.Divide(num,den,"cl=0.683 b(1,1) mode") + print "End ratio. bins:",mratio.GetN()," num:",num.GetNbinsX()," den:",den.GetNbinsX() + return mratio + +def confidenceInterval(graph, function): + fit = function.Clone("fit") + fitUp = function.Clone("fitUp") + fitUp.SetLineColor(ROOT.kRed) + fitUp.SetLineStyle(2) + fitDown = function.Clone("fitDown") + fitDown.SetLineStyle(2) + print "Fit1" + fit.FixParameter(4,0) + fit.FixParameter(5,0) + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) +# fit.ReleaseParameter(4) +# fit.ReleaseParameter(5) + print "Fit2" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) #was WW + print "Fit3" + graph.Fit(fit,"","",fit.GetXmin(),fit.GetXmax()) + parameters = [0]*function.GetNpar() + for i in range(len(parameters)): + parameters[i] = fit.GetParameter(i) + + parametersUp = parameters[:] + parametersDown = parameters[:] + + looseRange=10. + tightRange=10. + + print "Up/down fit" + + ## FixParameters + for i in range(len(parameters)): +# fit.ReleaseParameter(i) +# function.SetParLimits(4,0,10) + +# if i in [0]: # x0 can go down +# pass +# elif i in [3]: # global efficiency can go up +# pass + if i in [0,2]: # x0 can go down + pass + else: # fix the other parameters + fit.FixParameter( i, parameters[i] ) + fitResult = graph.Fit(fit,"SEV0","",fit.GetXmin(),fit.GetXmax()) + for i in range(len(parameters)): + + parameters[i] = fit.GetParameter(i) + if i in [0]: # x0 can go down + parametersUp[i] = fit.GetParameter(i) + fitResult.LowerError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.UpperError(i) + elif i in [1]: # check-me! + parametersUp[i] = fit.GetParameter(i) + fitResult.UpperError(i) + parametersDown[i] = fit.GetParameter(i) + fitResult.LowerError(i) + elif i in [2]: # check-me! + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + elif i in [3]: # global efficiency can go up + parametersUp[i] = fit.GetParameter(i) + min(fitResult.LowerError(i),-0.02) + parametersDown[i] = fit.GetParameter(i) + max(fitResult.UpperError(i),+0.02) + else: # fix the other parameters + parametersUp[i] = fit.GetParameter(i) + parametersDown[i] = fit.GetParameter(i) + + if (fit.GetParameter(3)<0): ##if [3]<0, I have to exchange [0],[1] min/max + for i in [0,1]: + print "CHANGE" + print parametersUp[i],parametersDown[i] + tmp = parametersUp[i] + parametersUp[i] = parametersDown[i] + parametersDown[i] = tmp + print parametersUp[i],parametersDown[i] + + for i in range(len(parameters)): + print "i=,",i,"\t",parameters[i],"\t",parametersUp[i],"\t",parametersDown[i] + fit.SetParameter(i,parameters[i]) + fitUp.SetParameter(i,parametersUp[i]) + fitDown.SetParameter(i,parametersDown[i]) + + return fit,fitUp,fitDown + + + +def doPlots(): + + num,den = makeHistos() + turnOn = doRatio(num,den,"b") + + #function = ROOT.TF1("turnonPt","1-(0.5-0.5*erf( (x-[0])/[1]))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*[3]-[2] ",functionMin,functionMax) + function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]**2)/[1]))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/([1])*(x-[0]>[5]) + ((x-[0])/([1]+[4]) + [5]*(1/[1]+[4]-1/[1]))*(x-[0]<=[5]) ))*[3]-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])*(1+[4]*x**2)/([1]+[5]*x**2)))*([3])-[2] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","(0.5+0.5*TMath::Erf( (x-[0])*(x-[0]>[5])/[1] + (x-[0])*(x-[0]<[5])/[2] + [5]*(1/[1]-1/[2])*(x-[0]<[5]) ))*[4]+[3] ",functionMin,functionMax) +# function = ROOT.TF1("turnonPt","1-(0.5-0.5*TMath::Erf( (x-[0])/[1]))*([3])-(0.5-0.5*TMath::Erf( (x-[4])/[5]))*([6])-[2] ",functionMin,functionMax) + +# function = ROOT.TF1("turnonPt","TMath::Erf( (x-[0])/[1]*(([4]+[5]*x)) )*[2]-[3]",functionMin,functionMax) + + print "Using:",parametersTurnOn_funct + function.SetParameters(*parametersTurnOn_funct) +# function.SetParLimits(1,0,100) + function.SetParLimits(2,0,1) + function.SetParLimits(3,-1,2) +# function.SetParLimits(4,0,1) +# function.SetParLimits(5,0,1) + function.SetLineWidth(2) + + + TurnOn_funct = function.Clone("TurnOn_funct") + + c1 = ROOT.TCanvas("c1","",1280,720) + + TurnOn_funct,TurnOn_functUp,TurnOn_functDown = confidenceInterval(turnOn,TurnOn_funct) + + turnOn.SetMaximum(maxTurnOn_funct) + turnOn.SetMinimum(minTurnOn_funct) + turnOn.GetXaxis().SetTitle(title) + turnOn.GetYaxis().SetTitle("Efficiency") + + turnOn.Draw("AP") + TurnOn_funct.Draw("same") + TurnOn_functUp.Draw("same") + TurnOn_functDown.Draw("same") + + #c1.SaveAs("turnOn_"+ped+"_"+runName+".C") + c1.SaveAs("turnOn_"+ped+"_"+runName+fitName+".pdf") + #c1.SaveAs("turnOn_"+ped+"_"+runName+".root") + + f.write(('TF1* %s = new TF1("%s","'%(ped,ped) + str(TurnOn_funct.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sUp = new TF1("%sUp","'%(ped,ped) + str(TurnOn_functUp.GetExpFormula("P"))+'");\n')) + f.write(('TF1* %sDown = new TF1("%sDown","'%(ped,ped) + str(TurnOn_functDown.GetExpFormula("P"))+'");\n')) + +ROOT.gROOT.SetBatch() +ROOT.gStyle.SetOptStat(0) +ROOT.gStyle.SetOptFit(0) + + +minRatio = 0.5 +maxRatio = 1.5 + +fileName ="TTbarSkimmed"+runName+".root" +#fileName ="Signal600"+runName+".root" + +#fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root" +#fileName = "ZvvHighPt_V20_SingleMuon.root" +#fileName = "/scratch/sdonato/VHbbRun2/V20/CMSSW_7_1_5/src/Xbb/env_turnOnMET90/ZvvHighPt_V20_TT_TuneCUETP8M1_13TeV-powheg-pythia8.root" +#fileData = "/gpfs/ddn/srm/cms/store/user/arizzi/VHBBHeppyV20/SingleMuon/VHBB_HEPPY_V20_SingleMuon__Run2015D-16Dec2015-v1/160210_081323/0000/tree*.root" + +preselection = "HLT2_BIT_HLT_IsoMu24_v&& Vtype==2 && CMVAVsorted[3]>0.185 && diHiggs"# && LPt_mass > 400"# && && CSVsorted[2]>0.6 LPt_mass < 1200"#85 " # && Jet_puId>=4" #"HLT2_BIT_HLT_IsoMu18_v" +#preselection = "CMVAVsorted[3]>0.185 && diHiggs"# && && CSVsorted[2]>0.6 LPt_mass < 1200"#85 " # && Jet_puId>=4" #"HLT2_BIT_HLT_IsoMu18_v" + + +parametersTurnOn_funct = () +#################### L1 low ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 10#50 +functionMin = 100#50#100 +functionMax = 300#200 +#var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1l" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() + +#################### L1 high ######################### +parametersTurnOn_funct = (200,100,0.01,1) + +Nbins = 35#50 +functionMin = 150#160#120 +functionMax = 500#260#270 +var = "Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +#var = "Jet_pt[1]+Jet_pt[2]+Jet_pt[3]" +trigger = "ntrgObjects_hltQuadCentralJet45>=1" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_L1h" +title = "p^{T}_{1}+p^{T}_{2}+p^{T}_{3}+p^{T}_{4}" +doPlots() +##################### CaloPt4 low ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 20#140#70 +functionMin = 20#30#35 +functionMax = 80#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4l" +title = "p^{T}_{4}" +doPlots() + + +##################### CaloPt4 high ######################### +parametersTurnOn_funct = (100,20,0.01,1) + +Nbins = 40#140#70 +functionMin = 20#30#35 +functionMax = 100#100#105 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +#preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadCentralJet45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CaloPt4h" +title = "p^{T}_{4}" +doPlots() + + +##################### CSV3 ######################### +parametersTurnOn_funct = (100,20,0.01,1) +Nbins = 10#28#80#24 +functionMin = 0.8#0.2#0.4 #CSVL = 0.460 +functionMax = 1.0#1.0#1.0 +#var = "-log(1-Jet_btagCSV[aJCidx[0]])" +#var = "Jet_btagCSV[aJCidx[0]]" +var = "MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)&&Jet_btagCSV!=MaxIf$(Jet_btagCSV,Jet_btagCSV!=Max$(Jet_btagCSV)))" +#var = "CSVsorted[2]" +#var = "Jet_btagCSV[2]" +#var = "Sum$(CSV(Jet_btagCSV,Jet_eta,Jet_puId,2,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +# old ! trigger = "ntrgObjects_hltTripleCSV0p67>=3" +trigger = "ntrgObjects_hltBTagCaloCSVp087Triple>=3" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_CSV3" +title = "CSV_{3}" +doPlots() + +###################### PFPt4 ######################## +parametersTurnOn_funct = (0,20,0.01,1) + +Nbins = 15#100#50 +functionMin = 30#30#40 +functionMax = 60#130#140 +var = "Jet_pt[3]" +#var = "Sum$(Pt4(Jet_pt,Jet_eta,Jet_puId,3,Iteration$,Length$))" +preselection = preselection + "&&"+ trigger +trigger = "ntrgObjects_hltQuadPFCentralJetLooseID45>=4" +binning = (Nbins,functionMin,functionMax) +ped = "QuaJet_PFPt4" +title = "p^{T}_{4}" +doPlots() + +############################################## +##f.Close() diff --git a/AnalysisCode/Trigger_ttbar/README b/AnalysisCode/Trigger_ttbar/README new file mode 100644 index 0000000..c7ce678 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/README @@ -0,0 +1,16 @@ +1) Produce skimmed ttree using TE_presel.C + +2) Produce turn-on using DoTurnOnXJ, where + X=Q for Quad Jet Trigger + X=D for Double Jet Trigger + X=A for Quad&&Double Trigger + + This produces fitterFunction*.h, the efficiency is then produced using trig.h + +3) Produce closure plots using clos_XJ.cc, where + X=Q for Quad Jet Trigger + X=D for Double Jet Trigger + X=C for Quad&&Double Trigger + X=A for Quad||Double Trigger + +4) Compare in signal using ../Hbb_Trigger.cc, change path to trig.h in the header to data/ttbar accordingly diff --git a/AnalysisCode/Trigger_ttbar/TE_presel.cc b/AnalysisCode/Trigger_ttbar/TE_presel.cc new file mode 100644 index 0000000..29c1d05 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/TE_presel.cc @@ -0,0 +1,216 @@ +TString runName = ""; + + +TLorentzVector fillTLorentzVector(double pT, double eta, double phi, double M) +{ + TLorentzVector jet_p4; + jet_p4.SetPtEtaPhiM(pT, eta, phi, M); + return jet_p4; +} + + +void TE_presel() +{ + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8.root"; //root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/SingleMuon" + runName + ".root"; +// TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8.root"; +// TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8_"+runName+".root"; + TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/GluGluToBulkGravitonToHHTo4B_M-700_narrow_13TeV-madgraph.root"; + + // TFile *_file0 = TFile::Open(fileName); + TChain *tree=new TChain("tree"); + tree->Add(fileName); + // TChain* tree = (TChain*) _file0->Get("tree"); + + int HLT2_BIT_HLT_IsoMu24_v, Vtype; + int nJet, Jet_puId[100], HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, ntrgObjects_hltQuadCentralJet45, ntrgObjects_hltBTagCaloCSVp087Triple, ntrgObjects_hltQuadPFCentralJetLooseID45,ntrgObjects_hltQuadCentralJet30, ntrgObjects_hltDoubleCentralJet90, ntrgObjects_hltQuadPFCentralJetLooseID30, ntrgObjects_hltDoublePFCentralJetLooseID90, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v; + Float_t jet_pt[100], Jet_eta[100], Jet_btagCSV[100], vLeptons_pt[100], Jet_btagCMVAV2[100], Jet_phi[100], Jet_mass[100]; + tree->SetBranchStatus("*",0); + tree->SetBranchAddress("Jet_pt", &(jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_phi", &(Jet_phi)); tree->SetBranchStatus("Jet_phi", 1); + tree->SetBranchAddress("Jet_mass", &(Jet_mass)); tree->SetBranchStatus("Jet_mass", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_IsoMu24_v", &(HLT2_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT2_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet30", &(ntrgObjects_hltQuadCentralJet30)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoubleCentralJet90", &(ntrgObjects_hltDoubleCentralJet90)); tree->SetBranchStatus("ntrgObjects_hltDoubleCentralJet90", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID30", &(ntrgObjects_hltQuadPFCentralJetLooseID30)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID30", 1); + tree->SetBranchAddress("ntrgObjects_hltDoublePFCentralJetLooseID90", &(ntrgObjects_hltDoublePFCentralJetLooseID90)); tree->SetBranchStatus("ntrgObjects_hltDoublePFCentralJetLooseID90", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadCentralJet45", &(ntrgObjects_hltQuadCentralJet45)); tree->SetBranchStatus("ntrgObjects_hltQuadCentralJet45", 1); + tree->SetBranchAddress("ntrgObjects_hltBTagCaloCSVp087Triple", &(ntrgObjects_hltBTagCaloCSVp087Triple)); tree->SetBranchStatus("ntrgObjects_hltBTagCaloCSVp087Triple", 1); + tree->SetBranchAddress("ntrgObjects_hltQuadPFCentralJetLooseID45", &(ntrgObjects_hltQuadPFCentralJetLooseID45)); tree->SetBranchStatus("ntrgObjects_hltQuadPFCentralJetLooseID45", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("vLeptons_pt", &(vLeptons_pt)); tree->SetBranchStatus("vLeptons_pt", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + Float_t jet_pt_[100], Jet_eta_[100], Jet_btagCSV_[100], Jet_btagCMVAV2_[100], LPt_mass; + int Jet_puId_[100], diHiggs, diHiggsTight; + //TFile *outfile=new TFile("TTbarSkimmed"+runName+".root", "recreate"); + TFile *outfile=new TFile("Signal700"+runName+".root", "recreate"); + + TTree *outtree=tree->CloneTree(0); + Float_t CSVsorted[100], CMVAVsorted[100]; + // outtree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + outtree->Branch("CMVAVsorted",&CMVAVsorted,"CMVAVsorted[nJet]/F"); + outtree->Branch("CSVsorted",&CSVsorted,"CSVsorted[nJet]/F"); + outtree->Branch("LPt_mass",&LPt_mass,"LPt_mass/F"); + outtree->Branch("diHiggs",&diHiggs,"diHiggs/I"); + outtree->Branch("diHiggsTight",&diHiggsTight,"diHiggsTight/I"); + + outtree->SetBranchAddress("Jet_pt", &(jet_pt_)); tree->SetBranchStatus("Jet_pt", 1); + outtree->SetBranchAddress("Jet_eta", &(Jet_eta_)); tree->SetBranchStatus("Jet_eta", 1); + outtree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV_)); tree->SetBranchStatus("Jet_btagCSV", 1); + + outtree->SetBranchAddress("Jet_puId", &(Jet_puId_)); tree->SetBranchStatus("Jet_puId", 1); + outtree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2_)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + + /* outtree->Branch("Jet_pt",&Jet_pt,"Jet_pt/F"); + outtree->Branch("Jet_eta",&Jet_eta,"Jet_eta/F"); + outtree->Branch("Jet_btagCSV",&Jet_btagCSV,"Jet_btagCSV/F"); + outtree->Branch("HLT2_BIT_HLT_IsoMu24_v",&HLT2_BIT_HLT_IsoMu24_v,"HLT2_BIT_HLT_IsoMu24_v/i"); + outtree->Branch("Jet_puId",&Jet_puId,"Jet_puId/i"); + outtree->Branch("ntrgObjects_hltQuadCentralJet30",&ntrgObjects_hltQuadCentralJet30,"ntrgObjects_hltQuadCentralJet30/i"); + outtree->Branch("ntrgObjects_hltDoubleCentralJet90",&ntrgObjects_hltDoubleCentralJet90,"ntrgObjects_hltDoubleCentralJet90/i"); + outtree->Branch("ntrgObjects_hltQuadPFCentralJetLooseID30",&ntrgObjects_hltQuadPFCentralJetLooseID30,"ntrgObjects_hltQuadPFCentralJetLooseID30/i"); + outtree->Branch("ntrgObjects_hltDoublePFCentralJetLooseID90",&ntrgObjects_hltDoublePFCentralJetLooseID90,"ntrgObjects_hltDoublePFCentralJetLooseID90/i"); + outtree->Branch("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v",&HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v,"HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v/i"); + outtree->Branch("nJet",&nJet,"nJet/i"); + outtree->Branch("ntrgObjects_hltQuadCentralJet45",&ntrgObjects_hltQuadCentralJet45,"ntrgObjects_hltQuadCentralJet45/i"); + outtree->Branch("ntrgObjects_hltBTagCaloCSVp087Triple",&ntrgObjects_hltBTagCaloCSVp087Triple,"ntrgObjects_hltBTagCaloCSVp087Triple/i"); + outtree->Branch("ntrgObjects_hltQuadPFCentralJetLooseID45",&ntrgObjects_hltQuadPFCentralJetLooseID45,"ntrgObjects_hltQuadPFCentralJetLooseID45/i");*/ + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (Int_t i=0; i= shout ){ std::cout << "Event " << i << "/" << nEvents << std::endl; shout=shout+nEvents/10; } + + tree->GetEvent(i); + // if( ! ( HLT2_BIT_HLT_IsoMu24_v ) ) continue; + Int_t counter = 0; + Int_t GoodJets[100]; + for( Int_t j=0; j=4 ){ GoodJets[counter]=j; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + //CSVsorted[0] = Jet_btagCSV[GoodJets[0]]; CSVsorted[1] = Jet_btagCSV[GoodJets[1]]; CSVsorted[2] = Jet_btagCSV[GoodJets[2]]; CSVsorted[3] = Jet_btagCSV[GoodJets[3]]; + //float CSVsorted[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + //std::cout << "here" << std::endl; + + for( Int_t j=0; j() ); + std::sort( CMVAVsorted, CMVAVsorted+counter, std::greater() ); + nJet=counter; + + + + + bool foundHH=false; + diHiggs = 0; diHiggsTight = 0; + double m_diff_old=70.; + double chi2_old=200.; + int H1jet1_i=-1, H1jet2_i=-1; + int H2jet1_i=-1, H2jet2_i=-1; + double jet_pT_cut1=45.; + + double mean_H1_mass_=120;//125; + double sigma_H1_mass_=25; + double mean_H2_mass_=120;//125; + double sigma_H2_mass_=25; + //std::cout<<"evt = "<Write("tree"); + outfile->Close(); +} + diff --git a/AnalysisCode/Trigger_ttbar/clos_AJ.cc b/AnalysisCode/Trigger_ttbar/clos_AJ.cc new file mode 100644 index 0000000..389db74 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/clos_AJ.cc @@ -0,0 +1,222 @@ +//#include "fittedFunctions_.h" +//#include "fittedFunctions2_.h" +//#include "fittedFunctions3_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" +TString runName = ""; +TString fitName = "_1B_C"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + +void clos_AJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/GluGluToBulkGravitonToHHTo4B_M-300_narrow_13TeV-madgraph.root"; + // + TString fileName = "TTbarSkimmed" + runName + ".root"; + + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_IsoMu24_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, CSVsorted[100], Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_IsoMu24_v", &(HLT2_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT2_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT2_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs) ) continue; + //if ( !(vType==-1) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3] < 0.8 ) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + } + + TString title = "QuadJet||DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + + TString outName = "check_full_AJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ) +{ + float weight = 0, weightUp = 0, weightDown = 0; +/* if( pass_trigger1==1 ){ weight += TurnOnDouble( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ); } + if( pass_trigger2==1 ){ weight += TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); } + if( pass_trigger1==1 &&pass_trigger2==1 ){ weight-=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); } +//*/ + weight += TurnOnDouble( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 );//std::cout << weight; +float test = weight; + weight += TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp += TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown += TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ); + //std::cout << " " << weight-test; + // weight-=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + weight-=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp-=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown-=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ +//std::cout << " " << weight << std::endl; + + if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1. ); } + + histos[1]->Fill( variable, weight ); + histos[2]->Fill( variable, weightUp ); + histos[3]->Fill( variable, weightDown );//*/ + + /* if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1./weight ); } + histos[1]->Fill( variable, 1. ); + histos[2]->Fill( variable, weightUp/weight ); + histos[3]->Fill( variable, weightDown/weight ); //*/ +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_ttbar/clos_CJ.cc b/AnalysisCode/Trigger_ttbar/clos_CJ.cc new file mode 100644 index 0000000..abc231f --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/clos_CJ.cc @@ -0,0 +1,213 @@ +//#include "fittedFunctions_.h" +//#include "fittedFunctions2_.h" +//#include "fittedFunctions3_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" +TString runName = ""; +TString fitName = "_1B_C"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + +void clos_CJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"; + // + TString fileName = "TTbarSkimmed" + runName + ".root"; + + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_IsoMu24_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, CSVsorted[100], Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_IsoMu24_v", &(HLT2_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT2_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT2_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs) ) continue; + //if ( !(vType==-1) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + // float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3] < 0.8 ) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + } + + TString title = "QuadJet&&DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + + TString outName = "check_full_CJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger1, int pass_trigger2 ) +{ + float weight = 0, weightUp = 0, weightDown = 0; + + weight=TurnOnDouble( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuad( sumpt, pt2, pt4, CSV3 ); weightUp=TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ); weightDown=TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 )*QaD_TurnOnQuadDown( sumpt, pt2, pt4, CSV3 );//*/ + + if( pass_trigger1==1 && pass_trigger2==1 ){ histos[0]->Fill( variable, 1. ); } + + histos[1]->Fill( variable, weight ); + histos[2]->Fill( variable, weightUp ); + histos[3]->Fill( variable, weightDown );//*/ + + /* if( pass_trigger1==1 || pass_trigger2==1 ){ histos[0]->Fill( variable, 1./weight ); } + histos[1]->Fill( variable, 1. ); + histos[2]->Fill( variable, weightUp/weight ); + histos[3]->Fill( variable, weightDown/weight ); //*/ +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_ttbar/clos_DJ.cc b/AnalysisCode/Trigger_ttbar/clos_DJ.cc new file mode 100644 index 0000000..58b57e9 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/clos_DJ.cc @@ -0,0 +1,202 @@ +//#include "fittedFunctions2_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + + +TString runName = ""; +TString fitName = "_1B"; + + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_DJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + +// TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"; + TString fileName = "TTbarSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",40,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v, HLT2_BIT_HLT_IsoMu24_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_IsoMu24_v", &(HLT2_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT2_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + // std::cout << Vtype << std::endl; + if( ! ( HLT2_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + + float eta1 = Jet_eta[GoodJets[0]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //float CSV[4] = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[2] < 0.6 ) continue; + // if( CSV[3] < 0.8 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3,HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_DoubleJet90_Double30_TripleBTagCSV_p087_v ); + + } + + TString title = "DoubleJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43);leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_DJ_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnDouble( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnDoubleUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnDoubleDown( sumpt, pt2, pt4, CSV3 ) ); +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_ttbar/clos_QJ.cc b/AnalysisCode/Trigger_ttbar/clos_QJ.cc new file mode 100644 index 0000000..87a6403 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/clos_QJ.cc @@ -0,0 +1,204 @@ +//#include "fittedFunctions_.h" +//#include"fittedFunctions.h.GoodOld" +#include "../TDRStyle.h" +#include "test.h" +#include "trig.h" + +TString runName = ""; +TString fitName = "_1B"; + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ); +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ); +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ); +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize=0.05 ); + + +void clos_QJ() +{ + gStyle->SetOptStat(0); + // gROOT->SetBatch(); + setTDRStyle(); + + // TString fileName = "root://cmseos.fnal.gov//store/user/lpchbb/HeppyNtuples/V23/GluGluToBulkGravitonToHHTo4B_M-900_narrow_13TeV-madgraph.root"; + // + TString fileName = "TTbarSkimmed" + runName + ".root"; + + TFile *_file0 = TFile::Open(fileName); + TTree* tree = (TTree*) _file0->Get("tree"); + TH1*hPt4[4]; SetHistos(hPt4,"hPt4",25,0,200); + TH1*hCSV[4]; SetHistos(hCSV,"hCSV",25,0,1); + TH1*hEta[4]; SetHistos(hEta,"hEta",20,-4,4); + TH1*hPt2[4]; SetHistos(hPt2,"hPt2",25,0,200); + TH1*hPt3[4]; SetHistos(hPt3,"hPt3",25,0,200); + TH1*hPt5[4]; SetHistos(hPt5,"hPt5",25,0,200); + + int nJet, Jet_puId[100], HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v, HLT2_BIT_HLT_IsoMu24_v, diHiggs; + float Jet_pt[100], Jet_eta[100], Jet_btagCSV[100], CSVsorted[100], Vtype, Jet_btagCMVAV2[100]; + tree->SetBranchAddress("Jet_pt", &(Jet_pt)); tree->SetBranchStatus("Jet_pt", 1); + tree->SetBranchAddress("Jet_eta", &(Jet_eta)); tree->SetBranchStatus("Jet_eta", 1); + tree->SetBranchAddress("Jet_btagCSV", &(Jet_btagCSV)); tree->SetBranchStatus("Jet_btagCSV", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_IsoMu24_v", &(HLT2_BIT_HLT_IsoMu24_v)); tree->SetBranchStatus("HLT2_BIT_HLT_IsoMu24_v", 1); + tree->SetBranchAddress("Jet_puId", &(Jet_puId)); tree->SetBranchStatus("Jet_puId", 1); + tree->SetBranchAddress("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", &(HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v)); tree->SetBranchStatus("HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v", 1); + tree->SetBranchAddress("nJet", &(nJet)); tree->SetBranchStatus("nJet", 1); + // tree->SetBranchAddress("CSVsorted", &(CSVsorted)); tree->SetBranchStatus("CSVsorted", 1); + tree->SetBranchAddress("Vtype", &(Vtype)); tree->SetBranchStatus("Vtype", 1); + tree->SetBranchAddress("Jet_btagCMVAV2", &(Jet_btagCMVAV2)); tree->SetBranchStatus("Jet_btagCMVAV2", 1); + tree->SetBranchAddress("diHiggs", &(diHiggs)); tree->SetBranchStatus("diHiggs", 1); + + Long64_t nEvents = tree->GetEntries(); + int shout = nEvents/10; + for (int i=0; iGetEvent(i); + if( i >= shout ){ std::cout << "Event " << i << "/" << nEvents << ", shout: " << shout << std::endl; shout=shout+nEvents/10; } + if( ! ( HLT2_BIT_HLT_IsoMu24_v && Vtype == 2 && diHiggs) ) continue; + int GoodJets[100]; int counter = 0; + float CSV[100], CMVAV[100]; + // std::sort( Jet_pt, Jet_pt + nJet, std::greater()); + for( int j=0; j=4)){ GoodJets[counter]=j; CSV[counter]=Jet_btagCSV[j]; CMVAV[counter]=Jet_btagCMVAV2[j]; counter++; } + if( counter < 4 ) continue; // at least 4 good jets + float pt4 = Jet_pt[GoodJets[3]]; + if( pt4 < 30 ) continue; + float pt2 = Jet_pt[GoodJets[1]]; float pt3 = Jet_pt[GoodJets[2]]; float pt5 = Jet_pt[GoodJets[4]]; + float eta1 = Jet_eta[GoodJets[0]]; + //float sumpt = Jet_pt[0]+Jet_pt[1]+Jet_pt[2]+Jet_pt[3]; + // float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + float sumpt = Jet_pt[GoodJets[0]]+Jet_pt[GoodJets[1]]+Jet_pt[GoodJets[2]]+Jet_pt[GoodJets[3]]; + //CSV = { Jet_btagCSV[GoodJets[0]], Jet_btagCSV[GoodJets[1]], Jet_btagCSV[GoodJets[2]], Jet_btagCSV[GoodJets[3]] }; + std::sort( CSV, CSV+counter, std::greater() ); + std::sort( CMVAV, CMVAV+counter, std::greater() ); + float CSV3 = CSV[2]; + // if( CSV[3]<0.8) continue; + // if( CSV[2] < 0.6 ) continue; + if( CMVAV[3] < 0.185 ) continue; + FillHistos( hPt4, pt4, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hCSV, CSV3, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hEta, eta1, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt2, pt2, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt3, pt3, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + FillHistos( hPt5, pt5, sumpt, pt2, pt4, CSV3, HLT2_BIT_HLT_QuadJet45_TripleBTagCSV_p087_v ); + + } + + TString title = "QuadJet Trigger Closure"; + PlotHistos( hPt4, "pt4", "p_{T}^{4}", title); + PlotHistos( hCSV, "CSV", "CSV^{3}", title); + PlotHistos( hEta, "eta1", "#eta^{1}", title); + PlotHistos( hPt2, "pt2", "p_{T}^{2}",title); + PlotHistos( hPt3, "pt3", "p_{T}^{3}",title); + PlotHistos( hPt5, "pt5", "p_{T}^{5}",title); + +} + +void PlotHistos( TH1* histos[4], TString name, TString XAxis, TString Title ) +{ + TCanvas c("c"+name,"c"+name,800,800); + c.cd(); + TPad mainPad("pad1", "pad1", 0, 0.3, 1, 1.0); + mainPad.SetBottomMargin(0.05); // Upper and lower plot are joined + mainPad.SetLeftMargin(0.13); + mainPad.Draw(); // Draw the upper pad: pad1 + TPad ratioPad("pad2", "pad2", 0, 0, 1, 0.3); + ratioPad.SetTopMargin(0.03); + ratioPad.SetBottomMargin(0.3); + ratioPad.SetLeftMargin(0.13); + ratioPad.Draw(); + + mainPad.cd(); + TLegend *leg = new TLegend(0.5,0.75,0.85,0.9); + histos[0]->SetTitle(Title); + histos[0]->Draw(""); histos[1]->Draw("histsame"); histos[2]->Draw("Lhistsame"); histos[3]->Draw("Lhistsame"); + histos[0]->SetLineColor( kRed ); + histos[0]->GetYaxis()->SetLabelSize(20); + histos[0]->GetYaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetTitleSize(22); + histos[0]->GetXaxis()->SetLabelSize(20); + histos[0]->GetXaxis()->SetLabelFont(43); + histos[0]->GetYaxis()->SetLabelFont(43); leg->AddEntry( histos[0], "Triggered","LE" ); + histos[1]->SetLineColor(kBlack);histos[0]->SetMaximum(2.0*histos[0]->GetMaximum()); leg->AddEntry( histos[1], "Weighted","LE" ); + histos[2]->SetLineStyle(2); histos[2]->SetLineColor(kBlack); + histos[3]->SetLineStyle(3); histos[3]->SetLineColor(kBlack); + leg->Draw(); + myText( 0.2, 0.8, 0.05,"#bf{CMS} #it{Internal}",0.04); + + TH1* hR = (TH1*) histos[1]->Clone("hR"+name); + hR->Divide(histos[0]); + TH1* hRU = (TH1*) histos[2]->Clone("hRU"+name); + hRU->Divide(histos[0]); + TH1* hRD = (TH1*) histos[3]->Clone("hRD"+name); + hRD->Divide(histos[0]); + + ratioPad.cd(); + hR->SetTitle(""); + hR->Draw(""); + hRU->Draw("Lhistsame"); + hRD->Draw("Lhistsame"); + + hR->GetXaxis()->SetLabelFont(43); + hR->GetXaxis()->SetLabelSize(20); + hR->GetYaxis()->SetLabelFont(43); + hR->GetYaxis()->SetLabelSize(20); + hR ->GetXaxis()->SetTitleSize(25); + hR->GetYaxis()->SetTitleSize(25); + + hR ->GetYaxis()->SetTitleOffset(1.5); + hR->GetYaxis()->SetTitleFont(43); + + hR->GetXaxis()->SetTitleOffset(3); + hR->GetXaxis()->SetTitleFont(43); + hR->GetYaxis()->SetNdivisions(50205); + hR->GetYaxis()->SetRangeUser(0.5,1.5); + hR->GetYaxis()->SetTitle("Ratio"); + hR->GetXaxis()->SetTitle(XAxis); + TLine* horiz_line = new TLine(0,1,200,1); + horiz_line->DrawLine(hR->GetBinCenter(1),1,hR->GetBinCenter(hR->GetNbinsX()),1); + + + // hR->GetXaxis()->SetTitleSize(18); + gPad->RedrawAxis(); + + TString outName = "check_full_" + runName; + c.SaveAs( outName+"_"+name+fitName+".pdf"); +} + +void FillHistos( TH1 * histos[4], float variable, float sumpt, float pt2, float pt4, float CSV3, int pass_trigger ) +{ + if( pass_trigger ){ histos[0]->Fill( variable, 1 ); } + histos[1]->Fill( variable, TurnOnQuad( sumpt, pt2, pt4, CSV3 ) ); + histos[2]->Fill( variable, TurnOnQuadUp( sumpt, pt2, pt4, CSV3 ) ); + histos[3]->Fill( variable, TurnOnQuadDown( sumpt, pt2, pt4, CSV3 ) ); + //std::cout << TurnOnQuad( sumpt, pt2, pt4, CSV3 ) << std::endl; +} + +void SetHistos( TH1* histos[4], TString name, int nbin, float binMin, float binMax ) +{ + histos[0] = new TH1F( name + "T", name + "T", nbin, binMin, binMax ); + histos[0]->Sumw2(); + histos[1] = new TH1F( name + "E", name + "E", nbin, binMin, binMax ); + histos[1]->Sumw2(); + histos[2] = new TH1F( name + "EU", name + "EU", nbin, binMin, binMax ); + histos[2]->Sumw2(); + histos[3] = new TH1F( name + "ED", name + "ED", nbin, binMin, binMax ); + histos[3]->Sumw2(); +} + +void myText( Double_t x, Double_t y, int lStyle,const char *text, float tsize, float lSize ) { + +// Double_t tsize=0.06; + + TLatex l; l.SetTextAlign(12); + l.SetTextSize(tsize); + l.SetNDC(); + if(std::string(text).size()) l.DrawLatex(x,y,text); + + Double_t y1=y-0.25*tsize; + Double_t y2=y+0.25*tsize; + Double_t x2=x-0.3*tsize; + Double_t x1=x2-lSize; + + bool debug=0; + if(debug) printf("x1= %f x2= %f y1= %f y2= %f \n",x1,x2,y1,y2); + +} diff --git a/AnalysisCode/Trigger_ttbar/tdrstyleTrigger.C b/AnalysisCode/Trigger_ttbar/tdrstyleTrigger.C new file mode 100644 index 0000000..55cc858 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/tdrstyleTrigger.C @@ -0,0 +1,157 @@ +#include "TStyle.h" + +// tdrGrid: Turns the grid lines on (true) or off (false) + +void tdrGrid(bool gridOn, TStyle *tdrStyle) { + tdrStyle->SetPadGridX(gridOn); + tdrStyle->SetPadGridY(gridOn); +} + +// fixOverlay: Redraws the axis + +// void fixOverlay() { +// gPad->RedrawAxis(); +// } + +void setTDRStyle() { + TStyle *tdrStyle = new TStyle("tdrStyle","Style for P-TDR"); + +// For the canvas: + tdrStyle->SetCanvasBorderMode(0); + tdrStyle->SetCanvasColor(kWhite); + tdrStyle->SetCanvasDefH(600); //Height of canvas + tdrStyle->SetCanvasDefW(600); //Width of canvas + tdrStyle->SetCanvasDefX(0); //POsition on screen + tdrStyle->SetCanvasDefY(0); + +// For the Pad: + tdrStyle->SetPadBorderMode(0); + // tdrStyle->SetPadBorderSize(Width_t size = 1); + tdrStyle->SetPadColor(kWhite); + tdrStyle->SetPadGridX(true); + tdrStyle->SetPadGridY(true); + tdrStyle->SetGridColor(0); + tdrStyle->SetGridStyle(3); + tdrStyle->SetGridWidth(1); + +// For the frame: + tdrStyle->SetFrameBorderMode(0); + tdrStyle->SetFrameBorderSize(1); + tdrStyle->SetFrameFillColor(0); + tdrStyle->SetFrameFillStyle(0); + tdrStyle->SetFrameLineColor(1); + tdrStyle->SetFrameLineStyle(1); + tdrStyle->SetFrameLineWidth(1); + +// For the histo: + // tdrStyle->SetHistFillColor(1); + // tdrStyle->SetHistFillStyle(0); + tdrStyle->SetHistLineColor(1); + tdrStyle->SetHistLineStyle(0); + tdrStyle->SetHistLineWidth(1); + // tdrStyle->SetLegoInnerR(Float_t rad = 0.5); + // tdrStyle->SetNumberContours(Int_t number = 20); + + tdrStyle->SetEndErrorSize(2); +// tdrStyle->SetErrorMarker(20); + tdrStyle->SetErrorX(0.); + + tdrStyle->SetMarkerStyle(20); + +//For the fit/function: + tdrStyle->SetOptFit(1); + tdrStyle->SetFitFormat("5.4g"); + tdrStyle->SetFuncColor(2); + tdrStyle->SetFuncStyle(1); + tdrStyle->SetFuncWidth(1); + +//For the date: + tdrStyle->SetOptDate(0); + // tdrStyle->SetDateX(Float_t x = 0.01); + // tdrStyle->SetDateY(Float_t y = 0.01); + +// For the statistics box: + tdrStyle->SetOptFile(0); + tdrStyle->SetOptStat(0); // To display the mean and RMS: SetOptStat("mr"); + tdrStyle->SetStatColor(kWhite); + tdrStyle->SetStatFont(42); + tdrStyle->SetStatFontSize(0.025); + tdrStyle->SetStatTextColor(1); + tdrStyle->SetStatFormat("6.4g"); + tdrStyle->SetStatBorderSize(1); + tdrStyle->SetStatH(0.1); + tdrStyle->SetStatW(0.15); + // tdrStyle->SetStatStyle(Style_t style = 1001); + // tdrStyle->SetStatX(Float_t x = 0); + // tdrStyle->SetStatY(Float_t y = 0); + +// Margins: + tdrStyle->SetPadTopMargin(0.05); + tdrStyle->SetPadBottomMargin(0.13); + tdrStyle->SetPadLeftMargin(0.16); + tdrStyle->SetPadRightMargin(0.02); + +// For the Global title: + + tdrStyle->SetOptTitle(0); + tdrStyle->SetTitleFont(42); + tdrStyle->SetTitleColor(1); + tdrStyle->SetTitleTextColor(1); + tdrStyle->SetTitleFillColor(10); + tdrStyle->SetTitleFontSize(0.05); + // tdrStyle->SetTitleH(0); // Set the height of the title box + // tdrStyle->SetTitleW(0); // Set the width of the title box + // tdrStyle->SetTitleX(0); // Set the position of the title box + // tdrStyle->SetTitleY(0.985); // Set the position of the title box + // tdrStyle->SetTitleStyle(Style_t style = 1001); + // tdrStyle->SetTitleBorderSize(2); + +// For the axis titles: + + tdrStyle->SetTitleColor(1, "XYZ"); + tdrStyle->SetTitleFont(42, "XYZ"); + tdrStyle->SetTitleSize(0.06, "XYZ"); + // tdrStyle->SetTitleXSize(Float_t size = 0.02); // Another way to set the size? + // tdrStyle->SetTitleYSize(Float_t size = 0.02); + tdrStyle->SetTitleXOffset(0.9); + tdrStyle->SetTitleYOffset(1.25); + // tdrStyle->SetTitleOffset(1.1, "Y"); // Another way to set the Offset + +// For the axis labels: + + tdrStyle->SetLabelColor(1, "XYZ"); + tdrStyle->SetLabelFont(42, "XYZ"); + tdrStyle->SetLabelOffset(0.007, "XYZ"); + tdrStyle->SetLabelSize(0.05, "XYZ"); + +// For the axis: + + tdrStyle->SetAxisColor(1, "XYZ"); + tdrStyle->SetStripDecimals(kTRUE); + tdrStyle->SetTickLength(0.03, "XYZ"); + tdrStyle->SetNdivisions(510, "XYZ"); + tdrStyle->SetPadTickX(1); // To get tick marks on the opposite side of the frame + tdrStyle->SetPadTickY(1); + +// Change for log plots: + tdrStyle->SetOptLogx(0); + tdrStyle->SetOptLogy(0); + tdrStyle->SetOptLogz(0); + +// Postscript options: + tdrStyle->SetPaperSize(20.,20.); + // tdrStyle->SetLineScalePS(Float_t scale = 3); + // tdrStyle->SetLineStyleString(Int_t i, const char* text); + // tdrStyle->SetHeaderPS(const char* header); + // tdrStyle->SetTitlePS(const char* pstitle); + + // tdrStyle->SetBarOffset(Float_t baroff = 0.5); + // tdrStyle->SetBarWidth(Float_t barwidth = 0.5); + // tdrStyle->SetPaintTextFormat(const char* format = "g"); + // tdrStyle->SetPalette(Int_t ncolors = 0, Int_t* colors = 0); + // tdrStyle->SetTimeOffset(Double_t toffset); + // tdrStyle->SetHistMinimumZero(kTRUE); + + tdrStyle->cd(); + +} diff --git a/AnalysisCode/Trigger_ttbar/test.h b/AnalysisCode/Trigger_ttbar/test.h new file mode 100644 index 0000000..0e38391 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/test.h @@ -0,0 +1,51 @@ +#include +#include + +std::vector pts; +std::vector csvs; + + +float Pt4(float pt, float eta, int Jet_puId, int element, int iteration, int length){ + float value = 0; + if(iteration==0){ + pts.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4){ + pts.push_back(pt); + } + if (iteration==length-1){ +// pts.sort(); + if (pts.size()>=4){ + value= pts[element]; + pts.clear(); + } + } + return value; +} + +float CSV(float csv, float eta, int Jet_puId, int element, int iteration, int length){ + float value = -10; + if(iteration==0){ + csvs.clear(); + } + if (abs(eta)<2.4 && Jet_puId>=4 && csvs.size()<=4){ + csvs.push_back(csv); + } + if (iteration==length-1){ +// pts.sort(); + if (csvs.size()>=4){ + std::sort( csvs.begin(), csvs.end(), std::greater() ); + // std::cout<<"here"<Scan("Sum$(Pt4(Jet_pt,Jet_eta,3,Iteration$,Length$)):Jet_pt[3]") +// +// diff --git a/AnalysisCode/Trigger_ttbar/trig.h b/AnalysisCode/Trigger_ttbar/trig.h new file mode 100644 index 0000000..42fcb33 --- /dev/null +++ b/AnalysisCode/Trigger_ttbar/trig.h @@ -0,0 +1,220 @@ +#include "fittedFunctions_.h" +#include "fittedFunctions2_.h" +#include "fittedFunctions3_.h" + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4 = DoubleJet_CaloPt4h->Eval(pt4); + float L1 = DoubleJet_L1h->Eval(sumpt); + float res = L1*calopt4*DoubleJet_CaloPt2->Eval(pt2)*DoubleJet_CSV3->Eval(CSV3)*DoubleJet_PFPt4->Eval(pt4)*DoubleJet_PFPt2->Eval(pt2); + if( res < 0 ) return 0; + return res; +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + + float mu[6], sig[6]; + mu[0]=DoubleJet_L1h->Eval(sumpt); + sig[0]=DoubleJet_L1hUp->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4h->Eval(pt4); + sig[1]=DoubleJet_CaloPt4hUp->Eval(pt4)-mu[1]; + mu[2]=DoubleJet_CSV3->Eval(CSV3); + sig[2]=DoubleJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[3]=DoubleJet_PFPt4->Eval(pt4); + sig[3]=DoubleJet_PFPt4Up->Eval(pt4)-mu[3]; + mu[4]=DoubleJet_PFPt2->Eval(pt2); + sig[4]=DoubleJet_PFPt4Up->Eval(pt2)-mu[4]; + mu[5]=DoubleJet_CaloPt2->Eval(pt2); + sig[5]=DoubleJet_CaloPt2Up->Eval(pt2)-mu[5]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 6; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 6; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +}; + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + + float mu[6], sig[6]; + mu[0]=DoubleJet_L1h->Eval(sumpt); + sig[0]=DoubleJet_L1hDown->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4h->Eval(pt4); + sig[1]=DoubleJet_CaloPt4hDown->Eval(pt4)-mu[1]; + mu[2]=DoubleJet_CSV3->Eval(CSV3); + sig[2]=DoubleJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[3]=DoubleJet_PFPt4->Eval(pt4); + sig[3]=DoubleJet_PFPt4Down->Eval(pt4)-mu[3]; + mu[4]=DoubleJet_PFPt2->Eval(pt2); + sig[4]=DoubleJet_PFPt4Down->Eval(pt2)-mu[4]; + mu[5]=DoubleJet_CaloPt2->Eval(pt2); + sig[5]=DoubleJet_CaloPt2Down->Eval(pt2)-mu[5]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 6; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 6; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4 = QuaJet_CaloPt4h->Eval(pt4); + float L1 =QuaJet_L1h->Eval(sumpt); + float res = L1*calopt4*QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float mu[4], sig[4]; + mu[0]=QuaJet_L1h->Eval(sumpt); + sig[0]=QuaJet_L1hUp->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4h->Eval(pt4); + sig[1]=QuaJet_CaloPt4hUp->Eval(pt4)-mu[1]; + mu[2]=QuaJet_CSV3->Eval(CSV3); + sig[2]=QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[3]=QuaJet_PFPt4->Eval(pt4); + sig[3]=QuaJet_PFPt4Up->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 4; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + + float mu[4], sig[4]; + mu[0]=QuaJet_L1h->Eval(sumpt); + sig[0]=QuaJet_L1hDown->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4h->Eval(pt4); + sig[1]=QuaJet_CaloPt4hDown->Eval(pt4)-mu[1]; + mu[2]=QuaJet_CSV3->Eval(CSV3); + sig[2]=QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[3]=QuaJet_PFPt4->Eval(pt4); + sig[3]=QuaJet_PFPt4Down->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 4; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuad(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float calopt4; + /* if(pt4<55) calopt4 = QaD_QuaJet_CaloPt4l->Eval(pt4); + else */ calopt4 = QaD_QuaJet_CaloPt4h->Eval(pt4); + float L1; + /* if(sumpt<210) L1 = QaD_QuaJet_L1l->Eval(sumpt); + else */ L1=QaD_QuaJet_L1h->Eval(sumpt); + float res = L1*calopt4*QaD_QuaJet_CSV3->Eval(CSV3)*QaD_QuaJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + + float mu[4], sig[4]; + mu[0]=QaD_QuaJet_L1h->Eval(sumpt); + sig[0]=QaD_QuaJet_L1hUp->Eval(sumpt)-mu[0]; + mu[1]=QaD_QuaJet_CaloPt4h->Eval(pt4); + sig[1]=QaD_QuaJet_CaloPt4hUp->Eval(pt4)-mu[1]; + mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + sig[2]=QaD_QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[3]=QaD_QuaJet_PFPt4->Eval(pt4); + sig[3]=QaD_QuaJet_PFPt4Up->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 4; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<0?0:CSV3; + float mu[4], sig[4]; + mu[0]=QaD_QuaJet_L1h->Eval(sumpt); + sig[0]=QaD_QuaJet_L1hDown->Eval(sumpt)-mu[0]; + mu[1]=QaD_QuaJet_CaloPt4h->Eval(pt4); + sig[1]=QaD_QuaJet_CaloPt4hDown->Eval(pt4)-mu[1]; + mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + sig[2]=QaD_QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[3]=QaD_QuaJet_PFPt4->Eval(pt4); + sig[3]=QaD_QuaJet_PFPt4Down->Eval(pt4)-mu[3]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 4; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 4; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + + diff --git a/AnalysisCode/Vskim.cc b/AnalysisCode/Vskim.cc new file mode 100644 index 0000000..1b30b2b --- /dev/null +++ b/AnalysisCode/Vskim.cc @@ -0,0 +1,31 @@ +#include +#include "TTree.h" +#include "TFile.h" +#include "TH1F.h" + +void Vskim(std::string infile) +{ + TFile *file=new TFile((infile+".root").c_str()); + TH1F *h_Count=(TH1F*)file->Get("Count"); + TH1F *h_CountWeighted=(TH1F*)file->Get("CountWeighted"); + TH1F *h_CountPosWeight=(TH1F*)file->Get("CountPosWeight"); + TH1F *h_CountNegWeight=(TH1F*)file->Get("CountNegWeight"); + TTree *tree=(TTree*)file->Get("tree"); + + std::string cut="(Vtype == -1 || Vype==4) && HLT_HH4bAll == 1"; + std::cout<<"Copying new tree with "<cd(); + TTree *tree_new=(TTree*)tree->CopyTree(cut.c_str()); + std::cout<<"done."<Write(); + h_Count->Write(); + h_CountWeighted->Write(); + h_CountPosWeight->Write(); + h_CountNegWeight->Write(); + outfile->Close(); + + return; +} + diff --git a/AnalysisCode/doBuildInputs.sh b/AnalysisCode/doBuildInputs.sh new file mode 100644 index 0000000..27decbf --- /dev/null +++ b/AnalysisCode/doBuildInputs.sh @@ -0,0 +1,28 @@ +#!/bin/bash + + +mass=$1 +#fitModel=$3 + + + +mkdir MMR_${mass} +echo + +echo " { gSystem->Load(\"PDFs/ExpGaussExp_cxx.so\"); gROOT->LoadMacro(\"Display_SignalFits.cc\"); Display_SignalFits(\"PreselectedWithRegressionDeepCSV\",\"reg\",\"MMRSelection_chi2\",\"Histograms_GluGluToBulkGravitonToHHTo4B_M-\",${mass},\"false\"); }" > test.c +echo +root -x -b -l -q test.c > MMR_${mass}/signal${mass}_sig.log +cp SignalFitsreg/*${mass}* MMR_${mass}/ +cp SignalFitsreg/index.html MMR_${mass}/ +#Display_SignalFits.cc\(\"PreselectedWithRegressionDeepCSV\",\"MMRSelection_chi2\",\"Histograms_GluGluToBulkGravitonToHHTo4B_M-\",${mass},\"true\"\) > MMR_${mass}/signal${mass}_sig.log +echo +cd PreselectedWithRegressionDeepCSV/MMRSelection_chi2 +echo "root -x -b -l -q fit_background.c " +echo +root -x -b -l -q fit_crystal.c > ../../MMR_${mass}/data_bkg.log +cp w_background_Crystal.root ../../MMR_${mass}/ +cp w_data.root ../../MMR_${mass}/ +cd ../../ + +python PDFSyst.py --mass $1 > MMR_${mass}/pdf.log + diff --git a/AnalysisCode/doBuildInputsLMR.sh b/AnalysisCode/doBuildInputsLMR.sh new file mode 100644 index 0000000..002ee21 --- /dev/null +++ b/AnalysisCode/doBuildInputsLMR.sh @@ -0,0 +1,29 @@ +#!/bin/bash + + +#rebin=$1 +mass=$1 +#fitModel=$3 + + + +mkdir LMR_${mass} +echo + +echo "root -x -b -l -q Display_SignalFits_LMR.cc\(\"PreselectedWithRegressionDeepCSV\",\"reg\",\"LMRSelection_chi2\",\"Histograms_GluGluToBulkGravitonToHHTo4B_M-\",${mass},\"false\"\) > LMR_${mass}/signal${mass}_sig.log" +echo +root -x -b -l -q Display_SignalFits_LMR.cc\(\"PreselectedWithRegressionDeepCSV\",\"reg\",\"LMRSelection_chi2\",\"Histograms_GluGluToBulkGravitonToHHTo4B_M-\",${mass},\"False\"\) > LMR_${mass}/signal${mass}_sig.log +cp SignalFits_LMRreg/*${mass}* LMR_${mass}/ +cp SignalFits_LMRreg/index.html LMR_${mass}/ + +echo +cd PreselectedWithRegressionDeepCSV/LMRSelection_chi2 +echo "root -x -b -l -q fit_background.c " +echo +root -x -b -l -q fit_crystal.c > ../../LMR_${mass}/data_bkg.log +cp w_background_Crystal.root ../../LMR_${mass}/ +cp w_data.root ../../LMR_${mass}/ +cd ../../ + +python PDFSyst.py --mass $1 > LMR_${mass}/pdf.log + diff --git a/AnalysisCode/doDatacards.sh b/AnalysisCode/doDatacards.sh new file mode 100644 index 0000000..4179360 --- /dev/null +++ b/AnalysisCode/doDatacards.sh @@ -0,0 +1,55 @@ +mass=$1 +cards="" +dirName="MMR_${mass}" +dcardName="datacard_${mass}.txt" +bgLogName="data_bkg.log" +pdfLogName="pdf.log" +sig_norm=`grep 'norm =' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +jec_norm=`grep 'JEC lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +jer_norm=`grep 'JER lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +btag_norm=`grep 'btag lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +pdf_norm=`grep 'PDF lnN' ${dirName}/${pdfLogName} | awk '{print $3}'` +echo ${sig_norm} +echo ${jec_norm} +echo ${jer_norm} +echo ${btag_norm} +bkg_norm=`grep ' Background number of events = ' ${dirName}/${bgLogName} | awk '{print $6}'` + +#let's build a datacard! +cat > ${dirName}/${dcardName} <> ${dirName}/${dcardName} + +#grep 'bias_term_' ${dirName}/${bgLogName} | grep ' param ' >> ${dirName}/${dcardName} +grep 'bg_' ${dirName}/${bgLogName} | grep 'param' >> ${dirName}/${dcardName} + +#grep 'bg_' ${dirName}/${bgLogName} | grep ' param ' >> ${dirName}/${dcardName} +#grep 'bg_' ${dirName}/${bgLogName} | grep 'param' >> ${dirName}/${dcardName} +cards+="${dirName}/${dcardName} " + + diff --git a/AnalysisCode/doDatacardsLMR.sh b/AnalysisCode/doDatacardsLMR.sh new file mode 100644 index 0000000..58f35f9 --- /dev/null +++ b/AnalysisCode/doDatacardsLMR.sh @@ -0,0 +1,57 @@ +mass=$1 +cards="" +dirName="LMR_${mass}" +dcardName="datacard_${mass}.txt" +bgLogName="data_bkg.log" +pdfLogName="pdf.log" +sig_norm=`grep 'norm =' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +jec_norm=`grep 'JEC lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +jer_norm=`grep 'JER lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +btag_norm=`grep 'bTag lnN' ${dirName}/signal${mass}_sig.log | awk '{print $3}'` +pdf_norm=`grep 'PDF lnN' ${dirName}/${pdfLogName} | awk '{print $3}'` + +echo ${sig_norm} +echo ${jec_norm} +echo ${jer_norm} +echo ${btag_norm} +echo ${pdf_norm} +echo "norm" + +bkg_norm=`grep ' Background number of events = ' ${dirName}/${bgLogName} | awk '{print $6}'` + +#let's build a datacard! +cat > ${dirName}/${dcardName} <> ${dirName}/${dcardName} +#grep 'bias_term_' ${dirName}/${bgLogName} | grep ' param ' >> ${dirName}/${dcardName} +grep 'bg_' ${dirName}/${bgLogName} | grep 'param' >> ${dirName}/${dcardName} +#grep 'bg_' ${dirName}/${bgLogName} | grep ' param ' >> ${dirName}/${dcardName} +#grep 'bg_' ${dirName}/${bgLogName} | grep 'param' >> ${dirName}/${dcardName} +cards+="${dirName}/${dcardName} " + + diff --git a/AnalysisCode/doLimits.sh b/AnalysisCode/doLimits.sh new file mode 100644 index 0000000..74df801 --- /dev/null +++ b/AnalysisCode/doLimits.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +function show_help { + echo "./doLimits.sh [-c to clean up] [-d debug combine]" +} + +masses=( + 350 400 450 500 550 600 650 750 800 900 1000 1200 +) +massesLMR=( + 260 270 300 350 400 450 500 +) +cleanUp=0 +#rebin=10 +debug=0 + +while getopts "h?cr:d" opt; do + case "$opt" in + h|\?) + show_help + exit 0 + ;; + d) + debug=1 + ;; + c) cleanUp=1 + ;; + esac +done + +for m in ${masses[@]} +do + if [ $cleanUp -eq 0 ]; then + echo 'MMR' + source doBuildInputs.sh $m + source doDatacards.sh $m + #./runLimits.sh $debug $m + fi + + if [ $cleanUp -eq 1 ]; then + ./cleanUp.sh $m + fi +done +for m in ${massesLMR[@]} +do + if [ $cleanUp -eq 0 ]; then + source doBuildInputsLMR.sh $m + source doDatacardsLMR.sh $m + #./runLimits.sh $debug $m + fi + + if [ $cleanUp -eq 1 ]; then + ./cleanUp.sh $m + fi +done + diff --git a/AnalysisCode/fittedFunctions2_BF.h b/AnalysisCode/fittedFunctions2_BF.h new file mode 100644 index 0000000..d548e79 --- /dev/null +++ b/AnalysisCode/fittedFunctions2_BF.h @@ -0,0 +1,18 @@ +TF1* DoubleJet_L1 = new TF1("DoubleJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-252.012)/78.0111)*(x>252.012))+(((x-252.012)/(78.0111-16.3556))*(x<=252.012)))*0.999223))))-5.55112e-17)"); +TF1* DoubleJet_L1Up = new TF1("DoubleJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-252.016)/78.0111)*(x>252.016))+(((x-252.016)/(78.0111-16.3556))*(x<=252.016)))*0.999223))))+0.02)"); +TF1* DoubleJet_L1Down = new TF1("DoubleJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-252.016)/78.0111)*(x>252.016))+(((x-252.016)/(78.0111-16.3556))*(x<=252.016)))*0.999223))))-0.02)"); +TF1* DoubleJet_CaloPt4 = new TF1("DoubleJet_CaloPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-15.7817)/19.658)*(x>15.7817))+(((x-15.7817)/(19.658-9.42453))*(x<=15.7817)))*2))))-0.505381)"); +TF1* DoubleJet_CaloPt4Up = new TF1("DoubleJet_CaloPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-15.6588)/19.658)*(x>15.6588))+(((x-15.6588)/(19.658-9.42453))*(x<=15.6588)))*2))))-0.485381)"); +TF1* DoubleJet_CaloPt4Down = new TF1("DoubleJet_CaloPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-15.9058)/19.658)*(x>15.9058))+(((x-15.9058)/(19.658-9.42453))*(x<=15.9058)))*2))))-0.525381)"); +TF1* DoubleJet_CaloPt2 = new TF1("DoubleJet_CaloPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-87.0299)/21.5934)*(x>87.0299))+(((x-87.0299)/(21.5934-4.74652))*(x<=87.0299)))*0.98381))))-6.42819e-14)"); +TF1* DoubleJet_CaloPt2Up = new TF1("DoubleJet_CaloPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-86.9147)/21.5934)*(x>86.9147))+(((x-86.9147)/(21.5934-4.74652))*(x<=86.9147)))*0.98381))))+0.02)"); +TF1* DoubleJet_CaloPt2Down = new TF1("DoubleJet_CaloPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-87.2235)/21.5934)*(x>87.2235))+(((x-87.2235)/(21.5934-4.74652))*(x<=87.2235)))*0.98381))))-0.02)"); +TF1* DoubleJet_CSV3 = new TF1("DoubleJet_CSV3","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.07414)/1.6331)*(x>-1.07414))+(((x+1.07414)/(1.6331-0.78294))*(x<=-1.07414)))*2))))-0.630783)"); +TF1* DoubleJet_CSV3Up = new TF1("DoubleJet_CSV3Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.19303)/1.6331)*(x>-1.19303))+(((x+1.19303)/(1.6331-0.78294))*(x<=-1.19303)))*2))))-0.608465)"); +TF1* DoubleJet_CSV3Down = new TF1("DoubleJet_CSV3Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.953561)/1.6331)*(x>-0.953561))+(((x+0.953561)/(1.6331-0.78294))*(x<=-0.953561)))*2))))-0.652227)"); +TF1* DoubleJet_PFPt4 = new TF1("DoubleJet_PFPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-15.1921)/15.0589)*(x>15.1921))+(((x-15.1921)/(15.0589-7.21964))*(x<=15.1921)))*0.996857))))-0)"); +TF1* DoubleJet_PFPt4Up = new TF1("DoubleJet_PFPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-14.6683)/15.0589)*(x>14.6683))+(((x-14.6683)/(15.0589-7.21964))*(x<=14.6683)))*0.996857))))+0.02)"); +TF1* DoubleJet_PFPt4Down = new TF1("DoubleJet_PFPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-15.7214)/15.0589)*(x>15.7214))+(((x-15.7214)/(15.0589-7.21964))*(x<=15.7214)))*0.996857))))-0.02)"); +TF1* DoubleJet_PFPt2 = new TF1("DoubleJet_PFPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.3329)/15.1374)*(x>85.3329))+(((x-85.3329)/(15.1374+16.7961))*(x<=85.3329)))*0.995228))))-0)"); +TF1* DoubleJet_PFPt2Up = new TF1("DoubleJet_PFPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.068)/15.1374)*(x>85.068))+(((x-85.068)/(15.1374+16.7961))*(x<=85.068)))*0.995228))))+0.02)"); +TF1* DoubleJet_PFPt2Down = new TF1("DoubleJet_PFPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.599)/15.1374)*(x>85.599))+(((x-85.599)/(15.1374+16.7961))*(x<=85.599)))*0.995228))))-0.02)"); diff --git a/AnalysisCode/fittedFunctions2_GH.h b/AnalysisCode/fittedFunctions2_GH.h new file mode 100644 index 0000000..eb8fd8c --- /dev/null +++ b/AnalysisCode/fittedFunctions2_GH.h @@ -0,0 +1,18 @@ +TF1* DoubleJet_L1 = new TF1("DoubleJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-260.145)/79.0451)*(x>260.145))+(((x-260.145)/(79.0451-13.5273))*(x<=260.145)))*0.99883))))-4.9788e-13)"); +TF1* DoubleJet_L1Up = new TF1("DoubleJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-259.772)/79.0451)*(x>259.772))+(((x-259.772)/(79.0451-13.5273))*(x<=259.772)))*0.99883))))+0.02)"); +TF1* DoubleJet_L1Down = new TF1("DoubleJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-260.518)/79.0451)*(x>260.518))+(((x-260.518)/(79.0451-13.5273))*(x<=260.518)))*0.99883))))-0.02)"); +TF1* DoubleJet_CaloPt4 = new TF1("DoubleJet_CaloPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-14.674)/19.5798)*(x>14.674))+(((x-14.674)/(19.5798+0))*(x<=14.674)))*2))))-0.505361)"); +TF1* DoubleJet_CaloPt4Up = new TF1("DoubleJet_CaloPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-14.5472)/19.5798)*(x>14.5472))+(((x-14.5472)/(19.5798+0))*(x<=14.5472)))*2))))-0.485361)"); +TF1* DoubleJet_CaloPt4Down = new TF1("DoubleJet_CaloPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-14.8018)/19.5798)*(x>14.8018))+(((x-14.8018)/(19.5798+0))*(x<=14.8018)))*2))))-0.525361)"); +TF1* DoubleJet_CaloPt2 = new TF1("DoubleJet_CaloPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.4249)/21.9235)*(x>85.4249))+(((x-85.4249)/(21.9235-4.98956))*(x<=85.4249)))*0.986604))))-7.18314e-14)"); +TF1* DoubleJet_CaloPt2Up = new TF1("DoubleJet_CaloPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.2301)/21.9235)*(x>85.2301))+(((x-85.2301)/(21.9235-4.98956))*(x<=85.2301)))*0.986604))))+0.02)"); +TF1* DoubleJet_CaloPt2Down = new TF1("DoubleJet_CaloPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.6189)/21.9235)*(x>85.6189))+(((x-85.6189)/(21.9235-4.98956))*(x<=85.6189)))*0.986604))))-0.02)"); +TF1* DoubleJet_CSV3 = new TF1("DoubleJet_CSV3","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.881966)/1.06283)*(x>-0.881966))+(((x+0.881966)/(1.06283-0.509543))*(x<=-0.881966)))*2))))-0.601322)"); +TF1* DoubleJet_CSV3Up = new TF1("DoubleJet_CSV3Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.988735)/1.06283)*(x>-0.988735))+(((x+0.988735)/(1.06283-0.509543))*(x<=-0.988735)))*2))))-0.581322)"); +TF1* DoubleJet_CSV3Down = new TF1("DoubleJet_CSV3Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.767245)/1.06283)*(x>-0.767245))+(((x+0.767245)/(1.06283-0.509543))*(x<=-0.767245)))*2))))-0.621322)"); +TF1* DoubleJet_PFPt4 = new TF1("DoubleJet_PFPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-17.5882)/13.5261)*(x>17.5882))+(((x-17.5882)/(13.5261-6.48476))*(x<=17.5882)))*0.996927))))-0)"); +TF1* DoubleJet_PFPt4Up = new TF1("DoubleJet_PFPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-17.1056)/13.5261)*(x>17.1056))+(((x-17.1056)/(13.5261-6.48476))*(x<=17.1056)))*0.996927))))+0.02)"); +TF1* DoubleJet_PFPt4Down = new TF1("DoubleJet_PFPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-18.0869)/13.5261)*(x>18.0869))+(((x-18.0869)/(13.5261-6.48476))*(x<=18.0869)))*0.996927))))-0.02)"); +TF1* DoubleJet_PFPt2 = new TF1("DoubleJet_PFPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-84.3457)/14.819)*(x>84.3457))+(((x-84.3457)/(14.819+16.2574))*(x<=84.3457)))*0.995488))))-0)"); +TF1* DoubleJet_PFPt2Up = new TF1("DoubleJet_PFPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-84.3464)/14.819)*(x>84.3464))+(((x-84.3464)/(14.819+16.2574))*(x<=84.3464)))*0.995488))))+0.02)"); +TF1* DoubleJet_PFPt2Down = new TF1("DoubleJet_PFPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-84.3464)/14.819)*(x>84.3464))+(((x-84.3464)/(14.819+16.2574))*(x<=84.3464)))*0.995488))))-0.02)"); diff --git a/AnalysisCode/fittedFunctions3_BF.h b/AnalysisCode/fittedFunctions3_BF.h new file mode 100644 index 0000000..8d728c8 --- /dev/null +++ b/AnalysisCode/fittedFunctions3_BF.h @@ -0,0 +1,9 @@ +TF1* QaD_DoubleJet_L1 = new TF1("QaD_DoubleJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-164.741)/100.87)*(x>164.741))+(((x-164.741)/(100.87+101.322))*(x<=164.741)))*0.999839))))-7.4591e-11)"); +TF1* QaD_DoubleJet_L1Up = new TF1("QaD_DoubleJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-161.291)/100.87)*(x>161.291))+(((x-161.291)/(100.87+101.322))*(x<=161.291)))*0.999839))))+0.02)"); +TF1* QaD_DoubleJet_L1Down = new TF1("QaD_DoubleJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-167.992)/100.87)*(x>167.992))+(((x-167.992)/(100.87+101.322))*(x<=167.992)))*0.999839))))-0.02)"); +TF1* QaD_DoubleJet_CaloPt2 = new TF1("QaD_DoubleJet_CaloPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-86.9582)/19.6484)*(x>86.9582))+(((x-86.9582)/(19.6484-2.41426))*(x<=86.9582)))*0.983679))))-8.34377e-12)"); +TF1* QaD_DoubleJet_CaloPt2Up = new TF1("QaD_DoubleJet_CaloPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-86.703)/19.6484)*(x>86.703))+(((x-86.703)/(19.6484-2.41426))*(x<=86.703)))*0.983679))))+0.02)"); +TF1* QaD_DoubleJet_CaloPt2Down = new TF1("QaD_DoubleJet_CaloPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-87.2142)/19.6484)*(x>87.2142))+(((x-87.2142)/(19.6484-2.41426))*(x<=87.2142)))*0.983679))))-0.02)"); +TF1* QaD_DoubleJet_PFPt2 = new TF1("QaD_DoubleJet_PFPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-84.9239)/14.9955)*(x>84.9239))+(((x-84.9239)/(14.9955+16.626))*(x<=84.9239)))*0.995706))))-0)"); +TF1* QaD_DoubleJet_PFPt2Up = new TF1("QaD_DoubleJet_PFPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-84.6353)/14.9955)*(x>84.6353))+(((x-84.6353)/(14.9955+16.626))*(x<=84.6353)))*0.995706))))+0.02)"); +TF1* QaD_DoubleJet_PFPt2Down = new TF1("QaD_DoubleJet_PFPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.2135)/14.9955)*(x>85.2135))+(((x-85.2135)/(14.9955+16.626))*(x<=85.2135)))*0.995706))))-0.02)"); diff --git a/AnalysisCode/fittedFunctions3_GH.h b/AnalysisCode/fittedFunctions3_GH.h new file mode 100644 index 0000000..103e2ee --- /dev/null +++ b/AnalysisCode/fittedFunctions3_GH.h @@ -0,0 +1,9 @@ +TF1* QaD_DoubleJet_L1 = new TF1("QaD_DoubleJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-164.079)/109.642)*(x>164.079))+(((x-164.079)/(109.642+110.029))*(x<=164.079)))*0.999864))))-1.07914e-13)"); +TF1* QaD_DoubleJet_L1Up = new TF1("QaD_DoubleJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-160.673)/109.642)*(x>160.673))+(((x-160.673)/(109.642+110.029))*(x<=160.673)))*0.999864))))+0.02)"); +TF1* QaD_DoubleJet_L1Down = new TF1("QaD_DoubleJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-167.474)/109.642)*(x>167.474))+(((x-167.474)/(109.642+110.029))*(x<=167.474)))*0.999864))))-0.02)"); +TF1* QaD_DoubleJet_CaloPt2 = new TF1("QaD_DoubleJet_CaloPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-86.0337)/20.0642)*(x>86.0337))+(((x-86.0337)/(20.0642-1.97145))*(x<=86.0337)))*0.989725))))-4.34257e-11)"); +TF1* QaD_DoubleJet_CaloPt2Up = new TF1("QaD_DoubleJet_CaloPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-85.7862)/20.0642)*(x>85.7862))+(((x-85.7862)/(20.0642-1.97145))*(x<=85.7862)))*0.989725))))+0.02)"); +TF1* QaD_DoubleJet_CaloPt2Down = new TF1("QaD_DoubleJet_CaloPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-86.2812)/20.0642)*(x>86.2812))+(((x-86.2812)/(20.0642-1.97145))*(x<=86.2812)))*0.989725))))-0.02)"); +TF1* QaD_DoubleJet_PFPt2 = new TF1("QaD_DoubleJet_PFPt2","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-83.7227)/15.0932)*(x>83.7227))+(((x-83.7227)/(15.0932+16.5197))*(x<=83.7227)))*0.996167))))-0)"); +TF1* QaD_DoubleJet_PFPt2Up = new TF1("QaD_DoubleJet_PFPt2Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-83.4515)/15.0932)*(x>83.4515))+(((x-83.4515)/(15.0932+16.5197))*(x<=83.4515)))*0.996167))))+0.02)"); +TF1* QaD_DoubleJet_PFPt2Down = new TF1("QaD_DoubleJet_PFPt2Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-83.9945)/15.0932)*(x>83.9945))+(((x-83.9945)/(15.0932+16.5197))*(x<=83.9945)))*0.996167))))-0.02)"); diff --git a/AnalysisCode/fittedFunctions_BF.h b/AnalysisCode/fittedFunctions_BF.h new file mode 100644 index 0000000..d6d1d07 --- /dev/null +++ b/AnalysisCode/fittedFunctions_BF.h @@ -0,0 +1,12 @@ +TF1* QuaJet_L1 = new TF1("QuaJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-248.047)/87.9238)*(x>248.047))+(((x-248.047)/(87.9238-27.2535))*(x<=248.047)))*0.996028))))+0.00177333)"); +TF1* QuaJet_L1Up = new TF1("QuaJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-247.683)/87.9238)*(x>247.683))+(((x-247.683)/(87.9238-27.2535))*(x<=247.683)))*0.996028))))+0.0217733)"); +TF1* QuaJet_L1Down = new TF1("QuaJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-248.41)/87.9238)*(x>248.41))+(((x-248.41)/(87.9238-27.2535))*(x<=248.41)))*0.996028))))-0.0182267)"); +TF1* QuaJet_CaloPt4 = new TF1("QuaJet_CaloPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-37.4297)/19.6474)*(x>37.4297))+(((x-37.4297)/(19.6474+17.6377))*(x<=37.4297)))*1.48168))))-0.254845)"); +TF1* QuaJet_CaloPt4Up = new TF1("QuaJet_CaloPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-37.3357)/19.6474)*(x>37.3357))+(((x-37.3357)/(19.6474+17.6377))*(x<=37.3357)))*1.48168))))-0.234845)"); +TF1* QuaJet_CaloPt4Down = new TF1("QuaJet_CaloPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-37.5122)/19.6474)*(x>37.5122))+(((x-37.5122)/(19.6474+17.6377))*(x<=37.5122)))*1.48168))))-0.274845)"); +TF1* QuaJet_CSV3 = new TF1("QuaJet_CSV3","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.10411)/1.86962)*(x>-1.10411))+(((x+1.10411)/(1.86962-0.896338))*(x<=-1.10411)))*2))))-0.587134)"); +TF1* QuaJet_CSV3Up = new TF1("QuaJet_CSV3Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.21667)/1.86962)*(x>-1.21667))+(((x+1.21667)/(1.86962-0.896338))*(x<=-1.21667)))*2))))-0.567134)"); +TF1* QuaJet_CSV3Down = new TF1("QuaJet_CSV3Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.993156)/1.86962)*(x>-0.993156))+(((x+0.993156)/(1.86962-0.896338))*(x<=-0.993156)))*2))))-0.607177)"); +TF1* QuaJet_PFPt4 = new TF1("QuaJet_PFPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-44.646)/11.0082)*(x>44.646))+(((x-44.646)/(11.0082-6.5033))*(x<=44.646)))*0.363517))))+0.315876)"); +TF1* QuaJet_PFPt4Up = new TF1("QuaJet_PFPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-44.286)/11.0082)*(x>44.286))+(((x-44.286)/(11.0082-6.5033))*(x<=44.286)))*0.363517))))+0.335876)"); +TF1* QuaJet_PFPt4Down = new TF1("QuaJet_PFPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-45.2983)/11.0082)*(x>45.2983))+(((x-45.2983)/(11.0082-6.5033))*(x<=45.2983)))*0.363517))))+0.295876)"); diff --git a/AnalysisCode/fittedFunctions_GH.h b/AnalysisCode/fittedFunctions_GH.h new file mode 100644 index 0000000..b0c7fa5 --- /dev/null +++ b/AnalysisCode/fittedFunctions_GH.h @@ -0,0 +1,12 @@ +TF1* QuaJet_L1 = new TF1("QuaJet_L1","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-257.077)/85.9832)*(x>257.077))+(((x-257.077)/(85.9832-20.2196))*(x<=257.077)))*0.9927))))+0.000500647)"); +TF1* QuaJet_L1Up = new TF1("QuaJet_L1Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-256.796)/85.9832)*(x>256.796))+(((x-256.796)/(85.9832-20.2196))*(x<=256.796)))*0.9927))))+0.0205006)"); +TF1* QuaJet_L1Down = new TF1("QuaJet_L1Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-257.445)/85.9832)*(x>257.445))+(((x-257.445)/(85.9832-20.2196))*(x<=257.445)))*0.9927))))-0.0194994)"); +TF1* QuaJet_CaloPt4 = new TF1("QuaJet_CaloPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-35.6744)/20.0039)*(x>35.6744))+(((x-35.6744)/(20.0039+18.8909))*(x<=35.6744)))*1.48577))))-0.256576)"); +TF1* QuaJet_CaloPt4Up = new TF1("QuaJet_CaloPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-35.5778)/20.0039)*(x>35.5778))+(((x-35.5778)/(20.0039+18.8909))*(x<=35.5778)))*1.48577))))-0.236576)"); +TF1* QuaJet_CaloPt4Down = new TF1("QuaJet_CaloPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-35.7712)/20.0039)*(x>35.7712))+(((x-35.7712)/(20.0039+18.8909))*(x<=35.7712)))*1.48577))))-0.276576)"); +TF1* QuaJet_CSV3 = new TF1("QuaJet_CSV3","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.02185)/1.50209)*(x>-1.02185))+(((x+1.02185)/(1.50209-0.720143))*(x<=-1.02185)))*2))))-0.560513)"); +TF1* QuaJet_CSV3Up = new TF1("QuaJet_CSV3Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+1.13112)/1.50209)*(x>-1.13112))+(((x+1.13112)/(1.50209-0.720143))*(x<=-1.13112)))*2))))-0.540513)"); +TF1* QuaJet_CSV3Down = new TF1("QuaJet_CSV3Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x+0.911636)/1.50209)*(x>-0.911636))+(((x+0.911636)/(1.50209-0.720143))*(x<=-0.911636)))*2))))-0.580513)"); +TF1* QuaJet_PFPt4 = new TF1("QuaJet_PFPt4","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-43.8322)/10.5812)*(x>43.8322))+(((x-43.8322)/(10.5812-7.40534))*(x<=43.8322)))*0.37301))))+0.310956)"); +TF1* QuaJet_PFPt4Up = new TF1("QuaJet_PFPt4Up","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-43.4891)/10.5812)*(x>43.4891))+(((x-43.4891)/(10.5812-7.40534))*(x<=43.4891)))*0.37301))))+0.330956)"); +TF1* QuaJet_PFPt4Down = new TF1("QuaJet_PFPt4Down","min(1.,(1-(0.5-(0.5*(TMath::Erf((((x-44.1693)/10.5812)*(x>44.1693))+(((x-44.1693)/(10.5812-7.40534))*(x<=44.1693)))*0.37301))))+0.290956)"); diff --git a/AnalysisCode/libPhysicsToolsKinFitter.so b/AnalysisCode/libPhysicsToolsKinFitter.so new file mode 100755 index 0000000..310cb96 Binary files /dev/null and b/AnalysisCode/libPhysicsToolsKinFitter.so differ diff --git a/AnalysisCode/skimData.sh b/AnalysisCode/skimData.sh new file mode 100644 index 0000000..a73ed8c --- /dev/null +++ b/AnalysisCode/skimData.sh @@ -0,0 +1,6 @@ +root -l -b -q 'Vskim.cc++("BTagCSV0")' +root -l -b -q 'Vskim.cc++("BTagCSV1")' +root -l -b -q 'Vskim.cc++("BTagCSV2")' +root -l -b -q 'Vskim.cc++("BTagCSV3")' +root -l -b -q 'Vskim.cc++("BTagCSV4")' +root -l -b -q 'Vskim.cc++("BTagCSV5")' diff --git a/AnalysisCode/sklim/TE_runB.sh b/AnalysisCode/sklim/TE_runB.sh new file mode 100644 index 0000000..abac5cf --- /dev/null +++ b/AnalysisCode/sklim/TE_runB.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +run="RunBv2" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016B-03Feb2017_ver1-v1/170226_195930/" +mkdir $run +cd $run +for i in {1..40} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runB2.sh b/AnalysisCode/sklim/TE_runB2.sh new file mode 100644 index 0000000..9c1e4e6 --- /dev/null +++ b/AnalysisCode/sklim/TE_runB2.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +run="RunBv3" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016B-03Feb2017_ver2-v2/170226_200018/" +mkdir $run +for i in {1..1581} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runC.sh b/AnalysisCode/sklim/TE_runC.sh new file mode 100644 index 0000000..f3d9a5c --- /dev/null +++ b/AnalysisCode/sklim/TE_runC.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +run="RunC" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016C-03Feb2017-v1/170226_200108/" +mkdir $run +for i in {1..618} +#627 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runD.sh b/AnalysisCode/sklim/TE_runD.sh new file mode 100644 index 0000000..0422039 --- /dev/null +++ b/AnalysisCode/sklim/TE_runD.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +run="RunD" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016D-03Feb2017-v1/170226_200156/" +mkdir $run +for i in {1..1153} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runE.sh b/AnalysisCode/sklim/TE_runE.sh new file mode 100644 index 0000000..1e640f5 --- /dev/null +++ b/AnalysisCode/sklim/TE_runE.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +run="RunE" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016E-03Feb2017-v1/170226_200249/" +mkdir $run +for i in {1..1239} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runF.sh b/AnalysisCode/sklim/TE_runF.sh new file mode 100644 index 0000000..f979859 --- /dev/null +++ b/AnalysisCode/sklim/TE_runF.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +run="RunF" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016F-03Feb2017-v1/170226_200337/" +mkdir $run +for i in {1..769} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runG.sh b/AnalysisCode/sklim/TE_runG.sh new file mode 100644 index 0000000..a20497d --- /dev/null +++ b/AnalysisCode/sklim/TE_runG.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +run="RunG" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016G-03Feb2017-v1/170226_200430/" +mkdir $run +for i in {1..2066} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# echo $folder$subfolder +# cd $run +## root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +# root -l -b -q "../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runG1.sh b/AnalysisCode/sklim/TE_runG1.sh new file mode 100644 index 0000000..28fc771 --- /dev/null +++ b/AnalysisCode/sklim/TE_runG1.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +run="RunG" +#folder="VHBB_HEPPY_V24a_JetHT__Run2016G-PromptReco-v1/161010_142542/" +folder="VHBB_HEPPY_V24_JetHT__Run2016G-PromptReco-v1/161013_195053/" + + +for i in {1001..1500} +#3820} # 2159 >90 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +done + +sfs=( 0000 0001 0002 ) #, "0001", "0002", "0003" } +out_L1="" + +for f in $sfs +do + name="JetHTSkimmed$f.root" + echo "Output file: $name" + echo "Input files:" + files=$(ls $run/$f) + new_files="" + for file in $files + do + # echo $file + new_files="$new_files $run/$f/$file" + done + hadd -f $run/$name $new_files + out_L1="$out_L1 $run/$name" +done + +hadd -f "JetHTSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runG2.sh b/AnalysisCode/sklim/TE_runG2.sh new file mode 100644 index 0000000..97fedc6 --- /dev/null +++ b/AnalysisCode/sklim/TE_runG2.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +run="RunG" +#folder="VHBB_HEPPY_V24a_JetHT__Run2016G-PromptReco-v1/161010_142542/" +folder="VHBB_HEPPY_V24_JetHT__Run2016G-PromptReco-v1/161013_195053/" + + +for i in {1..800} +#3820} # 2159 >90 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +done + +sfs=( 0000 0001 0002 ) #, "0001", "0002", "0003" } +out_L1="" + +for f in $sfs +do + name="JetHTSkimmed$f.root" + echo "Output file: $name" + echo "Input files:" + files=$(ls $run/$f) + new_files="" + for file in $files + do + # echo $file + new_files="$new_files $run/$f/$file" + done + hadd -f $run/$name $new_files + out_L1="$out_L1 $run/$name" +done + +hadd -f "JetHTSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runG3.sh b/AnalysisCode/sklim/TE_runG3.sh new file mode 100644 index 0000000..496e41a --- /dev/null +++ b/AnalysisCode/sklim/TE_runG3.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +run="RunG" +#folder="VHBB_HEPPY_V24a_JetHT__Run2016G-PromptReco-v1/161010_142542/" +folder="VHBB_HEPPY_V24_JetHT__Run2016G-PromptReco-v1/161013_195053/" + + +for i in {1501..2000} +#3820} # 2159 >90 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +done + +sfs=( 0000 0001 0002 ) #, "0001", "0002", "0003" } +out_L1="" + +for f in $sfs +do + name="JetHTSkimmed$f.root" + echo "Output file: $name" + echo "Input files:" + files=$(ls $run/$f) + new_files="" + for file in $files + do + # echo $file + new_files="$new_files $run/$f/$file" + done + hadd -f $run/$name $new_files + out_L1="$out_L1 $run/$name" +done + +hadd -f "JetHTSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runH.sh b/AnalysisCode/sklim/TE_runH.sh new file mode 100644 index 0000000..914daaa --- /dev/null +++ b/AnalysisCode/sklim/TE_runH.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +run="RunH" +#folder="VHBB_HEPPY_V24a_SingleMuon__Run2016G-PromptReco-v1/161010_142542/" +folder="VHBB_HEPPY_V25_SingleMuon__Run2016H-PromptReco-v2/170130_120108/" +#folder="VHBB_HEPPY_V24_BTagCSV__Run2016G-PromptReco-v1/160912_065427/" + +for i in {1..1909} +#3820} # 2159 >90 +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" +done + +sfs=( 0000 0001 0002 ) #, "0001", "0002", "0003" } +out_L1="" + +for f in $sfs +do + name="SingleMuonSkimmed$f.root" + echo "Output file: $name" + echo "Input files:" + files=$(ls $run/$f) + new_files="" + for file in $files + do + # echo $file + new_files="$new_files $run/$f/$file" + done + hadd -f $run/$name $new_files + out_L1="$out_L1 $run/$name" +done + +hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runHv1.sh b/AnalysisCode/sklim/TE_runHv1.sh new file mode 100644 index 0000000..3c5c786 --- /dev/null +++ b/AnalysisCode/sklim/TE_runHv1.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +run="RunHv1" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016H-03Feb2017_ver2-v1/170226_200517/" +mkdir $run +for i in {1..1289} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + echo $folder$subfolder + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runHv2.sh b/AnalysisCode/sklim/TE_runHv2.sh new file mode 100644 index 0000000..2aa98f5 --- /dev/null +++ b/AnalysisCode/sklim/TE_runHv2.sh @@ -0,0 +1,53 @@ +#!/bin/sh + +run="RunHv2" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25rereco/BTagCSV/VHBB_HEPPY_V25b_BTagCSV__Run2016H-03Feb2017_ver3-v1/170226_200606/" +mkdir $run +for i in {1..1289} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + cd $run + echo $folder$subfolder + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/sklim/TE_runHv3.sh b/AnalysisCode/sklim/TE_runHv3.sh new file mode 100644 index 0000000..675d95a --- /dev/null +++ b/AnalysisCode/sklim/TE_runHv3.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +run="RunHv3" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160910_205020/" +#folder="VHBB_HEPPY_V24_JetHT__Run2016B-PromptReco-v2/160912_07022/" +folder="/eos/uscms/store/user/lpchbb/HeppyNtuples/V25/BTagCSV/VHBB_HEPPY_V25_BTagCSV__Run2016H-PromptReco-v3/170206_164802/" +mkdir $run +for i in {1..46} +do + if test $i -lt 1000 + then subfolder="0000/" + elif test $i -lt 2000 + then subfolder="0001/" + elif test $i -lt 3000 + then subfolder="0002/" + else + subfolder="0003/" + fi + file="tree_"$i + echo $folder$subfolder + ln -s ../../HbbHbb_PreSelection.cc . + #cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + root -l -b -q "HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"/uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/AnalysisCode//gravall-v25.weights.xml\")" + cd $run +# root -b -l -q "TE_presel.cc(\"$run\", \"$folder\", \"$subfolder\", \"$file\" )" + #root -l -b -q "../../HbbHbb_PreSelection.cc++(\"$folder$subfolder\", \"$file\",\"JEC\",\"JER\",\"Trig\",\"bTag\",\"../grav_all_upTo1400.xml\")" +done + + +#sfs="0000 0001 0002 0003" +#out_L1="" + +#for f in $sfs +#do +# name="SingleMuonSkimmed$f.root" +# echo "Output file: $name" +# echo "Input files:" +# files=$(ls $run/$f) +# new_files="" +# for file in $files +# do + # echo $file +# new_files="$new_files $run/$f/$file" +# done +# hadd -f $run/$name $new_files +# out_L1="$out_L1 $run/$name" +#done + +#hadd -f "SingleMuonSkimmed$run.root" $out_L1 + + diff --git a/AnalysisCode/trig.h b/AnalysisCode/trig.h new file mode 100644 index 0000000..162d354 --- /dev/null +++ b/AnalysisCode/trig.h @@ -0,0 +1,222 @@ +#include "fittedFunctions_GH.h" +#include "fittedFunctions2_GH.h" +#include "fittedFunctions3_GH.h" +#include "CSVsort.C" + +double TurnOnDouble(float sumpt, float pt2, float pt4, float CSV1, float CSV2, float CSV3, float CSV4) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + float calopt4 = DoubleJet_CaloPt4->Eval(pt4); + float L1 = DoubleJet_L1->Eval(sumpt); + float res = L1*calopt4*DoubleJet_CaloPt2->Eval(pt2)*CSVn(3, CSV1, CSV2, CSV3, CSV4)*DoubleJet_PFPt2->Eval(pt2)*DoubleJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double TurnOnDoubleUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + CSV3 = -log(1-CSV3); + float mu[6], sig[6]; + mu[0]=DoubleJet_L1->Eval(sumpt); + sig[0]=DoubleJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4->Eval(pt4); + sig[1]=DoubleJet_CaloPt4Up->Eval(pt4)-mu[1]; + //mu[2]=CSVn(3, CSV1, CSV2, CSV3, CSV4);//DoubleJet_CSV3->Eval(CSV3); + //sig[2]=DoubleJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[2]=DoubleJet_PFPt4->Eval(pt4); + sig[2]=DoubleJet_PFPt4Up->Eval(pt4)-mu[2]; + mu[3]=DoubleJet_PFPt2->Eval(pt2); + sig[3]=DoubleJet_PFPt4Up->Eval(pt2)-mu[3]; + mu[4]=DoubleJet_CaloPt2->Eval(pt2); + sig[4]=DoubleJet_CaloPt2Up->Eval(pt2)-mu[4]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 5; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 5; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +}; + +double TurnOnDoubleDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + float mu[5], sig[5]; + mu[0]=DoubleJet_L1->Eval(sumpt); + sig[0]=DoubleJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=DoubleJet_CaloPt4->Eval(pt4); + sig[1]=DoubleJet_CaloPt4Down->Eval(pt4)-mu[1]; + //mu[2]=DoubleJet_CSV3->Eval(CSV3); + //sig[2]=DoubleJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[2]=DoubleJet_PFPt4->Eval(pt4); + sig[2]=DoubleJet_PFPt4Down->Eval(pt4)-mu[2]; + mu[3]=DoubleJet_PFPt2->Eval(pt2); + sig[3]=DoubleJet_PFPt4Down->Eval(pt2)-mu[3]; + mu[4]=DoubleJet_CaloPt2->Eval(pt2); + sig[4]=DoubleJet_CaloPt2Down->Eval(pt2)-mu[4]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 5; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 5; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + + if( res < 0 ) return 0; + return res; +} + +double QuaJet_L1_(float sumpt){ + return QuaJet_L1->Eval(sumpt); +} +double TurnOnQuad(float sumpt, float pt2, float pt4, float CSV1, float CSV2, float CSV3, float CSV4) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + float calopt4 = QuaJet_CaloPt4->Eval(pt4); + float L1 =QuaJet_L1->Eval(sumpt); +// L1 =1; +// calopt4 = 1; + + float res = L1*calopt4*CSVn(3, CSV1, CSV2, CSV3, CSV4)*QuaJet_PFPt4->Eval(pt4); +// float res = QuaJet_CSV3->Eval(CSV3)*QuaJet_PFPt4->Eval(pt4); + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + float mu[4], sig[4]; + mu[0]=QuaJet_L1->Eval(sumpt); + sig[0]=QuaJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4->Eval(pt4); + sig[1]=QuaJet_CaloPt4Up->Eval(pt4)-mu[1]; + //mu[2]=QuaJet_CSV3->Eval(CSV3); + //sig[2]=QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[2]=QuaJet_PFPt4->Eval(pt4); + sig[2]=QuaJet_PFPt4Up->Eval(pt4)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + float mu[4], sig[4]; + mu[0]=QuaJet_L1->Eval(sumpt); + sig[0]=QuaJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=QuaJet_CaloPt4->Eval(pt4); + sig[1]=QuaJet_CaloPt4Down->Eval(pt4)-mu[1]; + // mu[2]=QuaJet_CSV3->Eval(CSV3); + // sig[2]=QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[2]=QuaJet_PFPt4->Eval(pt4); + sig[2]=QuaJet_PFPt4Down->Eval(pt4)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 0; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 0; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuad(float sumpt, float pt2, float pt4, float CSV1, float CSV2, float CSV3, float CSV4) { + float res = QaD_DoubleJet_L1->Eval(sumpt)*QaD_DoubleJet_PFPt2->Eval(pt2)*QaD_DoubleJet_CaloPt2->Eval(pt2);//*CSVn(3, CSV1, CSV2, CSV3, CSV4); + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadUp(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + + float mu[4], sig[4]; + // mu[0]=QaD_QuaJet_L1->Eval(sumpt); + // sig[0]=QaD_QuaJet_L1Up->Eval(sumpt)-mu[0]; + mu[1]=QaD_DoubleJet_CaloPt2->Eval(pt2); + sig[1]=QaD_DoubleJet_CaloPt2Up->Eval(pt2)-mu[1]; + // mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + // sig[2]=QaD_QuaJet_CSV3Up->Eval(CSV3)-mu[2]; + mu[2]=QaD_DoubleJet_PFPt2->Eval(pt2); + sig[2]=QaD_DoubleJet_PFPt2Up->Eval(pt2)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 1; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 1; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom + sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + +double QaD_TurnOnQuadDown(float sumpt, float pt2, float pt4, float CSV3) { + if(isnan(CSV3)) CSV3=0; + CSV3=CSV3>1?1:CSV3;CSV3=CSV3<-1?-1:CSV3; + CSV3 = -log(1-CSV3); + float mu[4], sig[4]; + // mu[0]=QaD_QuaJet_L1->Eval(sumpt); + // sig[0]=QaD_QuaJet_L1Down->Eval(sumpt)-mu[0]; + mu[1]=QaD_DoubleJet_CaloPt2->Eval(pt2); + sig[1]=QaD_DoubleJet_CaloPt2Down->Eval(pt2)-mu[1]; + // mu[2]=QaD_QuaJet_CSV3->Eval(CSV3); + // sig[2]=QaD_QuaJet_CSV3Down->Eval(CSV3)-mu[2]; + mu[2]=QaD_DoubleJet_PFPt2->Eval(pt2); + sig[2]=QaD_DoubleJet_PFPt2Down->Eval(pt2)-mu[2]; + + float sigma = 0, sigmaT, nom = 1; + for( int i = 1; i < 3; i++ ) + { + nom*=mu[i]; + sigmaT=sig[i]; + for( int j = 1; j < 3; j++ ) + if( i != j ) sigmaT*=mu[j]; + sigma+=sigmaT*sigmaT; + } + float res = nom - sqrt(sigma); + + if( res < 0 ) return 0; + return res; +} + + diff --git a/Datacards/22fb_regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..4aae3e4 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.128895: q_mu = 3.83478 q_A = 3.83588 CLsb = 0.02510 CLb = 0.50011 CLs = 0.05019 + + -- Asymptotic -- +Observed Limit: r < 0.1289 +Expected 2.5%: r < 0.0665 +Expected 16.0%: r < 0.0896 +Expected 50.0%: r < 0.1294 +Expected 84.0%: r < 0.1897 +Expected 97.5%: r < 0.2717 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..c1fce9f --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.440736: q_mu = 3.84850 q_A = 3.84854 CLsb = 0.02490 CLb = 0.50000 CLs = 0.04979 + + -- Asymptotic -- +Observed Limit: r < 0.4407 +Expected 2.5%: r < 0.2257 +Expected 16.0%: r < 0.3059 +Expected 50.0%: r < 0.4395 +Expected 84.0%: r < 0.6479 +Expected 97.5%: r < 0.9356 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_260_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_260_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..5ed9dfb --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_260_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 2.694713: q_mu = 3.83249 q_A = 3.83250 CLsb = 0.02513 CLb = 0.50000 CLs = 0.05027 + + -- Asymptotic -- +Observed Limit: r < 2.6947 +Expected 2.5%: r < 1.5108 +Expected 16.0%: r < 1.9643 +Expected 50.0%: r < 2.6953 +Expected 84.0%: r < 3.8234 +Expected 97.5%: r < 5.3094 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_270_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_270_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..d47ca8f --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_270_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Error when running the combination: + File /uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/Datacards/22fb_regression/LMR_260/datacard_270.txt does not exist diff --git a/Datacards/22fb_regression/CMS_HH4b_300_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_300_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..bdaf789 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_300_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 1.455056: q_mu = 3.85021 q_A = 3.85022 CLsb = 0.02487 CLb = 0.50000 CLs = 0.04974 + + -- Asymptotic -- +Observed Limit: r < 1.4551 +Expected 2.5%: r < 0.7379 +Expected 16.0%: r < 1.0089 +Expected 50.0%: r < 1.4531 +Expected 84.0%: r < 2.1192 +Expected 97.5%: r < 2.9905 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_350_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_350_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..d1225af --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_350_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.619167: q_mu = 3.85015 q_A = 3.85016 CLsb = 0.02487 CLb = 0.50000 CLs = 0.04974 + + -- Asymptotic -- +Observed Limit: r < 0.6192 +Expected 2.5%: r < 0.3084 +Expected 16.0%: r < 0.4237 +Expected 50.0%: r < 0.6191 +Expected 84.0%: r < 0.9276 +Expected 97.5%: r < 1.3641 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_400_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_400_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..44df378 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_400_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.279170: q_mu = 3.84841 q_A = 3.84843 CLsb = 0.02490 CLb = 0.50000 CLs = 0.04979 + + -- Asymptotic -- +Observed Limit: r < 0.2792 +Expected 2.5%: r < 0.1419 +Expected 16.0%: r < 0.1936 +Expected 50.0%: r < 0.2783 +Expected 84.0%: r < 0.4103 +Expected 97.5%: r < 0.5892 + +Done in 0.01 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_450_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_450_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..b00ebfb --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_450_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.121222: q_mu = 3.83891 q_A = 3.83892 CLsb = 0.02504 CLb = 0.50000 CLs = 0.05008 + + -- Asymptotic -- +Observed Limit: r < 0.1212 +Expected 2.5%: r < 0.0632 +Expected 16.0%: r < 0.0846 +Expected 50.0%: r < 0.1216 +Expected 84.0%: r < 0.1763 +Expected 97.5%: r < 0.2496 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_500_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_500_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..221eec3 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_500_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.086594: q_mu = 3.83331 q_A = 3.83332 CLsb = 0.02512 CLb = 0.50000 CLs = 0.05024 + + -- Asymptotic -- +Observed Limit: r < 0.0866 +Expected 2.5%: r < 0.0449 +Expected 16.0%: r < 0.0608 +Expected 50.0%: r < 0.0864 +Expected 84.0%: r < 0.1260 +Expected 97.5%: r < 0.1779 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_550_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_550_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..4ce2c53 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_550_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.065704: q_mu = 3.85329 q_A = 3.85330 CLsb = 0.02482 CLb = 0.50000 CLs = 0.04965 + + -- Asymptotic -- +Observed Limit: r < 0.0657 +Expected 2.5%: r < 0.0342 +Expected 16.0%: r < 0.0456 +Expected 50.0%: r < 0.0659 +Expected 84.0%: r < 0.0956 +Expected 97.5%: r < 0.1353 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_600_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_600_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..1038d07 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_600_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.050844: q_mu = 3.83508 q_A = 3.83508 CLsb = 0.02510 CLb = 0.50000 CLs = 0.05019 + + -- Asymptotic -- +Observed Limit: r < 0.0508 +Expected 2.5%: r < 0.0260 +Expected 16.0%: r < 0.0359 +Expected 50.0%: r < 0.0513 +Expected 84.0%: r < 0.0746 +Expected 97.5%: r < 0.1054 + +Done in 0.01 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_650_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_650_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..e5c588e --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_650_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.043879: q_mu = 3.82851 q_A = 3.82851 CLsb = 0.02519 CLb = 0.50000 CLs = 0.05039 + + -- Asymptotic -- +Observed Limit: r < 0.0439 +Expected 2.5%: r < 0.0226 +Expected 16.0%: r < 0.0311 +Expected 50.0%: r < 0.0444 +Expected 84.0%: r < 0.0639 +Expected 97.5%: r < 0.0915 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_700_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_700_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..32c0ada --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_700_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.041040: q_mu = 3.81836 q_A = 3.81855 CLsb = 0.02535 CLb = 0.50002 CLs = 0.05069 + + -- Asymptotic -- +Observed Limit: r < 0.0410 +Expected 2.5%: r < 0.0211 +Expected 16.0%: r < 0.0291 +Expected 50.0%: r < 0.0415 +Expected 84.0%: r < 0.0604 +Expected 97.5%: r < 0.0858 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_750_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_750_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..c9af92d --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_750_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.040331: q_mu = 3.82162 q_A = 3.82163 CLsb = 0.02530 CLb = 0.50000 CLs = 0.05060 + + -- Asymptotic -- +Observed Limit: r < 0.0403 +Expected 2.5%: r < 0.0209 +Expected 16.0%: r < 0.0286 +Expected 50.0%: r < 0.0405 +Expected 84.0%: r < 0.0589 +Expected 97.5%: r < 0.0843 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_800_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_800_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..0ea8a1d --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_800_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.046281: q_mu = 3.83051 q_A = 3.83054 CLsb = 0.02516 CLb = 0.50000 CLs = 0.05033 + + -- Asymptotic -- +Observed Limit: r < 0.0463 +Expected 2.5%: r < 0.0236 +Expected 16.0%: r < 0.0325 +Expected 50.0%: r < 0.0464 +Expected 84.0%: r < 0.0682 +Expected 97.5%: r < 0.0969 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/CMS_HH4b_900_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/CMS_HH4b_900_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..2534bf4 --- /dev/null +++ b/Datacards/22fb_regression/CMS_HH4b_900_13TeV_asymptoticCLs.out @@ -0,0 +1,11 @@ +At r = 0.076959: q_mu = 3.84924 q_A = 3.84924 CLsb = 0.02488 CLb = 0.50000 CLs = 0.04977 + + -- Asymptotic -- +Observed Limit: r < 0.0770 +Expected 2.5%: r < 0.0392 +Expected 16.0%: r < 0.0536 +Expected 50.0%: r < 0.0767 +Expected 84.0%: r < 0.1130 +Expected 97.5%: r < 0.1613 + +Done in 0.00 min (cpu), 0.01 min (real) diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_260_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_260_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..e22b09f --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_260_13TeV_asymptoticCLs.out @@ -0,0 +1,7 @@ +erved Limit: r < 2.4949 +Expected 2.5%: r < 1.3775 +Expected 16.0%: r < 1.8042 +Expected 50.0%: r < 2.4922 +Expected 84.0%: r < 3.5154 +Expected 97.5%: r < 4.8009 + diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_270_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_270_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..8cc53c3 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_270_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +Observed Limit: r < 2.0726 +Expected 2.5%: r < 1.0715 +Expected 16.0%: r < 1.4500 +Expected 50.0%: r < 2.0703 +Expected 84.0%: r < 3.0028 +Expected 97.5%: r < 4.2247 diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_300_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_300_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..b445bb4 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_300_13TeV_asymptoticCLs.out @@ -0,0 +1,7 @@ +Observed Limit: r < 1.3419 +Expected 2.5%: r < 0.6776 +Expected 16.0%: r < 0.9277 +Expected 50.0%: r < 1.3242 +Expected 84.0%: r < 1.9312 +Expected 97.5%: r < 2.7416 + diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..e588e53 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out @@ -0,0 +1,7 @@ +Observed Limit: r < 0.5583 +Expected 2.5%: r < 0.2861 +Expected 16.0%: r < 0.3871 +Expected 50.0%: r < 0.5527 +Expected 84.0%: r < 0.8017 +Expected 97.5%: r < 1.1279 + diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..3206e27 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +Observed Limit: r < 0.3332 +Expected 2.5%: r < 0.1737 +Expected 16.0%: r < 0.2340 +Expected 50.0%: r < 0.3330 +Expected 84.0%: r < 0.4830 +Expected 97.5%: r < 0.6795 diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..34ae01d --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out @@ -0,0 +1,7 @@ +Observed Limit: r < 0.2447 +Expected 2.5%: r < 0.1288 +Expected 16.0%: r < 0.1729 +Expected 50.0%: r < 0.2451 +Expected 84.0%: r < 0.3516 +Expected 97.5%: r < 0.4947 + diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_lumi.h b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_lumi.h new file mode 100644 index 0000000..cc2e1d5 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/CMS_lumi.h @@ -0,0 +1,40 @@ +#include "TPad.h" +#include "TLatex.h" +#include "TLine.h" +#include "TBox.h" +#include "TASImage.h" + +// +// Global variables +// + +TString cmsText = "CMS"; +float cmsTextFont = 61; // default is helvetic-bold + +bool writeExtraText = false; +TString extraText = "Preliminary"; +float extraTextFont = 52; // default is helvetica-italics + +// text sizes and text offsets with respect to the top frame +// in unit of the top margin size +float lumiTextSize = 0.4; +float lumiTextOffset = 0.2; +float cmsTextSize = 0.475; +float cmsTextOffset = 0.1; // only used in outOfFrame version + +float relPosX = 0.045; +float relPosY = 0.035; +float relExtraDY = 1.2; + +// ratio of "CMS" and extra text size +float extraOverCmsTextSize = 0.76; + +TString lumi_13TeV = "20.1 fb^{-1}"; +TString lumi_8TeV = "19.7 fb^{-1}"; +TString lumi_7TeV = "5.1 fb^{-1}"; +TString lumi_sqrtS = ""; + +bool drawLogo = false; + +void CMS_lumi( TPad* pad, int iPeriod=3, int iPosX=10 ); + diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.png b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.png new file mode 100644 index 0000000..3de37f1 Binary files /dev/null and b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.png differ diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.root b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.root new file mode 100644 index 0000000..f1b7767 Binary files /dev/null and b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimit.root differ diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimits_xsec.root b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimits_xsec.root new file mode 100644 index 0000000..f778b33 Binary files /dev/null and b/Datacards/22fb_regression/LMRSelection_chi2_Regression/UpperLimits_xsec.root differ diff --git a/Datacards/22fb_regression/LMRSelection_chi2_Regression/draw_limits.c b/Datacards/22fb_regression/LMRSelection_chi2_Regression/draw_limits.c new file mode 100644 index 0000000..2e6c913 --- /dev/null +++ b/Datacards/22fb_regression/LMRSelection_chi2_Regression/draw_limits.c @@ -0,0 +1,5 @@ +{ + std::vector masses={260,270,300, 350, 400, 450}; + gROOT->LoadMacro("../../DrawLimitPlot.cc++"); + DrawLimitPlot(masses, 10, 1e5); +} diff --git a/Datacards/22fb_regression/LMR_260/CMS_HH4b_260_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_260/CMS_HH4b_260_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_260/CMS_HH4b_260_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_260/c_H1_mass_260.png b/Datacards/22fb_regression/LMR_260/c_H1_mass_260.png new file mode 100644 index 0000000..2db2eb4 Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/c_H1_mass_260.png differ diff --git a/Datacards/22fb_regression/LMR_260/c_H2_mass_260.png b/Datacards/22fb_regression/LMR_260/c_H2_mass_260.png new file mode 100644 index 0000000..bf3b61a Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/c_H2_mass_260.png differ diff --git a/Datacards/22fb_regression/LMR_260/c_mX_SR_260.png b/Datacards/22fb_regression/LMR_260/c_mX_SR_260.png new file mode 100644 index 0000000..d2e5b86 Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/c_mX_SR_260.png differ diff --git a/Datacards/22fb_regression/LMR_260/c_mX_SR_KinFit_260.png b/Datacards/22fb_regression/LMR_260/c_mX_SR_KinFit_260.png new file mode 100644 index 0000000..77ea2ee Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/c_mX_SR_KinFit_260.png differ diff --git a/Datacards/22fb_regression/LMR_260/data_bkg.log b/Datacards/22fb_regression/LMR_260/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_260/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_260/datacard_260.root b/Datacards/22fb_regression/LMR_260/datacard_260.root new file mode 100644 index 0000000..46897bd Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/datacard_260.root differ diff --git a/Datacards/22fb_regression/LMR_260/datacard_260.txt b/Datacards/22fb_regression/LMR_260/datacard_260.txt new file mode 100644 index 0000000..e6f0574 --- /dev/null +++ b/Datacards/22fb_regression/LMR_260/datacard_260.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_260.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 88.8845 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_260/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_260/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..5dc6411 Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_260/index.html b/Datacards/22fb_regression/LMR_260/index.html new file mode 100644 index 0000000..9aa7dec --- /dev/null +++ b/Datacards/22fb_regression/LMR_260/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 260

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 88.8845
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_260/signal260_sig.log b/Datacards/22fb_regression/LMR_260/signal260_sig.log new file mode 100644 index 0000000..8e8cd2c --- /dev/null +++ b/Datacards/22fb_regression/LMR_260/signal260_sig.log @@ -0,0 +1,172 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",260,"true")... +nSignal_init = 300000 + here 6430 + here 2016 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=5603.8 FROM MIGRAD STATUS=INITIATE 43 CALLS 44 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.50000e+02 4.00000e+00 0.00000e+00 -4.55531e+02 + 2 sg_p1 1.35000e+01 2.30000e+00 0.00000e+00 -1.44296e+02 + 3 sg_p2 3.00000e+02 5.80000e+01 0.00000e+00 1.25040e+02 + 4 sg_p3 7.19542e+01 2.90000e+01 -6.09832e-01 3.08398e+01 + 5 sg_p4 7.50000e-01 5.00000e-02 0.00000e+00 -4.76097e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5506.77 FROM MIGRAD STATUS=CONVERGED 182 CALLS 183 TOTAL + EDM=3.05422e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.56418e+02 5.27184e-01 1.39539e-03 -7.46654e-02 + 2 sg_p1 1.56066e+01 4.38800e-01 1.81314e-03 -9.48716e-03 + 3 sg_p2 3.11749e+02 1.40520e+01 1.61879e-03 1.16019e-01 + 4 sg_p3 8.10747e+01 7.87484e+00 2.48050e-03 3.87437e-03 + 5 sg_p4 8.72191e-01 1.55879e-02 2.87689e-03 -9.59841e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.780e-01 3.309e-02 -1.408e-01 4.382e-01 8.129e-04 + 3.309e-02 1.926e-01 1.744e+00 -2.758e-01 2.558e-03 + -1.408e-01 1.744e+00 1.976e+02 -6.926e+01 1.235e-01 + 4.382e-01 -2.758e-01 -6.926e+01 6.210e+01 -2.976e-02 + 8.129e-04 2.558e-03 1.235e-01 -2.976e-02 2.434e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.20236 1.000 0.143 -0.019 0.105 0.099 + 2 0.40655 0.143 1.000 0.283 -0.080 0.374 + 3 0.76053 -0.019 0.283 1.000 -0.625 0.563 + 4 0.64646 0.105 -0.080 -0.625 1.000 -0.242 + 5 0.61975 0.099 0.374 0.563 -0.242 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5506.77 FROM HESSE STATUS=OK 31 CALLS 214 TOTAL + EDM=3.1086e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 2.56418e+02 5.27180e-01 2.79078e-04 3.26689e-01 + 2 sg_p1 1.56066e+01 4.39039e-01 7.25255e-05 1.84219e-01 + 3 sg_p2 3.11749e+02 1.41946e+01 3.23758e-04 4.05256e-02 + 4 sg_p3 8.10747e+01 7.95230e+00 9.92201e-05 -5.34987e-01 + 5 sg_p4 8.72191e-01 1.56289e-02 1.15076e-04 5.10673e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.780e-01 3.282e-02 -1.575e-01 4.457e-01 8.027e-04 + 3.282e-02 1.929e-01 1.774e+00 -2.956e-01 2.575e-03 + -1.575e-01 1.774e+00 2.016e+02 -7.171e+01 1.258e-01 + 4.457e-01 -2.956e-01 -7.171e+01 6.333e+01 -3.121e-02 + 8.027e-04 2.575e-03 1.258e-01 -3.121e-02 2.447e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.20233 1.000 0.142 -0.021 0.106 0.097 + 2 0.40766 0.142 1.000 0.284 -0.085 0.375 + 3 0.76605 -0.021 0.284 1.000 -0.635 0.566 + 4 0.65514 0.106 -0.085 -0.635 1.000 -0.251 + 5 0.62235 0.097 0.375 0.566 -0.251 1.000 +260 +256.418 +- 0.52718 +15.6066 +- 0.439039 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=4819.61 FROM MIGRAD STATUS=INITIATE 45 CALLS 46 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.60000e+02 2.00000e+00 0.00000e+00 -4.18687e+02 + 2 sg_p1 4.00000e+00 4.00000e-01 0.00000e+00 -5.80578e+01 + 3 sg_p2 2.99000e+02 5.82000e+01 0.00000e+00 1.93236e+02 + 4 sg_p3 6.45894e+01 2.90000e+01 -6.73239e-01 -1.12462e+01 + 5 sg_p4 7.50000e-01 5.00000e-02 0.00000e+00 1.07906e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4726.8 FROM MIGRAD STATUS=CONVERGED 307 CALLS 308 TOTAL + EDM=2.18444e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.60897e+02 1.63957e-01 7.76835e-04 -5.41389e-02 + 2 sg_p1 3.91594e+00 1.44636e-01 3.41949e-03 1.92792e-02 + 3 sg_p2 8.00054e+00 4.96221e+01 2.75213e-02 5.54615e-03 + 4 sg_p3 1.37909e+02 3.43675e+00 1.11670e-03 8.20855e-02 + 5 sg_p4 5.00000e-01 6.39733e-03 1.07661e-02** at limit ** + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.688e-02 2.629e-03 -8.493e-05 -8.463e-03 4.753e-09 + 2.629e-03 2.096e-02 -1.595e-04 -1.077e-04 2.280e-08 + -8.493e-05 -1.595e-04 1.112e-01 -1.938e-01 2.343e-09 + -8.463e-03 -1.077e-04 -1.938e-01 1.181e+01 1.034e-06 + 4.753e-09 2.280e-08 2.343e-09 1.034e-06 1.157e-09 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.11184 1.000 0.111 -0.002 -0.015 0.001 + 2 0.11090 0.111 1.000 -0.003 -0.000 0.005 + 3 0.16919 -0.002 -0.003 1.000 -0.169 0.000 + 4 0.17003 -0.015 -0.000 -0.169 1.000 0.009 + 5 0.01015 0.001 0.005 0.000 0.009 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4726.8 FROM HESSE STATUS=OK 31 CALLS 339 TOTAL + EDM=2.33316e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 2.60897e+02 1.63938e-01 1.55367e-04 8.97998e-02 + 2 sg_p1 3.91594e+00 1.44618e-01 6.83898e-04 -4.20415e-02 + 3 sg_p2 8.00054e+00 4.94170e+01 5.50426e-03 -1.56886e+00 + 4 sg_p3 1.37909e+02 3.39158e+00 2.23340e-04 -1.18145e-01 + 5 sg_p4 5.00000e-01 6.39824e-03 2.15322e-03 -1.57140e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.688e-02 2.604e-03 -2.499e-05 -8.608e-03 4.734e-10 + 2.604e-03 2.095e-02 -4.717e-05 -3.920e-04 2.274e-09 + -2.499e-05 -4.717e-05 1.107e-01 -5.776e-02 6.782e-11 + -8.608e-03 -3.920e-04 -5.776e-02 1.150e+01 1.035e-07 + 4.734e-10 2.274e-09 6.782e-11 1.035e-07 1.157e-09 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.11083 1.000 0.110 -0.000 -0.015 0.000 + 2 0.10976 0.110 1.000 -0.001 -0.001 0.000 + 3 0.05120 -0.000 -0.001 1.000 -0.051 0.000 + 4 0.05349 -0.015 -0.001 -0.051 1.000 0.001 + 5 0.00101 0.000 0.000 0.000 0.001 1.000 +260 +260.897 +- 0.163938 +3.91594 +- 0.144618 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_260/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_260/w_background_GaussExp.root new file mode 100644 index 0000000..7be1ebd Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_260/w_data.root b/Datacards/22fb_regression/LMR_260/w_data.root new file mode 100644 index 0000000..08eeba8 Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_260/w_signal_260.root b/Datacards/22fb_regression/LMR_260/w_signal_260.root new file mode 100644 index 0000000..47781f6 Binary files /dev/null and b/Datacards/22fb_regression/LMR_260/w_signal_260.root differ diff --git a/Datacards/22fb_regression/LMR_270/CMS_HH4b_270_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_270/CMS_HH4b_270_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_270/CMS_HH4b_270_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_270/c_H1_mass_270.png b/Datacards/22fb_regression/LMR_270/c_H1_mass_270.png new file mode 100644 index 0000000..f8983e3 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/c_H1_mass_270.png differ diff --git a/Datacards/22fb_regression/LMR_270/c_H2_mass_270.png b/Datacards/22fb_regression/LMR_270/c_H2_mass_270.png new file mode 100644 index 0000000..380868c Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/c_H2_mass_270.png differ diff --git a/Datacards/22fb_regression/LMR_270/c_mX_SR_270.png b/Datacards/22fb_regression/LMR_270/c_mX_SR_270.png new file mode 100644 index 0000000..ff252f4 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/c_mX_SR_270.png differ diff --git a/Datacards/22fb_regression/LMR_270/c_mX_SR_KinFit_270.png b/Datacards/22fb_regression/LMR_270/c_mX_SR_KinFit_270.png new file mode 100644 index 0000000..a1b31e4 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/c_mX_SR_KinFit_270.png differ diff --git a/Datacards/22fb_regression/LMR_270/data_bkg.log b/Datacards/22fb_regression/LMR_270/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_270/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_270/datacard_270.root b/Datacards/22fb_regression/LMR_270/datacard_270.root new file mode 100644 index 0000000..2a2ddb2 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/datacard_270.root differ diff --git a/Datacards/22fb_regression/LMR_270/datacard_270.txt b/Datacards/22fb_regression/LMR_270/datacard_270.txt new file mode 100644 index 0000000..6d36780 --- /dev/null +++ b/Datacards/22fb_regression/LMR_270/datacard_270.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_270.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 96.5742 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_270/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_270/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..51223e9 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_270/index.html b/Datacards/22fb_regression/LMR_270/index.html new file mode 100644 index 0000000..5d73e4f --- /dev/null +++ b/Datacards/22fb_regression/LMR_270/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 270

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 96.5742
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_270/signal270_sig.log b/Datacards/22fb_regression/LMR_270/signal270_sig.log new file mode 100644 index 0000000..04e0555 --- /dev/null +++ b/Datacards/22fb_regression/LMR_270/signal270_sig.log @@ -0,0 +1,173 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",270,"true")... +nSignal_init = 300000 + here 6968 + here 2189 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=6236.54 FROM MIGRAD STATUS=INITIATE 45 CALLS 46 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.65000e+02 3.00000e+00 0.00000e+00 1.31049e+02 + 2 sg_p1 8.50000e+00 1.30000e+00 0.00000e+00 -6.04174e+02 + 3 sg_p2 2.70000e+02 5.20000e+01 0.00000e+00 1.18145e+02 + 4 sg_p3 7.58589e+01 2.90000e+01 -5.77344e-01 1.42920e+01 + 5 sg_p4 7.50000e-01 5.00000e-02 0.00000e+00 1.17079e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5957.33 FROM MIGRAD STATUS=CONVERGED 235 CALLS 236 TOTAL + EDM=1.77337e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.63404e+02 4.74436e-01 1.67683e-03 -9.05697e-03 + 2 sg_p1 1.50000e+01 4.83005e-02 6.48913e-03** at limit ** + 3 sg_p2 3.32685e+02 1.29322e+01 1.97261e-03 -1.04906e-02 + 4 sg_p3 8.03625e+01 7.68616e+00 2.74557e-03 3.40438e-03 + 5 sg_p4 8.92902e-01 1.28749e-02 2.78112e-03 -9.95832e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.252e-01 -3.174e-08 -9.397e-02 3.699e-01 4.689e-04 + -3.174e-08 3.723e-09 -2.184e-06 4.460e-07 -2.545e-09 + -9.397e-02 -2.184e-06 1.674e+02 -5.542e+01 9.122e-02 + 3.699e-01 4.460e-07 -5.542e+01 5.915e+01 -2.545e-02 + 4.689e-04 -2.545e-09 9.122e-02 -2.545e-02 1.660e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.14696 1.000 -0.001 -0.015 0.101 0.077 + 2 0.00360 -0.001 1.000 -0.003 0.001 -0.003 + 3 0.69651 -0.015 -0.003 1.000 -0.557 0.547 + 4 0.56667 0.101 0.001 -0.557 1.000 -0.257 + 5 0.55597 0.077 -0.003 0.547 -0.257 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5957.33 FROM HESSE STATUS=OK 31 CALLS 267 TOTAL + EDM=1.79922e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 2.63404e+02 4.74470e-01 3.35366e-04 -1.06581e-01 + 2 sg_p1 1.50000e+01 4.83026e-02 1.29783e-03 1.57072e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + 3 sg_p2 3.32685e+02 1.30474e+01 7.89045e-05 2.43493e-01 + 4 sg_p3 8.03625e+01 7.75263e+00 1.09823e-04 -5.40706e-01 + 5 sg_p4 8.92902e-01 1.29095e-02 1.11245e-04 6.08466e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 2.252e-01 -5.671e-09 -1.069e-01 3.758e-01 4.620e-04 + -5.671e-09 3.723e-09 -3.999e-07 8.495e-08 -4.621e-10 + -1.069e-01 -3.999e-07 1.704e+02 -5.746e+01 9.286e-02 + 3.758e-01 8.495e-08 -5.746e+01 6.018e+01 -2.660e-02 + 4.620e-04 -4.621e-10 9.286e-02 -2.660e-02 1.669e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.14744 1.000 -0.000 -0.017 0.102 0.075 + 2 0.00065 -0.000 1.000 -0.001 0.000 -0.001 + 3 0.70299 -0.017 -0.001 1.000 -0.567 0.551 + 4 0.57681 0.102 0.000 -0.567 1.000 -0.265 + 5 0.55928 0.075 -0.001 0.551 -0.265 1.000 +270 +263.404 +- 0.47447 +15 +- 0.0483026 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=5270.81 FROM MIGRAD STATUS=INITIATE 43 CALLS 44 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.70000e+02 2.00000e+00 0.00000e+00 -1.04254e+02 + 2 sg_p1 5.00000e+00 6.00000e-01 0.00000e+00 -1.29927e+02 + 3 sg_p2 2.69500e+02 5.21000e+01 0.00000e+00 1.76277e+01 + 4 sg_p3 8.11292e+01 2.90000e+01 -5.34550e-01 1.03589e+00 + 5 sg_p4 7.50000e-01 5.00000e-02 0.00000e+00 8.64531e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5229.03 FROM MIGRAD STATUS=CONVERGED 314 CALLS 315 TOTAL + EDM=5.31331e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.70478e+02 2.07956e-01 1.03779e-03 1.21522e-01 + 2 sg_p1 5.41557e+00 2.01193e-01 2.96846e-03 -1.39508e-02 + 3 sg_p2 9.00006e+00 5.55906e+01 3.28304e-02** at limit ** + 4 sg_p3 1.43911e+02 5.16817e+00 1.30435e-03 2.53898e-01 + 5 sg_p4 5.56904e-01 2.80033e-02 6.04135e-03 -2.14096e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 4.325e-02 1.472e-03 -4.553e-05 -3.507e-02 -6.913e-05 + 1.472e-03 4.054e-02 1.354e-04 3.353e-01 2.708e-03 + -4.553e-05 1.354e-04 1.400e-02 -6.927e-02 6.471e-05 + -3.507e-02 3.353e-01 -6.927e-02 2.672e+01 9.758e-02 + -6.913e-05 2.708e-03 6.471e-05 9.758e-02 7.925e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.05887 1.000 0.035 -0.002 -0.033 -0.012 + 2 0.47960 0.035 1.000 0.006 0.322 0.478 + 3 0.17149 -0.002 0.006 1.000 -0.113 0.019 + 4 0.68283 -0.033 0.322 -0.113 1.000 0.671 + 5 0.73019 -0.012 0.478 0.019 0.671 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=5229.03 FROM HESSE STATUS=OK 31 CALLS 346 TOTAL + EDM=5.3987e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 2.70478e+02 2.07947e-01 2.07559e-04 4.78046e-02 + 2 sg_p1 5.41557e+00 2.00968e-01 1.18738e-04 1.38972e-01 + 3 sg_p2 9.00006e+00 5.55059e+01 1.31322e-03 -1.57011e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + 4 sg_p3 1.43911e+02 5.12399e+00 2.60870e-04 -7.65491e-02 + 5 sg_p4 5.56904e-01 2.79291e-02 2.41654e-04 -8.82584e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 4.325e-02 1.439e-03 -3.497e-06 -3.533e-02 -6.908e-05 + 1.439e-03 4.045e-02 9.947e-06 3.327e-01 2.688e-03 + -3.497e-06 9.947e-06 1.398e-02 -5.458e-03 4.876e-06 + -3.533e-02 3.327e-01 -5.458e-03 2.627e+01 9.719e-02 + -6.908e-05 2.688e-03 4.876e-06 9.719e-02 7.882e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.05816 1.000 0.034 -0.000 -0.033 -0.012 + 2 0.47779 0.034 1.000 0.000 0.323 0.476 + 3 0.01365 -0.000 0.000 1.000 -0.009 0.001 + 4 0.67603 -0.033 0.323 -0.009 1.000 0.675 + 5 0.72847 -0.012 0.476 0.001 0.675 1.000 +270 +270.478 +- 0.207947 +5.41557 +- 0.200968 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_270/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_270/w_background_GaussExp.root new file mode 100644 index 0000000..b93ef64 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_270/w_data.root b/Datacards/22fb_regression/LMR_270/w_data.root new file mode 100644 index 0000000..2dc3f05 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_270/w_signal_270.root b/Datacards/22fb_regression/LMR_270/w_signal_270.root new file mode 100644 index 0000000..c2d9f36 Binary files /dev/null and b/Datacards/22fb_regression/LMR_270/w_signal_270.root differ diff --git a/Datacards/22fb_regression/LMR_300/CMS_HH4b_300_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_300/CMS_HH4b_300_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_300/CMS_HH4b_300_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_300/c_H1_mass_300.png b/Datacards/22fb_regression/LMR_300/c_H1_mass_300.png new file mode 100644 index 0000000..54de2a7 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/c_H1_mass_300.png differ diff --git a/Datacards/22fb_regression/LMR_300/c_H2_mass_300.png b/Datacards/22fb_regression/LMR_300/c_H2_mass_300.png new file mode 100644 index 0000000..5e6bbca Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/c_H2_mass_300.png differ diff --git a/Datacards/22fb_regression/LMR_300/c_mX_SR_300.png b/Datacards/22fb_regression/LMR_300/c_mX_SR_300.png new file mode 100644 index 0000000..454c2af Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/c_mX_SR_300.png differ diff --git a/Datacards/22fb_regression/LMR_300/c_mX_SR_KinFit_300.png b/Datacards/22fb_regression/LMR_300/c_mX_SR_KinFit_300.png new file mode 100644 index 0000000..266bfe5 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/c_mX_SR_KinFit_300.png differ diff --git a/Datacards/22fb_regression/LMR_300/data_bkg.log b/Datacards/22fb_regression/LMR_300/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_300/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_300/datacard_300.root b/Datacards/22fb_regression/LMR_300/datacard_300.root new file mode 100644 index 0000000..90cae61 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/datacard_300.root differ diff --git a/Datacards/22fb_regression/LMR_300/datacard_300.txt b/Datacards/22fb_regression/LMR_300/datacard_300.txt new file mode 100644 index 0000000..d1df376 --- /dev/null +++ b/Datacards/22fb_regression/LMR_300/datacard_300.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_300.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 143.436 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_300/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_300/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..7c52ae4 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_300/index.html b/Datacards/22fb_regression/LMR_300/index.html new file mode 100644 index 0000000..aa1827c --- /dev/null +++ b/Datacards/22fb_regression/LMR_300/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 300

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 143.436
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_300/signal300_sig.log b/Datacards/22fb_regression/LMR_300/signal300_sig.log new file mode 100644 index 0000000..56d0d21 --- /dev/null +++ b/Datacards/22fb_regression/LMR_300/signal300_sig.log @@ -0,0 +1,171 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",300,"true")... +nSignal_init = 292800 + here 9992 + here 3202 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=8491.89 FROM MIGRAD STATUS=INITIATE 44 CALLS 45 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.85000e+02 7.00000e+00 0.00000e+00 2.40084e+00 + 2 sg_p1 2.00000e+01 3.00000e+00 0.00000e+00 1.21207e+02 + 3 sg_p2 3.05000e+02 1.10000e+01 0.00000e+00 2.45947e+02 + 4 sg_p3 2.74053e+01 1.20000e+01 -7.89372e-01 -1.13467e+01 + 5 sg_p4 5.00000e-01 1.00000e-01 0.00000e+00 -1.22511e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8418.56 FROM MIGRAD STATUS=CONVERGED 321 CALLS 322 TOTAL + EDM=6.30687e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 2.89702e+02 5.65770e-01 9.32332e-04 6.85116e-03 + 2 sg_p1 1.97448e+01 5.27054e-01 1.65464e-03 1.41530e-03 + 3 sg_p2 3.34495e+02 1.48598e+01 1.10298e-02 7.92311e-04 + 4 sg_p3 5.03875e+01 8.11345e+00 7.35773e-03 -1.84049e-02 + 5 sg_p4 9.15237e-01 2.00105e-02 2.44719e-03 5.32148e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.201e-01 4.702e-02 1.311e+00 1.759e+00 1.930e-03 + 4.702e-02 2.779e-01 4.660e+00 5.293e-01 6.939e-03 + 1.311e+00 4.660e+00 2.288e+02 4.931e+01 2.399e-01 + 1.759e+00 5.293e-01 4.931e+01 6.628e+01 2.591e-02 + 1.930e-03 6.939e-03 2.399e-01 2.591e-02 4.011e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.43138 1.000 0.158 0.153 0.382 0.170 + 2 0.66907 0.158 1.000 0.584 0.123 0.657 + 3 0.84800 0.153 0.584 1.000 0.400 0.792 + 4 0.59226 0.382 0.123 0.400 1.000 0.159 + 5 0.84330 0.170 0.657 0.792 0.159 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8418.56 FROM HESSE STATUS=OK 31 CALLS 353 TOTAL + EDM=6.30027e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 2.89702e+02 5.65392e-01 1.86466e-04 1.34748e-01 + 2 sg_p1 1.97448e+01 5.29243e-01 6.61856e-05 -1.70159e-02 + 3 sg_p2 3.34495e+02 1.48895e+01 4.41191e-04 5.66021e-01 + 4 sg_p3 5.03875e+01 8.06300e+00 2.94309e-04 -3.32995e-01 + 5 sg_p4 9.15237e-01 2.01813e-02 9.78874e-05 9.79957e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.197e-01 4.472e-02 1.222e+00 1.741e+00 1.824e-03 + 4.472e-02 2.802e-01 4.719e+00 4.599e-01 7.066e-03 + 1.222e+00 4.719e+00 2.297e+02 4.644e+01 2.433e-01 + 1.741e+00 4.599e-01 4.644e+01 6.545e+01 2.257e-02 + 1.824e-03 7.066e-03 2.433e-01 2.257e-02 4.080e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.43011 1.000 0.149 0.143 0.380 0.160 + 2 0.67247 0.149 1.000 0.588 0.107 0.661 + 3 0.84868 0.143 0.588 1.000 0.379 0.795 + 4 0.58533 0.380 0.107 0.379 1.000 0.138 + 5 0.84619 0.160 0.661 0.795 0.138 1.000 +300 +289.702 +- 0.565392 +19.7448 +- 0.529243 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=8424.03 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.05000e+02 3.00000e+00 2.01358e-01 9.29247e+02 + 2 sg_p1 7.00000e+00 4.00000e-01 2.01358e-01 -3.40644e+01 + 3 sg_p2 2.65000e+02 1.90000e+01 2.01358e-01 -3.70923e+01 + 4 sg_p3 7.00000e+01 1.20000e+01 2.01358e-01 -1.93538e+02 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -1.07893e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8233.99 FROM MIGRAD STATUS=CONVERGED 232 CALLS 233 TOTAL + EDM=2.97208e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.00977e+02 2.48108e-01 1.07232e-03 6.81022e-03 + 2 sg_p1 7.71660e+00 2.47667e-01 7.41922e-03 -2.58728e-02 + 3 sg_p2 1.70000e+02 1.95472e+01 3.86204e-02 4.90878e-03 + 4 sg_p3 1.24133e+02 3.70018e+00 8.07523e-03 1.22390e-02 + 5 sg_p4 6.08707e-01 1.84264e-02 1.93018e-03 9.91701e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 6.156e-02 -3.476e-03 -8.964e-05 -6.278e-02 -3.163e-04 + -3.476e-03 6.170e-02 -1.217e-05 2.008e-01 2.096e-03 + -8.964e-05 -1.217e-05 1.676e-02 -5.218e-02 3.758e-05 + -6.278e-02 2.008e-01 -5.218e-02 1.379e+01 3.011e-02 + -3.163e-04 2.096e-03 3.758e-05 3.011e-02 3.397e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.08561 1.000 -0.056 -0.003 -0.068 -0.069 + 2 0.45875 -0.056 1.000 -0.000 0.218 0.458 + 3 0.12989 -0.003 -0.000 1.000 -0.109 0.016 + 4 0.45680 -0.068 0.218 -0.109 1.000 0.440 + 5 0.57851 -0.069 0.458 0.016 0.440 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8233.99 FROM HESSE STATUS=OK 31 CALLS 264 TOTAL + EDM=3.03235e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 3.00977e+02 2.48140e-01 4.28927e-05 -2.71508e-01 + 2 sg_p1 7.71660e+00 2.47958e-01 1.48384e-03 3.66448e-01 + 3 sg_p2 1.70000e+02 1.95218e+01 7.72407e-03 -1.56871e+00 + 4 sg_p3 1.24133e+02 3.68966e+00 3.23009e-04 1.12488e+00 + 5 sg_p4 6.08707e-01 1.84788e-02 3.86035e-04 2.19165e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 6.158e-02 -3.598e-03 -2.302e-05 -6.417e-02 -3.217e-04 + -3.598e-03 6.185e-02 -8.983e-06 2.042e-01 2.113e-03 + -2.302e-05 -8.983e-06 1.674e-02 -1.475e-02 9.566e-06 + -6.417e-02 2.042e-01 -1.475e-02 1.371e+01 3.069e-02 + -3.217e-04 2.113e-03 9.566e-06 3.069e-02 3.416e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.08707 1.000 -0.058 -0.001 -0.070 -0.070 + 2 0.46078 -0.058 1.000 -0.000 0.222 0.460 + 3 0.03677 -0.001 -0.000 1.000 -0.031 0.004 + 4 0.45167 -0.070 0.222 -0.031 1.000 0.449 + 5 0.58176 -0.070 0.460 0.004 0.449 1.000 +300 +300.977 +- 0.24814 +7.7166 +- 0.247958 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_300/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_300/w_background_GaussExp.root new file mode 100644 index 0000000..e12f0da Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_300/w_data.root b/Datacards/22fb_regression/LMR_300/w_data.root new file mode 100644 index 0000000..bfd43b1 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_300/w_signal_300.root b/Datacards/22fb_regression/LMR_300/w_signal_300.root new file mode 100644 index 0000000..a728ae6 Binary files /dev/null and b/Datacards/22fb_regression/LMR_300/w_signal_300.root differ diff --git a/Datacards/22fb_regression/LMR_350/CMS_HH4b_350_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_350/CMS_HH4b_350_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_350/CMS_HH4b_350_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_350/c_H1_mass_350.png b/Datacards/22fb_regression/LMR_350/c_H1_mass_350.png new file mode 100644 index 0000000..ad32969 Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/c_H1_mass_350.png differ diff --git a/Datacards/22fb_regression/LMR_350/c_H2_mass_350.png b/Datacards/22fb_regression/LMR_350/c_H2_mass_350.png new file mode 100644 index 0000000..b1e4cad Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/c_H2_mass_350.png differ diff --git a/Datacards/22fb_regression/LMR_350/c_mX_SR_350.png b/Datacards/22fb_regression/LMR_350/c_mX_SR_350.png new file mode 100644 index 0000000..911b281 Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/c_mX_SR_350.png differ diff --git a/Datacards/22fb_regression/LMR_350/c_mX_SR_KinFit_350.png b/Datacards/22fb_regression/LMR_350/c_mX_SR_KinFit_350.png new file mode 100644 index 0000000..c80aa44 Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/c_mX_SR_KinFit_350.png differ diff --git a/Datacards/22fb_regression/LMR_350/data_bkg.log b/Datacards/22fb_regression/LMR_350/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_350/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_350/datacard_350.root b/Datacards/22fb_regression/LMR_350/datacard_350.root new file mode 100644 index 0000000..e67f801 Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/datacard_350.root differ diff --git a/Datacards/22fb_regression/LMR_350/datacard_350.txt b/Datacards/22fb_regression/LMR_350/datacard_350.txt new file mode 100644 index 0000000..309c42f --- /dev/null +++ b/Datacards/22fb_regression/LMR_350/datacard_350.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_350.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 259.525 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_350/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_350/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..36c698a Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_350/index.html b/Datacards/22fb_regression/LMR_350/index.html new file mode 100644 index 0000000..bf13f06 --- /dev/null +++ b/Datacards/22fb_regression/LMR_350/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 350

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 259.525
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_350/signal350_sig.log b/Datacards/22fb_regression/LMR_350/signal350_sig.log new file mode 100644 index 0000000..504288e --- /dev/null +++ b/Datacards/22fb_regression/LMR_350/signal350_sig.log @@ -0,0 +1,171 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",350,"true")... +nSignal_init = 204400 + here 12468 + here 4075 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=11972.2 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.45000e+02 7.00000e+00 2.01358e-01 8.58680e+02 + 2 sg_p1 2.00000e+01 3.00000e+00 2.01358e-01 -1.57079e+01 + 3 sg_p2 3.75000e+02 9.00000e+00 2.01358e-01 6.05886e+02 + 4 sg_p3 5.50000e+01 9.00000e+00 2.01358e-01 -2.17665e+02 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -5.01786e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=11450.9 FROM MIGRAD STATUS=CONVERGED 265 CALLS 266 TOTAL + EDM=0.000134771 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.35255e+02 5.84888e-01 1.21405e-03 1.69314e-01 + 2 sg_p1 2.39353e+01 6.18452e-01 2.26207e-03 -7.36849e-02 + 3 sg_p2 3.30000e+02 1.74434e+01 6.51717e-02 -1.61505e-03 + 4 sg_p3 9.14041e+01 1.19905e+01 2.31542e-02 2.93076e-02 + 5 sg_p4 9.18502e-01 1.58824e-02 2.46748e-03 -1.79889e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.421e-01 -1.044e-01 -9.633e-04 -1.884e+00 -2.873e-03 + -1.044e-01 3.827e-01 7.018e-04 4.287e+00 6.787e-03 + -9.633e-04 7.018e-04 3.134e-03 -2.412e-02 7.804e-06 + -1.884e+00 4.287e+00 -2.412e-02 1.549e+02 1.474e-01 + -2.873e-03 6.787e-03 7.804e-06 1.474e-01 2.525e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.32887 1.000 -0.288 -0.029 -0.259 -0.309 + 2 0.69763 -0.288 1.000 0.020 0.557 0.690 + 3 0.07298 -0.029 0.020 1.000 -0.035 0.009 + 4 0.74911 -0.259 0.557 -0.035 1.000 0.745 + 5 0.81815 -0.309 0.690 0.009 0.745 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=11450.9 FROM HESSE STATUS=OK 31 CALLS 297 TOTAL + EDM=0.000138795 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 3.35255e+02 5.87075e-01 2.42809e-04 -2.82153e-01 + 2 sg_p1 2.39353e+01 6.29974e-01 4.52415e-04 2.65460e-01 + 3 sg_p2 3.30000e+02 1.77257e+01 1.30343e-02 -1.57216e+00 + 4 sg_p3 9.14041e+01 1.23569e+01 9.26169e-04 9.42414e-01 + 5 sg_p4 9.18502e-01 1.64098e-02 4.93496e-04 9.91785e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.447e-01 -1.108e-01 -1.541e-04 -2.068e+00 -3.088e-03 + -1.108e-01 3.971e-01 1.002e-04 4.696e+00 7.284e-03 + -1.541e-04 1.002e-04 3.189e-03 -4.591e-03 6.870e-07 + -2.068e+00 4.696e+00 -4.591e-03 1.653e+02 1.614e-01 + -3.088e-03 7.284e-03 6.870e-07 1.614e-01 2.696e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.33880 1.000 -0.299 -0.005 -0.274 -0.320 + 2 0.71085 -0.299 1.000 0.003 0.580 0.704 + 3 0.01245 -0.005 0.003 1.000 -0.006 0.001 + 4 0.76710 -0.274 0.580 -0.006 1.000 0.764 + 5 0.83084 -0.320 0.704 0.001 0.764 1.000 +350 +335.255 +- 0.587075 +23.9353 +- 0.629974 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=10760.3 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.50000e+02 6.00000e+00 2.01358e-01 -6.46762e+02 + 2 sg_p1 1.00000e+01 1.00000e+00 2.01358e-01 8.54233e+01 + 3 sg_p2 3.10000e+02 2.20000e+01 2.01358e-01 -4.29997e+02 + 4 sg_p3 5.50000e+01 9.00000e+00 2.01358e-01 -2.41765e+02 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -5.96224e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10561.8 FROM MIGRAD STATUS=CONVERGED 128 CALLS 129 TOTAL + EDM=5.13479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.51532e+02 2.78144e-01 6.54136e-04 -1.36560e-01 + 2 sg_p1 1.00506e+01 2.79378e-01 3.34254e-03 -3.47216e-02 + 3 sg_p2 3.25825e+02 4.66794e+00 2.00438e-03 -1.87104e-01 + 4 sg_p3 6.16005e+01 3.66495e+00 3.74383e-03 -6.12168e-02 + 5 sg_p4 7.27991e-01 1.37950e-02 1.92756e-03 -1.33979e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 7.737e-02 -5.601e-03 -2.520e-02 -5.284e-02 -2.675e-04 + -5.601e-03 7.813e-02 -4.588e-01 4.031e-01 1.783e-03 + -2.520e-02 -4.588e-01 2.180e+01 -1.276e+01 -1.507e-02 + -5.284e-02 4.031e-01 -1.276e+01 1.346e+01 1.537e-02 + -2.675e-04 1.783e-03 -1.507e-02 1.537e-02 1.904e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.12519 1.000 -0.072 -0.019 -0.052 -0.070 + 2 0.54100 -0.072 1.000 -0.352 0.393 0.462 + 3 0.75052 -0.019 -0.352 1.000 -0.745 -0.234 + 4 0.76424 -0.052 0.393 -0.745 1.000 0.304 + 5 0.48264 -0.070 0.462 -0.234 0.304 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10561.8 FROM HESSE STATUS=OK 31 CALLS 160 TOTAL + EDM=5.1249e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 3.51532e+02 2.78163e-01 1.30827e-04 5.10947e-02 + 2 sg_p1 1.00506e+01 2.80311e-01 6.68507e-04 1.01235e-02 + 3 sg_p2 3.25825e+02 4.72543e+00 4.00876e-04 1.44369e-01 + 4 sg_p3 6.16005e+01 3.71050e+00 1.49753e-04 1.47209e-01 + 5 sg_p4 7.27991e-01 1.38205e-02 3.85512e-04 4.73476e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 7.738e-02 -5.715e-03 -2.357e-02 -5.396e-02 -2.693e-04 + -5.715e-03 7.866e-02 -4.756e-01 4.161e-01 1.803e-03 + -2.357e-02 -4.756e-01 2.234e+01 -1.321e+01 -1.568e-02 + -5.396e-02 4.161e-01 -1.321e+01 1.380e+01 1.584e-02 + -2.693e-04 1.803e-03 -1.568e-02 1.584e-02 1.911e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.12573 1.000 -0.073 -0.018 -0.052 -0.070 + 2 0.54533 -0.073 1.000 -0.359 0.399 0.465 + 3 0.75753 -0.018 -0.359 1.000 -0.752 -0.240 + 4 0.77086 -0.052 0.399 -0.752 1.000 0.308 + 5 0.48557 -0.070 0.465 -0.240 0.308 1.000 +350 +351.532 +- 0.278163 +10.0506 +- 0.280311 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_350/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_350/w_background_GaussExp.root new file mode 100644 index 0000000..a8dbbfd Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_350/w_data.root b/Datacards/22fb_regression/LMR_350/w_data.root new file mode 100644 index 0000000..98fc31d Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_350/w_signal_350.root b/Datacards/22fb_regression/LMR_350/w_signal_350.root new file mode 100644 index 0000000..2ed8855 Binary files /dev/null and b/Datacards/22fb_regression/LMR_350/w_signal_350.root differ diff --git a/Datacards/22fb_regression/LMR_400/CMS_HH4b_400_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_400/CMS_HH4b_400_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_400/CMS_HH4b_400_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_400/c_H1_mass_400.png b/Datacards/22fb_regression/LMR_400/c_H1_mass_400.png new file mode 100644 index 0000000..a67e8fe Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/c_H1_mass_400.png differ diff --git a/Datacards/22fb_regression/LMR_400/c_H2_mass_400.png b/Datacards/22fb_regression/LMR_400/c_H2_mass_400.png new file mode 100644 index 0000000..8cc8050 Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/c_H2_mass_400.png differ diff --git a/Datacards/22fb_regression/LMR_400/c_mX_SR_400.png b/Datacards/22fb_regression/LMR_400/c_mX_SR_400.png new file mode 100644 index 0000000..2ccdb7f Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/c_mX_SR_400.png differ diff --git a/Datacards/22fb_regression/LMR_400/c_mX_SR_KinFit_400.png b/Datacards/22fb_regression/LMR_400/c_mX_SR_KinFit_400.png new file mode 100644 index 0000000..292b15a Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/c_mX_SR_KinFit_400.png differ diff --git a/Datacards/22fb_regression/LMR_400/data_bkg.log b/Datacards/22fb_regression/LMR_400/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_400/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_400/datacard_400.root b/Datacards/22fb_regression/LMR_400/datacard_400.root new file mode 100644 index 0000000..5312ac5 Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/datacard_400.root differ diff --git a/Datacards/22fb_regression/LMR_400/datacard_400.txt b/Datacards/22fb_regression/LMR_400/datacard_400.txt new file mode 100644 index 0000000..1a98d7b --- /dev/null +++ b/Datacards/22fb_regression/LMR_400/datacard_400.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_400.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 381.63 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_400/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_400/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..509cc11 Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_400/index.html b/Datacards/22fb_regression/LMR_400/index.html new file mode 100644 index 0000000..5d1c180 --- /dev/null +++ b/Datacards/22fb_regression/LMR_400/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 400

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 381.63
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_400/signal400_sig.log b/Datacards/22fb_regression/LMR_400/signal400_sig.log new file mode 100644 index 0000000..2d38b5d --- /dev/null +++ b/Datacards/22fb_regression/LMR_400/signal400_sig.log @@ -0,0 +1,172 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",400,"true")... +nSignal_init = 120200 + here 11120 + here 3553 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=10526.8 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.95000e+02 7.00000e+00 2.01358e-01 6.22090e+02 + 2 sg_p1 2.15000e+01 3.70000e+00 2.01358e-01 3.93144e+01 + 3 sg_p2 4.15000e+02 9.00000e+00 2.01358e-01 5.73210e+02 + 4 sg_p3 5.50000e+01 9.00000e+00 2.01358e-01 -2.75943e+02 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -2.70487e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10114.1 FROM MIGRAD STATUS=CONVERGED 159 CALLS 160 TOTAL + EDM=6.64008e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.86211e+02 6.86663e-01 1.31273e-03 2.59564e-02 + 2 sg_p1 2.19020e+01 6.09777e-01 1.86310e-03 -3.77740e-02 + 3 sg_p2 3.70000e+02 4.09910e-01 9.37664e-03** at limit ** + 4 sg_p3 6.56431e+01 3.91338e+00 4.63470e-03 2.44737e-02 + 5 sg_p4 7.76392e-01 2.28831e-02 2.56082e-03 -2.96800e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 4.716e-01 -1.220e-01 -1.126e-06 -7.745e-01 -5.045e-03 + -1.220e-01 3.720e-01 1.179e-07 9.690e-01 7.925e-03 + -1.126e-06 1.179e-07 1.153e-06 -4.599e-07 -1.265e-08 + -7.745e-01 9.690e-01 -4.599e-07 1.536e+01 5.930e-02 + -5.045e-03 7.925e-03 -1.265e-08 5.930e-02 5.242e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.35983 1.000 -0.291 -0.002 -0.288 -0.321 + 2 0.57983 -0.291 1.000 0.000 0.405 0.568 + 3 0.00189 -0.002 0.000 1.000 -0.000 -0.001 + 4 0.66627 -0.288 0.405 -0.000 1.000 0.661 + 5 0.74129 -0.321 0.568 -0.001 0.661 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10114.1 FROM HESSE STATUS=OK 31 CALLS 191 TOTAL + EDM=6.64131e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 3.86211e+02 6.87044e-01 2.62545e-04 -2.53827e-01 + 2 sg_p1 2.19020e+01 6.10869e-01 7.45239e-05 2.17333e-02 + 3 sg_p2 3.70000e+02 4.09931e-01 1.87533e-03 -1.57097e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + 4 sg_p3 6.56431e+01 3.92492e+00 1.85388e-04 2.38776e-01 + 5 sg_p4 7.76392e-01 2.29550e-02 5.12164e-04 5.85701e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 4.721e-01 -1.231e-01 -1.899e-07 -7.810e-01 -5.080e-03 + -1.231e-01 3.733e-01 1.959e-08 9.800e-01 7.991e-03 + -1.899e-07 1.959e-08 1.153e-06 -7.927e-08 -2.152e-09 + -7.810e-01 9.800e-01 -7.927e-08 1.545e+01 5.988e-02 + -5.080e-03 7.991e-03 -2.152e-09 5.988e-02 5.275e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.36117 1.000 -0.293 -0.000 -0.289 -0.322 + 2 0.58187 -0.293 1.000 0.000 0.408 0.569 + 3 0.00032 -0.000 0.000 1.000 -0.000 -0.000 + 4 0.66871 -0.289 0.408 -0.000 1.000 0.663 + 5 0.74319 -0.322 0.569 -0.000 0.663 1.000 +400 +386.211 +- 0.687044 +21.902 +- 0.610869 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=9003.58 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.00000e+02 6.00000e+00 2.01358e-01 -8.17321e+02 + 2 sg_p1 9.00000e+00 1.20000e+00 2.01358e-01 -8.85683e+01 + 3 sg_p2 3.40000e+02 2.40000e+01 2.01358e-01 -4.00838e+01 + 4 sg_p3 8.00000e+01 1.40000e+01 2.01358e-01 -2.76467e+01 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -5.53440e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8781 FROM MIGRAD STATUS=CONVERGED 143 CALLS 144 TOTAL + EDM=7.81637e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.01991e+02 3.04820e-01 6.56019e-04 3.03441e-01 + 2 sg_p1 1.13375e+01 2.78610e-01 2.89517e-03 -8.61710e-02 + 3 sg_p2 3.20268e+02 2.70861e+01 4.61346e-03 9.05258e-02 + 4 sg_p3 9.67805e+01 1.34055e+01 4.07589e-03 9.94460e-02 + 5 sg_p4 7.95536e-01 1.32078e-02 1.95974e-03 1.21966e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 9.292e-02 -4.286e-03 7.939e-02 -1.353e-01 -2.298e-04 + -4.286e-03 7.769e-02 -2.675e+00 1.285e+00 8.489e-04 + 7.939e-02 -2.675e+00 7.468e+02 -3.489e+02 6.552e-02 + -1.353e-01 1.285e+00 -3.489e+02 1.821e+02 -2.386e-02 + -2.298e-04 8.489e-04 6.552e-02 -2.386e-02 1.745e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.09630 1.000 -0.050 0.010 -0.033 -0.057 + 2 0.46235 -0.050 1.000 -0.351 0.342 0.231 + 3 0.94909 0.010 -0.351 1.000 -0.946 0.181 + 4 0.94708 -0.033 0.342 -0.946 1.000 -0.134 + 5 0.38004 -0.057 0.231 0.181 -0.134 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=8781 FROM HESSE STATUS=OK 31 CALLS 175 TOTAL + EDM=7.91527e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.01991e+02 3.04850e-01 1.31204e-04 6.64153e-02 + 2 sg_p1 1.13375e+01 2.81566e-01 5.79035e-04 4.00177e-01 + 3 sg_p2 3.20268e+02 2.90891e+01 9.22692e-04 -1.65182e-01 + 4 sg_p3 9.67805e+01 1.44015e+01 8.15178e-04 2.42079e-01 + 5 sg_p4 7.95536e-01 1.32354e-02 3.91947e-04 6.32386e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 9.294e-02 -4.510e-03 1.192e-01 -1.546e-01 -2.270e-04 + -4.510e-03 7.935e-02 -3.111e+00 1.500e+00 8.176e-04 + 1.192e-01 -3.111e+00 8.638e+02 -4.067e+02 7.448e-02 + -1.546e-01 1.500e+00 -4.067e+02 2.106e+02 -2.833e-02 + -2.270e-04 8.176e-04 7.448e-02 -2.833e-02 1.752e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.09730 1.000 -0.053 0.013 -0.035 -0.056 + 2 0.47979 -0.053 1.000 -0.376 0.367 0.219 + 3 0.95614 0.013 -0.376 1.000 -0.954 0.191 + 4 0.95441 -0.035 0.367 -0.954 1.000 -0.147 + 5 0.38469 -0.056 0.219 0.191 -0.147 1.000 +400 +401.991 +- 0.30485 +11.3375 +- 0.281566 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_400/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_400/w_background_GaussExp.root new file mode 100644 index 0000000..cda456d Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_400/w_data.root b/Datacards/22fb_regression/LMR_400/w_data.root new file mode 100644 index 0000000..fc3fe4c Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_400/w_signal_400.root b/Datacards/22fb_regression/LMR_400/w_signal_400.root new file mode 100644 index 0000000..feae145 Binary files /dev/null and b/Datacards/22fb_regression/LMR_400/w_signal_400.root differ diff --git a/Datacards/22fb_regression/LMR_450/CMS_HH4b_450_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_450/CMS_HH4b_450_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..dd5f6c8 --- /dev/null +++ b/Datacards/22fb_regression/LMR_450/CMS_HH4b_450_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/LMR_450/c_H1_mass_450.png b/Datacards/22fb_regression/LMR_450/c_H1_mass_450.png new file mode 100644 index 0000000..e94db76 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/c_H1_mass_450.png differ diff --git a/Datacards/22fb_regression/LMR_450/c_H2_mass_450.png b/Datacards/22fb_regression/LMR_450/c_H2_mass_450.png new file mode 100644 index 0000000..a493640 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/c_H2_mass_450.png differ diff --git a/Datacards/22fb_regression/LMR_450/c_mX_SR_450.png b/Datacards/22fb_regression/LMR_450/c_mX_SR_450.png new file mode 100644 index 0000000..7a9dc6b Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/c_mX_SR_450.png differ diff --git a/Datacards/22fb_regression/LMR_450/c_mX_SR_KinFit_450.png b/Datacards/22fb_regression/LMR_450/c_mX_SR_KinFit_450.png new file mode 100644 index 0000000..0dc057f Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/c_mX_SR_KinFit_450.png differ diff --git a/Datacards/22fb_regression/LMR_450/data_bkg.log b/Datacards/22fb_regression/LMR_450/data_bkg.log new file mode 100644 index 0000000..d764436 --- /dev/null +++ b/Datacards/22fb_regression/LMR_450/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [250,500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [250,500] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=44103.6 FROM MIGRAD STATUS=INITIATE 70 CALLS 71 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.70000e+02 6.00000e+00 0.00000e+00 -1.09334e+01 + 2 bg_p1 1.23429e+01 4.70000e+00 0.00000e+00 -4.34322e+01 + 3 bg_p2 8.07990e-02 5.09000e-01 1.99228e-01 3.74803e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM MIGRAD STATUS=CONVERGED 181 CALLS 182 TOTAL + EDM=4.90015e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 2.67284e+02 7.03910e-01 1.91142e-03 7.91266e-02 + 2 bg_p1 9.77635e+00 6.60773e-01 2.14738e-03 8.94879e-02 + 3 bg_p2 6.12668e-02 4.43482e-03 4.70312e-04 2.17131e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.956e-01 3.780e-01 2.532e-03 + 3.780e-01 4.369e-01 2.703e-03 + 2.532e-03 2.703e-03 1.967e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82798 1.000 0.812 0.811 + 2 0.92874 0.812 1.000 0.922 + 3 0.92831 0.811 0.922 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=44098.9 FROM HESSE STATUS=OK 16 CALLS 198 TOTAL + EDM=4.80479e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 2.67284e+02 6.97148e-01 7.64567e-05 -9.06463e-02 + 2 bg_p1 9.77635e+00 6.54981e-01 8.58953e-05 -7.91837e-01 + 3 bg_p2 6.12668e-02 4.39789e-03 1.88125e-05 -1.36974e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 4.861e-01 3.692e-01 2.475e-03 + 3.692e-01 4.292e-01 2.653e-03 + 2.475e-03 2.653e-03 1.934e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.82427 1.000 0.808 0.807 + 2 0.92742 0.808 1.000 0.921 + 3 0.92705 0.807 0.921 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 1.09246 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [250,500] --> [250,500] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 15182 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_450/datacard_450.root b/Datacards/22fb_regression/LMR_450/datacard_450.root new file mode 100644 index 0000000..2d28711 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/datacard_450.root differ diff --git a/Datacards/22fb_regression/LMR_450/datacard_450.txt b/Datacards/22fb_regression/LMR_450/datacard_450.txt new file mode 100644 index 0000000..6186880 --- /dev/null +++ b/Datacards/22fb_regression/LMR_450/datacard_450.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_450.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 502.766 15182 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 267.284 0.697148 +bg_p1 param 9.77635 0.654981 +bg_p2 param 0.0612668 0.00439789 diff --git a/Datacards/22fb_regression/LMR_450/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_450/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..e54bd87 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_450/index.html b/Datacards/22fb_regression/LMR_450/index.html new file mode 100644 index 0000000..ff0959b --- /dev/null +++ b/Datacards/22fb_regression/LMR_450/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 450

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 502.766
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_450/signal450_sig.log b/Datacards/22fb_regression/LMR_450/signal450_sig.log new file mode 100644 index 0000000..f4c57df --- /dev/null +++ b/Datacards/22fb_regression/LMR_450/signal450_sig.log @@ -0,0 +1,171 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",450,"true")... +nSignal_init = 100000 + here 12670 + here 3939 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=11372.5 FROM MIGRAD STATUS=INITIATE 20 CALLS 21 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.45000e+02 7.00000e+00 2.01358e-01 7.84474e+02 + 2 sg_p1 1.90000e+01 3.20000e+00 2.01358e-01 -8.88748e+01 + 3 sg_p2 4.50000e+02 8.00000e+00 2.01358e-01 4.36697e+02 + 4 sg_p3 5.50000e+01 9.00000e+00 2.01358e-01 -2.80872e+01 + 5 sg_p4 5.00000e-01 1.00000e-01 2.01358e-01 -1.51202e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10969.7 FROM MIGRAD STATUS=CONVERGED 206 CALLS 207 TOTAL + EDM=0.000173529 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.32574e+02 5.86121e-01 1.26498e-03 3.86249e-01 + 2 sg_p1 2.40752e+01 4.74182e-01 2.03543e-03 -1.33686e-01 + 3 sg_p2 4.10000e+02 1.01626e+00 1.62720e-02 -4.54378e-02 + 4 sg_p3 8.97390e+01 9.93928e+00 1.90177e-02 6.14208e-03 + 5 sg_p4 8.98535e-01 1.28241e-02 2.32851e-03 9.15296e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.436e-01 -3.739e-02 -1.720e-05 -1.130e+00 -1.388e-03 + -3.739e-02 2.249e-01 7.671e-06 1.558e+00 2.551e-03 + -1.720e-05 7.671e-06 4.390e-04 6.448e-04 2.405e-07 + -1.130e+00 1.558e+00 6.448e-04 1.030e+02 7.920e-02 + -1.388e-03 2.551e-03 2.405e-07 7.920e-02 1.646e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.21568 1.000 -0.134 -0.001 -0.190 -0.185 + 2 0.43104 -0.134 1.000 0.001 0.324 0.419 + 3 0.00340 -0.001 0.001 1.000 0.003 0.001 + 4 0.61740 -0.190 0.324 0.003 1.000 0.608 + 5 0.65419 -0.185 0.419 0.001 0.608 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=10969.7 FROM HESSE STATUS=OK 31 CALLS 238 TOTAL + EDM=0.000173578 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.32574e+02 5.86825e-01 2.52995e-04 -3.62943e-01 + 2 sg_p1 2.40752e+01 4.76024e-01 4.07086e-04 3.22778e-01 + 3 sg_p2 4.10000e+02 1.01632e+00 3.25440e-03 -1.57312e+00 + 4 sg_p3 8.97390e+01 1.00663e+01 7.60709e-04 8.81947e-01 + 5 sg_p4 8.98535e-01 1.29882e-02 4.65703e-04 9.22429e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 3.444e-01 -3.878e-02 2.097e-06 -1.181e+00 -1.445e-03 + -3.878e-02 2.267e-01 -9.853e-07 1.633e+00 2.638e-03 + 2.097e-06 -9.853e-07 4.390e-04 -7.994e-05 -3.228e-08 + -1.181e+00 1.633e+00 -7.994e-05 1.058e+02 8.299e-02 + -1.445e-03 2.638e-03 -3.228e-08 8.299e-02 1.688e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.22091 1.000 -0.139 0.000 -0.196 -0.189 + 2 0.43828 -0.139 1.000 -0.000 0.333 0.426 + 3 0.00041 0.000 -0.000 1.000 -0.000 -0.000 + 4 0.63000 -0.196 0.333 -0.000 1.000 0.621 + 5 0.66508 -0.189 0.426 -0.000 0.621 1.000 +450 +432.574 +- 0.586825 +24.0752 +- 0.476024 +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. + ********** + ** 13 **MIGRAD 2500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=10120.3 FROM MIGRAD STATUS=INITIATE 43 CALLS 44 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.50000e+02 6.00000e+00 0.00000e+00 -4.24163e+02 + 2 sg_p1 1.40000e+01 2.20000e+00 0.00000e+00 2.98821e+02 + 3 sg_p2 4.35000e+02 1.10000e+01 0.00000e+00 -2.54426e+02 + 4 sg_p3 4.20372e+01 1.40000e+01 -5.73203e-01 3.77727e+01 + 5 sg_p4 5.00000e-01 1.00000e-01 0.00000e+00 -5.69890e+02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9781.27 FROM MIGRAD STATUS=CONVERGED 294 CALLS 295 TOTAL + EDM=1.03141e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.51811e+02 3.31442e-01 7.50766e-04 6.78538e-02 + 2 sg_p1 1.39650e+01 3.03767e-01 1.63056e-03 -1.24419e-02 + 3 sg_p2 4.02179e+02 1.63094e+01 1.57156e-02 -1.76609e-03 + 4 sg_p3 9.81767e+01 1.60617e+01 9.99069e-03 -2.88375e-03 + 5 sg_p4 9.02486e-01 9.19582e-03 1.94126e-03 1.45281e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 1.099e-01 -5.297e-03 1.353e-01 -4.499e-01 -1.584e-04 + -5.297e-03 9.230e-02 -1.966e+00 1.891e+00 1.075e-03 + 1.353e-01 -1.966e+00 2.791e+02 -2.124e+02 -3.732e-02 + -4.499e-01 1.891e+00 -2.124e+02 2.630e+02 3.351e-02 + -1.584e-04 1.075e-03 -3.732e-02 3.351e-02 8.459e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.11643 1.000 -0.053 0.024 -0.084 -0.052 + 2 0.50264 -0.053 1.000 -0.387 0.384 0.385 + 3 0.79192 0.024 -0.387 1.000 -0.784 -0.243 + 4 0.79122 -0.084 0.384 -0.784 1.000 0.225 + 5 0.39922 -0.052 0.385 -0.243 0.225 1.000 + ********** + ** 18 **HESSE 2500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9781.27 FROM HESSE STATUS=OK 31 CALLS 326 TOTAL + EDM=1.02954e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.51811e+02 3.31565e-01 1.50153e-04 6.04146e-02 + 2 sg_p1 1.39650e+01 3.06975e-01 6.52223e-05 -3.17734e-03 + 3 sg_p2 4.02179e+02 1.70613e+01 6.28624e-04 -6.39438e-01 + 4 sg_p3 9.81767e+01 1.68325e+01 3.99627e-04 2.62678e-01 + 5 sg_p4 9.02486e-01 9.23208e-03 7.76502e-05 9.35628e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 5 ERR DEF=0.5 + 1.099e-01 -5.795e-03 1.867e-01 -4.972e-01 -1.663e-04 + -5.795e-03 9.426e-02 -2.199e+00 2.119e+00 1.112e-03 + 1.867e-01 -2.199e+00 3.069e+02 -2.402e+02 -4.156e-02 + -4.972e-01 2.119e+00 -2.402e+02 2.894e+02 3.769e-02 + -1.663e-04 1.112e-03 -4.156e-02 3.769e-02 8.526e-05 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 5 + 1 0.11951 1.000 -0.057 0.032 -0.088 -0.054 + 2 0.51787 -0.057 1.000 -0.409 0.406 0.392 + 3 0.81297 0.032 -0.409 1.000 -0.806 -0.257 + 4 0.81245 -0.088 0.406 -0.806 1.000 0.240 + 5 0.40740 -0.054 0.392 -0.257 0.240 1.000 +450 +451.811 +- 0.331565 +13.965 +- 0.306975 + fit done +(int) 0 diff --git a/Datacards/22fb_regression/LMR_450/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_450/w_background_GaussExp.root new file mode 100644 index 0000000..fff5901 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_450/w_data.root b/Datacards/22fb_regression/LMR_450/w_data.root new file mode 100644 index 0000000..a901dbf Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_450/w_signal_450.root b/Datacards/22fb_regression/LMR_450/w_signal_450.root new file mode 100644 index 0000000..f19dee8 Binary files /dev/null and b/Datacards/22fb_regression/LMR_450/w_signal_450.root differ diff --git a/Datacards/22fb_regression/LMR_500/CMS_HH4b_500_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/LMR_500/CMS_HH4b_500_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..081bd50 --- /dev/null +++ b/Datacards/22fb_regression/LMR_500/CMS_HH4b_500_13TeV_asymptoticCLs.out @@ -0,0 +1,4 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 diff --git a/Datacards/22fb_regression/LMR_500/c_H1_mass_500.png b/Datacards/22fb_regression/LMR_500/c_H1_mass_500.png new file mode 100644 index 0000000..54ad0bd Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/c_H1_mass_500.png differ diff --git a/Datacards/22fb_regression/LMR_500/c_H2_mass_500.png b/Datacards/22fb_regression/LMR_500/c_H2_mass_500.png new file mode 100644 index 0000000..12a195b Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/c_H2_mass_500.png differ diff --git a/Datacards/22fb_regression/LMR_500/c_mX_SR_500.png b/Datacards/22fb_regression/LMR_500/c_mX_SR_500.png new file mode 100644 index 0000000..58cfd4a Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/c_mX_SR_500.png differ diff --git a/Datacards/22fb_regression/LMR_500/c_mX_SR_KinFit_500.png b/Datacards/22fb_regression/LMR_500/c_mX_SR_KinFit_500.png new file mode 100644 index 0000000..7b874d6 Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/c_mX_SR_KinFit_500.png differ diff --git a/Datacards/22fb_regression/LMR_500/data_bkg.log b/Datacards/22fb_regression/LMR_500/data_bkg.log new file mode 100644 index 0000000..2638dc7 --- /dev/null +++ b/Datacards/22fb_regression/LMR_500/data_bkg.log @@ -0,0 +1,2 @@ + +Processing fit_background.c... diff --git a/Datacards/22fb_regression/LMR_500/datacard_500.txt b/Datacards/22fb_regression/LMR_500/datacard_500.txt new file mode 100644 index 0000000..d448766 --- /dev/null +++ b/Datacards/22fb_regression/LMR_500/datacard_500.txt @@ -0,0 +1,20 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_500.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 502.766 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 diff --git a/Datacards/22fb_regression/LMR_500/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/LMR_500/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..4549094 Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/LMR_500/index.html b/Datacards/22fb_regression/LMR_500/index.html new file mode 100644 index 0000000..ff0959b --- /dev/null +++ b/Datacards/22fb_regression/LMR_500/index.html @@ -0,0 +1,47 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 450

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 502.766
+JEC lnN 1 -
+JER lnN 1 -
+bTag lnN 1 -
+ +
diff --git a/Datacards/22fb_regression/LMR_500/signal500_sig.log b/Datacards/22fb_regression/LMR_500/signal500_sig.log new file mode 100644 index 0000000..cb35d78 --- /dev/null +++ b/Datacards/22fb_regression/LMR_500/signal500_sig.log @@ -0,0 +1,2 @@ + +Processing Display_SignalFits_LMR.cc("PreselectedWithRegression","reg","LMRSelection_chi2","Histograms_GluGluToBulkGravitonToHHTo4B_M-",500,"true")... diff --git a/Datacards/22fb_regression/LMR_500/w_background_GaussExp.root b/Datacards/22fb_regression/LMR_500/w_background_GaussExp.root new file mode 100644 index 0000000..fff5901 Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/LMR_500/w_data.root b/Datacards/22fb_regression/LMR_500/w_data.root new file mode 100644 index 0000000..a901dbf Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/w_data.root differ diff --git a/Datacards/22fb_regression/LMR_500/w_signal_500.root b/Datacards/22fb_regression/LMR_500/w_signal_500.root new file mode 100644 index 0000000..467a9eb Binary files /dev/null and b/Datacards/22fb_regression/LMR_500/w_signal_500.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..77d7f14 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1000_13TeV_asymptoticCLs.out @@ -0,0 +1,12 @@ +Observed Limit: r < 0.0213 +Expected 2.5%: r < 0.0108 +Expected 16.0%: r < 0.0150 +Expected 50.0%: r < 0.0210 +Expected 84.0%: r < 0.0314 +Expected 97.5%: r < 0.0448 +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..ce77794 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_1200_13TeV_asymptoticCLs.out @@ -0,0 +1,12 @@ +Observed Limit: r < 0.0237 +Expected 2.5%: r < 0.0123 +Expected 16.0%: r < 0.0163 +Expected 50.0%: r < 0.0239 +Expected 84.0%: r < 0.0350 +Expected 97.5%: r < 0.0500 +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..d844e57 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +runLimits.sh: line 15: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..e39e22f --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_350_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Error when running the combination: + File /uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/Datacards/22fb_regression/LMR_500/datacard_350.root does not exist diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..366b021 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_400_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +Observed Limit: r < 0.2723 +Expected 2.5%: r < 0.1389 +Expected 16.0%: r < 0.1885 +Expected 50.0%: r < 0.2725 +Expected 84.0%: r < 0.4017 +Expected 97.5%: r < 0.5768 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..511fe89 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_450_13TeV_asymptoticCLs.out @@ -0,0 +1,7 @@ +Observed Limit: r < 0.1147 +Expected 2.5%: r < 0.0596 +Expected 16.0%: r < 0.0799 +Expected 50.0%: r < 0.1147 +Expected 84.0%: r < 0.1673 +Expected 97.5%: r < 0.2376 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..98f7352 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_500_13TeV_asymptoticCLs.out @@ -0,0 +1,6 @@ +Observed Limit: r < 0.0832 +Expected 2.5%: r < 0.0434 +Expected 16.0%: r < 0.0581 +Expected 50.0%: r < 0.0835 +Expected 84.0%: r < 0.1211 +Expected 97.5%: r < 0.1714 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..6437de2 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_550_13TeV_asymptoticCLs.out @@ -0,0 +1,13 @@ +Observed Limit: r < 0.0609 +Expected 2.5%: r < 0.0319 +Expected 16.0%: r < 0.0424 +Expected 50.0%: r < 0.0610 +Expected 84.0%: r < 0.0888 +Expected 97.5%: r < 0.1262 + +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_600_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_600_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..4375b78 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_600_13TeV_asymptoticCLs.out @@ -0,0 +1,13 @@ +Observed Limit: r < 0.0466 +Expected 2.5%: r < 0.0243 +Expected 16.0%: r < 0.0329 +Expected 50.0%: r < 0.0464 +Expected 84.0%: r < 0.0682 +Expected 97.5%: r < 0.0969 + +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..73099ab --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_650_13TeV_asymptoticCLs.out @@ -0,0 +1,12 @@ +Observed Limit: r < 0.0390 +Expected 2.5%: r < 0.0202 +Expected 16.0%: r < 0.0274 +Expected 50.0%: r < 0.0386 +Expected 84.0%: r < 0.0567 +Expected 97.5%: r < 0.0809 +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..7dc014d --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_700_13TeV_asymptoticCLs.out @@ -0,0 +1,12 @@ +Observed Limit: r < 0.0333 +Expected 2.5%: r < 0.0171 +Expected 16.0%: r < 0.0231 +Expected 50.0%: r < 0.0337 +Expected 84.0%: r < 0.0490 +Expected 97.5%: r < 0.0695 +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_750_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_750_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..085448b --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_750_13TeV_asymptoticCLs.out @@ -0,0 +1,13 @@ +Observed Limit: r < 0.0290 +Expected 2.5%: r < 0.0149 +Expected 16.0%: r < 0.0205 +Expected 50.0%: r < 0.0288 +Expected 84.0%: r < 0.0430 +Expected 97.5%: r < 0.0608 + +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..de1e35d --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_800_13TeV_asymptoticCLs.out @@ -0,0 +1,13 @@ +Observed Limit: r < 0.0269 +Expected 2.5%: r < 0.0138 +Expected 16.0%: r < 0.0191 +Expected 50.0%: r < 0.0269 +Expected 84.0%: r < 0.0393 +Expected 97.5%: r < 0.0568 + +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_MaxLikelihood.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_MaxLikelihood.out new file mode 100644 index 0000000..b7a3195 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_MaxLikelihood.out @@ -0,0 +1 @@ +bash: i#combine: command not found diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_asymptoticCLs.out b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_asymptoticCLs.out new file mode 100644 index 0000000..89fe525 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_HH4b_900_13TeV_asymptoticCLs.out @@ -0,0 +1,12 @@ +Observed Limit: r < 0.0291 +Expected 2.5%: r < 0.0149 +Expected 16.0%: r < 0.0205 +Expected 50.0%: r < 0.0288 +Expected 84.0%: r < 0.0421 +Expected 97.5%: r < 0.0610 +>>> including systematics +Will use a-priori expected background instead of a-posteriori one. +>>> method used to compute upper limit is Asymptotic +>>> random number generator seed is 123456 +Computing limit starting from expected outcome +Will compute both limit(s) using minimizer Minuit2 with strategy 0 and tolerance 0.01 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_lumi.h b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_lumi.h new file mode 100644 index 0000000..cc2e1d5 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/CMS_lumi.h @@ -0,0 +1,40 @@ +#include "TPad.h" +#include "TLatex.h" +#include "TLine.h" +#include "TBox.h" +#include "TASImage.h" + +// +// Global variables +// + +TString cmsText = "CMS"; +float cmsTextFont = 61; // default is helvetic-bold + +bool writeExtraText = false; +TString extraText = "Preliminary"; +float extraTextFont = 52; // default is helvetica-italics + +// text sizes and text offsets with respect to the top frame +// in unit of the top margin size +float lumiTextSize = 0.4; +float lumiTextOffset = 0.2; +float cmsTextSize = 0.475; +float cmsTextOffset = 0.1; // only used in outOfFrame version + +float relPosX = 0.045; +float relPosY = 0.035; +float relExtraDY = 1.2; + +// ratio of "CMS" and extra text size +float extraOverCmsTextSize = 0.76; + +TString lumi_13TeV = "20.1 fb^{-1}"; +TString lumi_8TeV = "19.7 fb^{-1}"; +TString lumi_7TeV = "5.1 fb^{-1}"; +TString lumi_sqrtS = ""; + +bool drawLogo = false; + +void CMS_lumi( TPad* pad, int iPeriod=3, int iPosX=10 ); + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.root new file mode 100644 index 0000000..06c985b Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.txt new file mode 100644 index 0000000..49884dd --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000.txt @@ -0,0 +1,35 @@ +# X -> HH -> bbbb +# 1/16/2016 +# Souvik Das + +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_1000.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 286.855 917 +---------- +lumi lnN 1.03 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 1014.82 0.515613 +signal_p1 param 35.4423 0.486025 +signal_p2 param 1.74068 0.0840084 +signal_p3 param 1.52965 0.0677772 +bgFloat lnU - 2.00 +bg_p0 param 536.148 3.01343 +bg_p1 param 100 0.696456 +bg_p2 param 0.380864 0.0062095 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000_Asymptotic.log b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000_Asymptotic.log new file mode 100644 index 0000000..87a2e6e --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1000_Asymptotic.log @@ -0,0 +1,11 @@ +At r = 0.062764: q_mu = 3.63588 q_A = 4.34392 CLsb = 0.02827 CLb = 0.57041 CLs = 0.04957 + + -- Asymptotic -- +Observed Limit: r < 0.0628 +Expected 2.5%: r < 0.0295 +Expected 16.0%: r < 0.0407 +Expected 50.0%: r < 0.0581 +Expected 84.0%: r < 0.0864 +Expected 97.5%: r < 0.1255 + +Done in 0.01 min (cpu), 0.02 min (real) diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.root new file mode 100644 index 0000000..45ab3ee Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.txt new file mode 100644 index 0000000..8ae8abf --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200.txt @@ -0,0 +1,34 @@ +# X -> HH -> bbbb +# 1/16/2016 +# Souvik Das + +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_1200.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 213.83 917 +---------- +lumi lnN 1.03 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 1213.72 0.762811 +signal_p1 param 45.0076 0.608279 +signal_p2 param 2.9756 0.346495 +signal_p3 param 1.35108 0.0527399 +bgFloat lnU - 2.00 +bg_p0 param 536.148 3.01343 +bg_p1 param 100 0.696456 +bg_p2 param 0.380864 0.0062095 diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200_Asymptotic.log b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200_Asymptotic.log new file mode 100644 index 0000000..76f1e71 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX1200_Asymptotic.log @@ -0,0 +1,11 @@ +At r = 0.043690: q_mu = 4.77037 q_A = 2.11299 CLsb = 0.00895 CLb = 0.18034 CLs = 0.04963 + + -- Asymptotic -- +Observed Limit: r < 0.0437 +Expected 2.5%: r < 0.0305 +Expected 16.0%: r < 0.0428 +Expected 50.0%: r < 0.0620 +Expected 84.0%: r < 0.0922 +Expected 97.5%: r < 0.1347 + +Done in 0.01 min (cpu), 0.02 min (real) diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.root new file mode 100644 index 0000000..1e69305 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.txt new file mode 100644 index 0000000..bf51bcb --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX350.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_350.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 4.65 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 351.89 0.249364 +signal_p1 param 8.2908 0.228975 +signal_p2 param 0.59 0.0203014 +signal_p3 param 0.99 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.root new file mode 100644 index 0000000..c5d543b Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.txt new file mode 100644 index 0000000..c5160c3 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400.txt @@ -0,0 +1,35 @@ +# X -> HH -> bbbb +# 1/16/2016 +# Souvik Das + +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_400.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 17.701 917 +---------- +lumi lnN 1.03 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 403.547 0.249364 +signal_p1 param 7.6108 0.228975 +signal_p2 param 0.523293 0.0203014 +signal_p3 param 1.24623 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 536.148 3.01343 +bg_p1 param 100 0.696456 +bg_p2 param 0.380864 0.0062095 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400_Asymptotic.log b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400_Asymptotic.log new file mode 100644 index 0000000..ea94e49 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX400_Asymptotic.log @@ -0,0 +1,11 @@ +At r = 0.470984: q_mu = 4.64907 q_A = 2.29787 CLsb = 0.01097 CLb = 0.21902 CLs = 0.05009 + + -- Asymptotic -- +Observed Limit: r < 0.4710 +Expected 2.5%: r < 0.2734 +Expected 16.0%: r < 0.4245 +Expected 50.0%: r < 0.6895 +Expected 84.0%: r < 1.1127 +Expected 97.5%: r < 1.7045 + +Done in 0.03 min (cpu), 0.04 min (real) diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.root new file mode 100644 index 0000000..6bd0113 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.txt new file mode 100644 index 0000000..44c99d8 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX450.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_450.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 61.96 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 452.547 0.249364 +signal_p1 param 12.6108 0.228975 +signal_p2 param 1.203293 0.0203014 +signal_p3 param 4.14623 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.root new file mode 100644 index 0000000..e944a77 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.txt new file mode 100644 index 0000000..81c9833 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX500.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_500.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 109.319 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 502.547 0.249364 +signal_p1 param 15.6108 0.228975 +signal_p2 param 1.503293 0.0203014 +signal_p3 param 3.14623 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.root new file mode 100644 index 0000000..5058c4c Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.txt new file mode 100644 index 0000000..e2bfe62 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX550.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_550.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 139.059 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 553.991 0.249364 +signal_p1 param 13.6108 0.228975 +signal_p2 param 1.073293 0.0203014 +signal_p3 param 0.930811 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.root new file mode 100644 index 0000000..645e2c1 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.txt new file mode 100644 index 0000000..5309623 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600.txt @@ -0,0 +1,36 @@ +# X -> HH -> bbbb +# 1/16/2016 +# Souvik Das + +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_600.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 154.161 917 +---------- +lumi lnN 1.03 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 608.827 0.276612 +signal_p1 param 16.1163 0.313826 +signal_p2 param 1.18225 0.0380517 +signal_p3 param 1.11006 0.044648 +bgFloat lnU - 2.00 +bg_p0 param 536.148 3.01343 +bg_p1 param 100 0.696456 +bg_p2 param 0.380864 0.0062095 + + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600_Asymptotic.log b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600_Asymptotic.log new file mode 100644 index 0000000..31f3a30 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX600_Asymptotic.log @@ -0,0 +1,11 @@ +At r = 0.210516: q_mu = 3.22050 q_A = 5.79804 CLsb = 0.03636 CLb = 0.73017 CLs = 0.04980 + + -- Asymptotic -- +Observed Limit: r < 0.2105 +Expected 2.5%: r < 0.0820 +Expected 16.0%: r < 0.1133 +Expected 50.0%: r < 0.1646 +Expected 84.0%: r < 0.2439 +Expected 97.5%: r < 0.3531 + +Done in 0.04 min (cpu), 0.05 min (real) diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.root new file mode 100644 index 0000000..2718ef4 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.txt new file mode 100644 index 0000000..de1153a --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX650.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_650.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 190.763 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 655.547 0.249364 +signal_p1 param 20.6108 0.228975 +signal_p2 param 1.5203293 0.0203014 +signal_p3 param 1.24623 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.root new file mode 100644 index 0000000..b8ee0fa Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.txt new file mode 100644 index 0000000..b866aae --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX700.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_700.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 200.727 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 706.547 0.249364 +signal_p1 param 21.6108 0.228975 +signal_p2 param 1.4703293 0.0203014 +signal_p3 param 1.18623 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.root new file mode 100644 index 0000000..e8856ac Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.txt new file mode 100644 index 0000000..75586ba --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800.txt @@ -0,0 +1,35 @@ +# X -> HH -> bbbb +# 1/16/2016 +# Souvik Das + +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_800.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 243.52 917 +---------- +lumi lnN 1.03 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 814.591 0.29664 +signal_p1 param 24.7635 0.307182 +signal_p2 param 1.38008 0.0428601 +signal_p3 param 1.347 0.0414381 +bgFloat lnU - 2.00 +bg_p0 param 536.148 3.01343 +bg_p1 param 100 0.696456 +bg_p2 param 0.380864 0.0062095 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800_Asymptotic.log b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800_Asymptotic.log new file mode 100644 index 0000000..4aa5969 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX800_Asymptotic.log @@ -0,0 +1,11 @@ +At r = 0.109394: q_mu = 3.21646 q_A = 5.81451 CLsb = 0.03645 CLb = 0.73167 CLs = 0.04982 + + -- Asymptotic -- +Observed Limit: r < 0.1094 +Expected 2.5%: r < 0.0437 +Expected 16.0%: r < 0.0597 +Expected 50.0%: r < 0.0854 +Expected 84.0%: r < 0.1267 +Expected 97.5%: r < 0.1823 + +Done in 0.02 min (cpu), 0.02 min (real) diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.root new file mode 100644 index 0000000..943b9ac Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.txt b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.txt new file mode 100644 index 0000000..997e118 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/HbbHbb_13TeV_mX900.txt @@ -0,0 +1,31 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_900.root HbbHbb:signal +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +# Observation +bin HbbHbb +observation -1 +---------- +# Expectation +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 240.728 320 +---------- +lumi lnN 1.027 - +JER lnN 1.05 - +bTag lnN 1.10 - +trigger lnN 1.10 - +signal_p0 param 908.905 0.249364 +signal_p1 param 31.9227 0.228975 +signal_p2 param 1.84148 0.0203014 +signal_p3 param 1.27603 0.0596159 +bgFloat lnU - 2.00 +bg_p0 param 529.458 17.631 +bg_p1 param 98.4479 13.9732 +bg_p2 param 0.369042 0.0664958 + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.pdf b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.pdf new file mode 100644 index 0000000..799bdf0 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.pdf differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.png b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.png new file mode 100644 index 0000000..51f749d Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.png differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.root new file mode 100644 index 0000000..9f37120 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimit.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimits_xsec.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimits_xsec.root new file mode 100644 index 0000000..1047cf8 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/UpperLimits_xsec.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/combineAsymptotic.sh b/Datacards/22fb_regression/MMRSelection_chi2_Regression/combineAsymptotic.sh new file mode 100644 index 0000000..5bfb5cd --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/combineAsymptotic.sh @@ -0,0 +1,11 @@ +combine -M Asymptotic HbbHbb_13TeV_mX400.root --noFitAsimov >&! HbbHbb_13TeV_mX400_Asymptotic.log +echo mX400 done +combine -M Asymptotic HbbHbb_13TeV_mX600.root --noFitAsimov >&! HbbHbb_13TeV_mX600_Asymptotic.log +echo mX600 done +combine -M Asymptotic HbbHbb_13TeV_mX800.root --noFitAsimov >&! HbbHbb_13TeV_mX800_Asymptotic.log +echo mX800 done +combine -M Asymptotic HbbHbb_13TeV_mX1000.root --noFitAsimov >&! HbbHbb_13TeV_mX1000_Asymptotic.log +echo mX1000 done +combine -M Asymptotic HbbHbb_13TeV_mX1200.root --noFitAsimov >&! HbbHbb_13TeV_mX1200_Asymptotic.log +echo mX1200 done + diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/draw_limits.c b/Datacards/22fb_regression/MMRSelection_chi2_Regression/draw_limits.c new file mode 100644 index 0000000..b840200 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/draw_limits.c @@ -0,0 +1,5 @@ +{ + std::vector masses={400,450,500,550,650,700,750,800,900,1000,1200}; + gROOT->LoadMacro("../../DrawLimitPlot.cc++"); + DrawLimitPlot(masses, 10, 1e5); +} diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..70aa35d Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/runLimits.sh b/Datacards/22fb_regression/MMRSelection_chi2_Regression/runLimits.sh new file mode 100644 index 0000000..c927d51 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/runLimits.sh @@ -0,0 +1,16 @@ +#!/bin/bash +for i in 350 +#450 500 550 650 700 800 900 1200 +do + echo "mass point $i" + #combine -M MaxLikelihoodFit -t -1 --expectSignal 0 HbbHbb_$i\.txt &> CMS_HH4b_$i\_test.out + #python diffNuisances.py -a mlfit.root -g plots$i\_.root + #combine -M MaxLikelihoodFit -t -1 --expectSignal 1 HbbHbb_$i\.txt &> CMS_HH4b_$i\_test1.out + #python diffNuisances.py -a mlfit.root -g plots2$i\_.root + + text2workspace.py HbbHbb_13TeV_mX$i\.txt -o HbbHbb_13TeV_mX$i\.root + combine -M Asymptotic HbbHbb_13TeV_mX$i\.txt -t -1 --noFitAsimov &> CMS_HH4b_$i\_13TeV_asymptoticCLs.out + #combine HbbHbb_13TeV_mX$i\.txt -M Asymptotic -v2 -t -1 -m $i -n CMSHH4b --rMax 1000 --rMin 0.01 &> CMS_HH4b_$i\_13TeV_asymptoticCLs.out + mv higgsCombineCMSHH4b.Asymptotic.mH$i\.root Limits/CMS_$i\_HH4b_13TeV_asymptoticCLs.root + i#combine -M MaxLikelihoodFit --robustFit=1 --rMin=-5 --rMax=5 -t -1 --plots --out Limits/sig$i bias_study/HbbHbb_$i\.txt &> CMS_HH4b_$i\_13TeV_MaxLikelihood.out +done diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/text2workspace.sh b/Datacards/22fb_regression/MMRSelection_chi2_Regression/text2workspace.sh new file mode 100644 index 0000000..c7c6af3 --- /dev/null +++ b/Datacards/22fb_regression/MMRSelection_chi2_Regression/text2workspace.sh @@ -0,0 +1,5 @@ +text2workspace.py HbbHbb_13TeV_mX400.txt -o HbbHbb_13TeV_mX400.root +text2workspace.py HbbHbb_13TeV_mX600.txt -o HbbHbb_13TeV_mX600.root +text2workspace.py HbbHbb_13TeV_mX800.txt -o HbbHbb_13TeV_mX800.root +text2workspace.py HbbHbb_13TeV_mX1000.txt -o HbbHbb_13TeV_mX1000.root +text2workspace.py HbbHbb_13TeV_mX1200.txt -o HbbHbb_13TeV_mX1200.root diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_background_GaussExp.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_background_GaussExp.root new file mode 100644 index 0000000..4abcc7b Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_data.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_data.root new file mode 100644 index 0000000..f2bd7e5 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_data.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal.root new file mode 100644 index 0000000..5fae159 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1000.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1000.root new file mode 100644 index 0000000..3d8eb06 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1000.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1200.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1200.root new file mode 100644 index 0000000..4aa9df2 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_1200.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_270.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_270.root new file mode 100644 index 0000000..8835bce Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_270.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_300.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_300.root new file mode 100644 index 0000000..f2f6098 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_300.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_350.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_350.root new file mode 100644 index 0000000..1809605 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_350.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_400.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_400.root new file mode 100644 index 0000000..b0450bd Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_400.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_450.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_450.root new file mode 100644 index 0000000..52e450d Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_450.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_500.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_500.root new file mode 100644 index 0000000..73467aa Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_500.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_550.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_550.root new file mode 100644 index 0000000..fa9f561 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_550.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_600.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_600.root new file mode 100644 index 0000000..6baba34 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_600.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_650.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_650.root new file mode 100644 index 0000000..f82cdfc Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_650.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_700.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_700.root new file mode 100644 index 0000000..7e8878e Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_700.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_750.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_750.root new file mode 100644 index 0000000..890d836 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_750.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_800.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_800.root new file mode 100644 index 0000000..84f6c5c Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_800.root differ diff --git a/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_900.root b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_900.root new file mode 100644 index 0000000..701b8e0 Binary files /dev/null and b/Datacards/22fb_regression/MMRSelection_chi2_Regression/w_signal_900.root differ diff --git a/Datacards/22fb_regression/MMR_1000/c_H1_mass_1000.png b/Datacards/22fb_regression/MMR_1000/c_H1_mass_1000.png new file mode 100644 index 0000000..ba00237 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/c_H1_mass_1000.png differ diff --git a/Datacards/22fb_regression/MMR_1000/c_H2_mass_1000.png b/Datacards/22fb_regression/MMR_1000/c_H2_mass_1000.png new file mode 100644 index 0000000..22f0905 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/c_H2_mass_1000.png differ diff --git a/Datacards/22fb_regression/MMR_1000/c_mX_SR_1000.png b/Datacards/22fb_regression/MMR_1000/c_mX_SR_1000.png new file mode 100644 index 0000000..1d9e526 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/c_mX_SR_1000.png differ diff --git a/Datacards/22fb_regression/MMR_1000/c_mX_SR_KinFit_1000.png b/Datacards/22fb_regression/MMR_1000/c_mX_SR_KinFit_1000.png new file mode 100644 index 0000000..77350ec Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/c_mX_SR_KinFit_1000.png differ diff --git a/Datacards/22fb_regression/MMR_1000/data_bkg.log b/Datacards/22fb_regression/MMR_1000/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_1000/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_1000/datacard_1000.root b/Datacards/22fb_regression/MMR_1000/datacard_1000.root new file mode 100644 index 0000000..5965617 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/datacard_1000.root differ diff --git a/Datacards/22fb_regression/MMR_1000/datacard_1000.txt b/Datacards/22fb_regression/MMR_1000/datacard_1000.txt new file mode 100644 index 0000000..f4c0076 --- /dev/null +++ b/Datacards/22fb_regression/MMR_1000/datacard_1000.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_1000.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 1075.69 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_1000/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_1000/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..84bd067 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_1000/index.html b/Datacards/22fb_regression/MMR_1000/index.html new file mode 100644 index 0000000..ec2c80e --- /dev/null +++ b/Datacards/22fb_regression/MMR_1000/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 1000

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 1075.69
+ sg_p0 = 1017.25 0.898181
+ sg_p1 = 38.0175 0.819895
+ sg_p2 = 1.584 0.116571
+ sg_p3 = 1.42232 0.0796069
+btag lnN 1.02313 -
+ +
diff --git a/Datacards/22fb_regression/MMR_1000/signal1000_sig.log b/Datacards/22fb_regression/MMR_1000/signal1000_sig.log new file mode 100644 index 0000000..b5d0cb5 --- /dev/null +++ b/Datacards/22fb_regression/MMR_1000/signal1000_sig.log @@ -0,0 +1,215 @@ + +Processing test.c... +nSignal_init = 50000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [700,1250] --> [700,1250] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [800,1150] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [700,1250] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [800,1150] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13017.6 FROM MIGRAD STATUS=INITIATE 56 CALLS 57 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.00000e+03 1.00000e+01 0.00000e+00 3.01002e+01 + 2 sg_p1 3.50000e+01 2.00000e+00 0.00000e+00 -5.66674e+01 + 3 sg_p2 1.46644e+00 5.00000e-01 0.00000e+00 4.39183e+01 + 4 sg_p3 7.17570e-01 7.00000e-01 -9.18974e-01 3.40753e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + EIGENVALUES OF SECOND-DERIVATIVE MATRIX: + -1.6370e+00 9.9964e-01 1.0621e+00 3.5752e+00 + MINUIT WARNING IN HESSE + ============== MATRIX FORCED POS-DEF BY ADDING 1.640549 TO DIAGONAL. + FCN=12977.2 FROM HESSE STATUS=NOT POSDEF 27 CALLS 296 TOTAL + EDM=0.0603022 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 9.91831e+02 8.05498e+00 1.62230e-03 6.76655e-02 + 2 sg_p1 4.50000e+01 7.46950e-02 1.56218e-02** at limit ** + 3 sg_p2 2.57190e+00 3.78360e+00 1.46907e-02 6.11405e-03 + 4 sg_p3 1.15744e+00 2.66495e-01 1.62054e-03 -3.58935e+00 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD TERMINATED WITHOUT CONVERGENCE. + FCN=12977.2 FROM MIGRAD STATUS=FAILED 351 CALLS 352 TOTAL + EDM=9.0389 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 9.91808e+02 3.91208e-01 0.00000e+00 -4.60680e+01 + 2 sg_p1 4.50000e+01 7.47029e-02 -0.00000e+00** at limit ** + 3 sg_p2 2.57981e+00 3.73841e-01 0.00000e+00 -8.33793e-01 + 4 sg_p3 1.16084e+00 2.42398e-02 -0.00000e+00 4.77450e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.530e-01 -2.137e-07 6.240e-02 6.727e-03 + -2.137e-07 6.241e-07 -3.134e-07 1.423e-07 + 6.240e-02 -3.134e-07 1.408e-01 5.725e-03 + 6.727e-03 1.423e-07 5.725e-03 5.876e-04 +ERR MATRIX NOT POS-DEF + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.70994 1.000 -0.001 0.425 0.709 + 2 0.01365 -0.001 1.000 -0.001 0.007 + 3 0.63014 0.425 -0.001 1.000 0.629 + 4 0.79654 0.709 0.007 0.629 1.000 + ERR MATRIX NOT POS-DEF + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12977.2 FROM HESSE STATUS=OK 29 CALLS 381 TOTAL + EDM=0.000272011 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 9.91808e+02 8.92966e-02 3.06657e-04 -1.64576e-01 + 2 sg_p1 4.50000e+01 1.92406e-01 1.56124e-02 1.57144e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + 3 sg_p2 2.57981e+00 5.11060e-01 1.49932e-02 3.19313e-02 + 4 sg_p3 1.16084e+00 1.14238e-02 2.95345e-04 -7.31963e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 7.974e-03 4.258e-08 9.033e-04 2.082e-05 + 4.258e-08 1.611e-06 -4.195e-07 -2.749e-09 + 9.033e-04 -4.195e-07 2.649e-01 5.401e-03 + 2.082e-05 -2.749e-09 5.401e-03 1.305e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.02054 1.000 0.000 0.020 0.020 + 2 0.00126 0.000 1.000 -0.001 -0.000 + 3 0.91866 0.020 -0.001 1.000 0.919 + 4 0.91867 0.020 -0.000 0.919 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +1000 +991.808 +- 0.0892966 +45 +- 0.192406 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [750,1250] --> [750,1250] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [850,1150] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [750,1250] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [850,1150] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=12454.2 FROM MIGRAD STATUS=INITIATE 55 CALLS 56 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.01500e+03 7.00000e+00 0.00000e+00 -7.60518e+01 + 2 sg_p1 3.25000e+01 1.50000e+00 0.00000e+00 -5.50057e+01 + 3 sg_p2 1.19765e+00 5.00000e-01 0.00000e+00 6.11522e+01 + 4 sg_p3 1.26162e+00 7.00000e-01 -6.93896e-01 9.71211e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12438.6 FROM MIGRAD STATUS=CONVERGED 184 CALLS 185 TOTAL + EDM=1.59166e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.01725e+03 8.97504e-01 1.84876e-03 6.64007e-04 + 2 sg_p1 3.80175e+01 8.14914e-01 1.00961e-02 1.37379e-02 + 3 sg_p2 1.58400e+00 1.16089e-01 3.35774e-03 5.64552e-02 + 4 sg_p3 1.42232e+00 7.93016e-02 1.84473e-03 -4.39968e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 8.057e-01 -1.701e-02 2.259e-02 -1.724e-02 + -1.701e-02 6.699e-01 4.052e-02 3.057e-02 + 2.259e-02 4.052e-02 1.349e-02 1.619e-03 + -1.724e-02 3.057e-02 1.619e-03 6.290e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.35776 1.000 -0.023 0.217 -0.242 + 2 0.58609 -0.023 1.000 0.426 0.471 + 3 0.48385 0.217 0.426 1.000 0.176 + 4 0.52558 -0.242 0.471 0.176 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12438.6 FROM HESSE STATUS=OK 23 CALLS 208 TOTAL + EDM=1.60934e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 1.01725e+03 8.98181e-01 7.39504e-05 6.43512e-02 + 2 sg_p1 3.80175e+01 8.19895e-01 4.03845e-04 8.26653e-01 + 3 sg_p2 1.58400e+00 1.16571e-01 1.34310e-04 -3.75137e-01 + 4 sg_p3 1.42232e+00 7.96069e-02 7.37893e-05 -6.35552e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 8.069e-01 -1.748e-02 2.279e-02 -1.731e-02 + -1.748e-02 6.781e-01 4.158e-02 3.127e-02 + 2.279e-02 4.158e-02 1.360e-02 1.686e-03 + -1.731e-02 3.127e-02 1.686e-03 6.339e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.35960 1.000 -0.024 0.218 -0.242 + 2 0.59287 -0.024 1.000 0.433 0.477 + 3 0.49031 0.218 0.433 1.000 0.182 + 4 0.53081 -0.242 0.477 0.182 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +1000 +1017.25 +- 0.898181 +38.0175 +- 0.819895 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_1000/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_1000/w_background_GaussExp.root new file mode 100644 index 0000000..e1239c1 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_1000/w_data.root b/Datacards/22fb_regression/MMR_1000/w_data.root new file mode 100644 index 0000000..905c6de Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_1000/w_signal_1000.root b/Datacards/22fb_regression/MMR_1000/w_signal_1000.root new file mode 100644 index 0000000..93a2090 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1000/w_signal_1000.root differ diff --git a/Datacards/22fb_regression/MMR_1200/c_H1_mass_1200.png b/Datacards/22fb_regression/MMR_1200/c_H1_mass_1200.png new file mode 100644 index 0000000..9c54cd8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/c_H1_mass_1200.png differ diff --git a/Datacards/22fb_regression/MMR_1200/c_H2_mass_1200.png b/Datacards/22fb_regression/MMR_1200/c_H2_mass_1200.png new file mode 100644 index 0000000..fefb03b Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/c_H2_mass_1200.png differ diff --git a/Datacards/22fb_regression/MMR_1200/c_mX_SR_1200.png b/Datacards/22fb_regression/MMR_1200/c_mX_SR_1200.png new file mode 100644 index 0000000..6277258 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/c_mX_SR_1200.png differ diff --git a/Datacards/22fb_regression/MMR_1200/c_mX_SR_KinFit_1200.png b/Datacards/22fb_regression/MMR_1200/c_mX_SR_KinFit_1200.png new file mode 100644 index 0000000..39175c8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/c_mX_SR_KinFit_1200.png differ diff --git a/Datacards/22fb_regression/MMR_1200/data_bkg.log b/Datacards/22fb_regression/MMR_1200/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_1200/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_1200/datacard_1200.root b/Datacards/22fb_regression/MMR_1200/datacard_1200.root new file mode 100644 index 0000000..0839f72 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/datacard_1200.root differ diff --git a/Datacards/22fb_regression/MMR_1200/datacard_1200.txt b/Datacards/22fb_regression/MMR_1200/datacard_1200.txt new file mode 100644 index 0000000..b7de3bf --- /dev/null +++ b/Datacards/22fb_regression/MMR_1200/datacard_1200.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_1200.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 768.328 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_1200/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_1200/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..ececb3b Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_1200/index.html b/Datacards/22fb_regression/MMR_1200/index.html new file mode 100644 index 0000000..f177444 --- /dev/null +++ b/Datacards/22fb_regression/MMR_1200/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 1200

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 768.328
+ sg_p0 = 1221.58 1.42414
+ sg_p1 = 46.4455 1.47485
+ sg_p2 = 1.5872 0.145053
+ sg_p3 = 1.31061 0.0993931
+btag lnN 1.00793 -
+ +
diff --git a/Datacards/22fb_regression/MMR_1200/signal1200_sig.log b/Datacards/22fb_regression/MMR_1200/signal1200_sig.log new file mode 100644 index 0000000..a2ba2cd --- /dev/null +++ b/Datacards/22fb_regression/MMR_1200/signal1200_sig.log @@ -0,0 +1,211 @@ + +Processing test.c... +nSignal_init = 50000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [850,1500] --> [850,1500] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [950,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [850,1500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [950,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=9555.24 FROM MIGRAD STATUS=INITIATE 38 CALLS 39 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.20000e+03 2.00000e+01 0.00000e+00 3.69949e+02 + 2 sg_p1 5.50000e+01 3.00000e+00 0.00000e+00 3.54807e+01 + 3 sg_p2 2.50000e+00 5.00000e-01 0.00000e+00 -8.16942e+00 + 4 sg_p3 1.08953e+00 5.00000e-01 -5.99449e-01 3.65823e+01 + ERR DEF= 0.5 + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 3 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== 2.1571 added to diagonal of error matrix + MIGRAD FAILS TO FIND IMPROVEMENT + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9536.74 FROM HESSE STATUS=OK 29 CALLS 260 TOTAL + EDM=0.0238285 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.19173e+03 1.91828e+00 9.59380e-04 -1.54994e-03 + 2 sg_p1 5.33164e+01 1.52490e+00 4.75674e-03 3.36830e-03 + 3 sg_p2 4.04375e+00 3.84869e+00 5.00000e-01 -1.90628e-01 + 4 sg_p3 1.13877e+00 9.07407e-02 1.85052e-03 -2.50078e-04 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + FCN=9536.74 FROM MIGRAD STATUS=CONVERGED 271 CALLS 272 TOTAL + EDM=1.75081e-05 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 0.7 per cent + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.19173e+03 1.91828e+00 4.24958e-06 -8.79106e-05 + 2 sg_p1 5.33159e+01 1.52490e+00 -3.63432e-05 -1.11013e-04 + 3 sg_p2 4.48226e+00 3.79490e+00 2.50000e-01 -5.16712e-03 + 4 sg_p3 1.13875e+00 9.07400e-02 -1.10121e-05 -6.82038e-04 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.680e+00 -1.681e+00 -3.815e-04 -1.143e-01 + -1.681e+00 2.333e+00 3.942e-04 9.866e-02 + -3.815e-04 3.942e-04 3.128e+00 2.722e-05 + -1.143e-01 9.866e-02 2.722e-05 8.239e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.67367 1.000 -0.574 -0.000 -0.656 + 2 0.72547 -0.574 1.000 0.000 0.712 + 3 0.00017 -0.000 0.000 1.000 0.000 + 4 0.77339 -0.656 0.712 0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9536.74 FROM HESSE STATUS=OK 29 CALLS 301 TOTAL + EDM=0.00129178 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 1.19173e+03 1.92156e+00 3.83752e-04 -8.28114e-02 + 2 sg_p1 5.33159e+01 1.52814e+00 1.90270e-03 -1.12514e-01 + 3 sg_p2 4.48226e+00 3.19040e+00 5.00000e-01 9.15560e-01 + 4 sg_p3 1.13875e+00 9.09120e-02 7.40206e-04 -5.75794e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.693e+00 -1.693e+00 6.176e-08 -1.149e-01 + -1.693e+00 2.343e+00 -5.117e-08 9.925e-02 + 6.176e-08 -5.117e-08 1.123e+02 -3.173e-09 + -1.149e-01 9.925e-02 -3.173e-09 8.270e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.67505 1.000 -0.576 0.000 -0.658 + 2 0.72687 -0.576 1.000 -0.000 0.713 + 3 0.00000 0.000 -0.000 1.000 -0.000 + 4 0.77439 -0.658 0.713 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +1200 +1191.73 +- 1.92156 +53.3159 +- 1.52814 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [850,1500] --> [850,1500] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [950,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [850,1500] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [950,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=9436.51 FROM MIGRAD STATUS=INITIATE 31 CALLS 32 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.20000e+03 2.00000e+01 0.00000e+00 -8.90528e+02 + 2 sg_p1 5.50000e+01 3.00000e+00 0.00000e+00 3.94676e+01 + 3 sg_p2 1.33418e+00 5.00000e-01 -4.85136e-01 1.53291e+00 + 4 sg_p3 2.50000e+00 5.00000e-01 0.00000e+00 1.04608e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9321.55 FROM MIGRAD STATUS=CONVERGED 168 CALLS 169 TOTAL + EDM=0.000134177 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 1.22158e+03 1.42307e+00 8.56551e-04 5.67250e-01 + 2 sg_p1 4.64455e+01 1.47777e+00 5.29940e-03 7.72962e-02 + 3 sg_p2 1.58720e+00 1.47696e-01 4.06588e-03 -1.92383e-01 + 4 sg_p3 1.31061e+00 9.93201e-02 2.04078e-03 -5.46646e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.025e+00 -4.389e-01 2.695e-02 -5.745e-02 + -4.389e-01 2.194e+00 1.187e-01 1.007e-01 + 2.695e-02 1.187e-01 2.184e-02 4.848e-03 + -5.745e-02 1.007e-01 4.848e-03 9.871e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.49353 1.000 -0.208 0.128 -0.406 + 2 0.76244 -0.208 1.000 0.542 0.684 + 3 0.59678 0.128 0.542 1.000 0.330 + 4 0.73627 -0.406 0.684 0.330 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=9321.55 FROM HESSE STATUS=OK 23 CALLS 192 TOTAL + EDM=0.000132018 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 1.22158e+03 1.42414e+00 1.71310e-04 2.17562e-01 + 2 sg_p1 4.64455e+01 1.47485e+00 1.05988e-03 -6.06870e-01 + 3 sg_p2 1.58720e+00 1.45053e-01 1.62635e-04 -3.73763e-01 + 4 sg_p3 1.31061e+00 9.93931e-02 8.16311e-05 -4.95825e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.028e+00 -4.487e-01 2.597e-02 -5.800e-02 + -4.487e-01 2.186e+00 1.154e-01 1.007e-01 + 2.597e-02 1.154e-01 2.107e-02 4.726e-03 + -5.800e-02 1.007e-01 4.726e-03 9.886e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.49468 1.000 -0.213 0.126 -0.410 + 2 0.76135 -0.213 1.000 0.538 0.685 + 3 0.59236 0.126 0.538 1.000 0.327 + 4 0.73673 -0.410 0.685 0.327 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +1200 +1221.58 +- 1.42414 +46.4455 +- 1.47485 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_1200/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_1200/w_background_GaussExp.root new file mode 100644 index 0000000..8e538f4 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_1200/w_data.root b/Datacards/22fb_regression/MMR_1200/w_data.root new file mode 100644 index 0000000..55aae2a Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_1200/w_signal_1200.root b/Datacards/22fb_regression/MMR_1200/w_signal_1200.root new file mode 100644 index 0000000..44f9c14 Binary files /dev/null and b/Datacards/22fb_regression/MMR_1200/w_signal_1200.root differ diff --git a/Datacards/22fb_regression/MMR_400/c_H1_mass_400.png b/Datacards/22fb_regression/MMR_400/c_H1_mass_400.png new file mode 100644 index 0000000..700eb68 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/c_H1_mass_400.png differ diff --git a/Datacards/22fb_regression/MMR_400/c_H2_mass_400.png b/Datacards/22fb_regression/MMR_400/c_H2_mass_400.png new file mode 100644 index 0000000..4a9c971 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/c_H2_mass_400.png differ diff --git a/Datacards/22fb_regression/MMR_400/c_mX_SR_400.png b/Datacards/22fb_regression/MMR_400/c_mX_SR_400.png new file mode 100644 index 0000000..d21750c Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/c_mX_SR_400.png differ diff --git a/Datacards/22fb_regression/MMR_400/c_mX_SR_KinFit_400.png b/Datacards/22fb_regression/MMR_400/c_mX_SR_KinFit_400.png new file mode 100644 index 0000000..f8bcb62 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/c_mX_SR_KinFit_400.png differ diff --git a/Datacards/22fb_regression/MMR_400/data_bkg.log b/Datacards/22fb_regression/MMR_400/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_400/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_400/datacard_400.root b/Datacards/22fb_regression/MMR_400/datacard_400.root new file mode 100644 index 0000000..45575f0 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/datacard_400.root differ diff --git a/Datacards/22fb_regression/MMR_400/datacard_400.txt b/Datacards/22fb_regression/MMR_400/datacard_400.txt new file mode 100644 index 0000000..5a7046e --- /dev/null +++ b/Datacards/22fb_regression/MMR_400/datacard_400.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_400.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 79.2469 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_400/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_400/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..3b5bb5e Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_400/index.html b/Datacards/22fb_regression/MMR_400/index.html new file mode 100644 index 0000000..4376ddb --- /dev/null +++ b/Datacards/22fb_regression/MMR_400/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 400

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 79.2469
+ sg_p0 = 405.529 0.589025
+ sg_p1 = 10.6828 0.458626
+ sg_p2 = 0.90223 0.0678267
+ sg_p3 = 4.13622 2.89608
+btag lnN 1.07816 -
+ +
diff --git a/Datacards/22fb_regression/MMR_400/signal400_sig.log b/Datacards/22fb_regression/MMR_400/signal400_sig.log new file mode 100644 index 0000000..3ac033c --- /dev/null +++ b/Datacards/22fb_regression/MMR_400/signal400_sig.log @@ -0,0 +1,202 @@ + +Processing test.c... +nSignal_init = 120200 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [200,650] --> [200,650] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [300,550] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [200,650] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [300,550] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=1980.65 FROM MIGRAD STATUS=INITIATE 51 CALLS 52 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.95000e+02 5.00000e+00 0.00000e+00 5.04733e+01 + 2 sg_p1 1.75000e+01 2.50000e+00 0.00000e+00 8.33959e+00 + 3 sg_p2 6.68200e-01 5.00000e-01 0.00000e+00 -1.20662e+02 + 4 sg_p3 1.37535e+00 7.00000e-01 -6.52335e-01 3.54120e+00 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=1970.26 FROM MIGRAD STATUS=CONVERGED 196 CALLS 197 TOTAL + EDM=6.228e-07 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 3.95293e+02 1.23232e+00 1.37076e-03 -1.23706e-02 + 2 sg_p1 2.10706e+01 9.85599e-01 2.09136e-03 8.46049e-03 + 3 sg_p2 1.06003e+00 1.01348e-01 1.23010e-03 -6.86346e-03 + 4 sg_p3 2.42853e+00 6.64277e-01 6.09212e-03 -1.00670e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.520e+00 3.819e-01 4.996e-02 -9.734e-03 + 3.819e-01 9.736e-01 5.348e-02 1.064e-01 + 4.996e-02 5.348e-02 1.028e-02 5.470e-03 + -9.734e-03 1.064e-01 5.470e-03 4.472e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.42144 1.000 0.314 0.400 -0.012 + 2 0.55955 0.314 1.000 0.535 0.161 + 3 0.58783 0.400 0.535 1.000 0.081 + 4 0.17456 -0.012 0.161 0.081 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=1970.26 FROM HESSE STATUS=OK 23 CALLS 220 TOTAL + EDM=6.22314e-07 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 3.95293e+02 1.23274e+00 2.74152e-04 1.17363e-02 + 2 sg_p1 2.10706e+01 9.87277e-01 8.36546e-05 2.89686e-01 + 3 sg_p2 1.06003e+00 1.01471e-01 4.92040e-05 -6.13813e-01 + 4 sg_p3 2.42853e+00 6.65086e-01 2.43685e-04 -3.11130e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.521e+00 3.827e-01 5.012e-02 -9.944e-03 + 3.827e-01 9.769e-01 5.378e-02 1.105e-01 + 5.012e-02 5.378e-02 1.030e-02 5.694e-03 + -9.944e-03 1.105e-01 5.694e-03 4.483e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.42211 1.000 0.314 0.400 -0.012 + 2 0.56163 0.314 1.000 0.536 0.167 + 3 0.58918 0.400 0.536 1.000 0.084 + 4 0.18076 -0.012 0.167 0.084 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +400 +395.293 +- 1.23274 +21.0706 +- 0.987277 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [260,590] --> [260,590] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [360,490] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [260,590] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [360,490] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=1727.99 FROM MIGRAD STATUS=INITIATE 43 CALLS 44 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.00000e+02 4.00000e+00 0.00000e+00 -1.98972e+02 + 2 sg_p1 1.50000e+01 2.00000e+00 0.00000e+00 6.79303e+01 + 3 sg_p2 1.01310e+00 5.00000e-01 -6.36966e-01 -1.56417e+00 + 4 sg_p3 3.50000e+00 7.00000e-01 0.00000e+00 -8.11248e-01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=1669.27 FROM MIGRAD STATUS=CONVERGED 144 CALLS 145 TOTAL + EDM=3.15957e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.05529e+02 5.90432e-01 8.32880e-04 -1.04665e-01 + 2 sg_p1 1.06828e+01 4.61366e-01 1.30135e-03 8.19480e-02 + 3 sg_p2 9.02230e-01 6.80658e-02 8.87943e-04 -5.90267e-02 + 4 sg_p3 4.13622e+00 4.89560e+00 5.28881e-02 -5.82162e-04 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.487e-01 5.674e-02 1.027e-02 2.885e-03 + 5.674e-02 2.130e-01 1.323e-02 -1.854e-02 + 1.027e-02 1.323e-02 4.635e-03 -9.834e-04 + 2.885e-03 -1.854e-02 -9.834e-04 3.080e+02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.27846 1.000 0.208 0.255 0.000 + 2 0.43377 0.208 1.000 0.421 -0.002 + 3 0.45469 0.255 0.421 1.000 -0.001 + 4 0.00242 0.000 -0.002 -0.001 1.000 + ********** + ** 18 **HESSE 2000 + ********** + MINUIT WARNING IN HESSE + ============== Negative diagonal element 4 in Error Matrix + MINUIT WARNING IN HESSE + ============== 4.21601 added to diagonal of error matrix + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=1669.27 FROM HESSE STATUS=OK 29 CALLS 174 TOTAL + EDM=2.29652e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.05529e+02 5.89025e-01 1.66576e-04 2.80100e-01 + 2 sg_p1 1.06828e+01 4.58626e-01 2.60269e-04 -4.46394e-01 + 3 sg_p2 9.02230e-01 6.78267e-02 1.77589e-04 -6.93338e-01 + 4 sg_p3 4.13622e+00 2.89608e+00 5.00000e-01 1.82794e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.471e-01 5.567e-02 1.015e-02 1.085e-05 + 5.567e-02 2.105e-01 1.302e-02 -7.759e-05 + 1.015e-02 1.302e-02 4.602e-03 -4.127e-06 + 1.085e-05 -7.759e-05 -4.127e-06 1.185e+01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.27662 1.000 0.206 0.254 0.000 + 2 0.43095 0.206 1.000 0.418 -0.000 + 3 0.45219 0.254 0.418 1.000 -0.000 + 4 0.00005 0.000 -0.000 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +400 +405.529 +- 0.589025 +10.6828 +- 0.458626 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_400/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_400/w_background_GaussExp.root new file mode 100644 index 0000000..14358c0 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_400/w_data.root b/Datacards/22fb_regression/MMR_400/w_data.root new file mode 100644 index 0000000..f30a925 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_400/w_signal_400.root b/Datacards/22fb_regression/MMR_400/w_signal_400.root new file mode 100644 index 0000000..7231cc4 Binary files /dev/null and b/Datacards/22fb_regression/MMR_400/w_signal_400.root differ diff --git a/Datacards/22fb_regression/MMR_450/c_H1_mass_450.png b/Datacards/22fb_regression/MMR_450/c_H1_mass_450.png new file mode 100644 index 0000000..9c7cdda Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/c_H1_mass_450.png differ diff --git a/Datacards/22fb_regression/MMR_450/c_H2_mass_450.png b/Datacards/22fb_regression/MMR_450/c_H2_mass_450.png new file mode 100644 index 0000000..69436b7 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/c_H2_mass_450.png differ diff --git a/Datacards/22fb_regression/MMR_450/c_mX_SR_450.png b/Datacards/22fb_regression/MMR_450/c_mX_SR_450.png new file mode 100644 index 0000000..fb5290d Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/c_mX_SR_450.png differ diff --git a/Datacards/22fb_regression/MMR_450/c_mX_SR_KinFit_450.png b/Datacards/22fb_regression/MMR_450/c_mX_SR_KinFit_450.png new file mode 100644 index 0000000..2ecc263 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/c_mX_SR_KinFit_450.png differ diff --git a/Datacards/22fb_regression/MMR_450/data_bkg.log b/Datacards/22fb_regression/MMR_450/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_450/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_450/datacard_450.root b/Datacards/22fb_regression/MMR_450/datacard_450.root new file mode 100644 index 0000000..a56e121 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/datacard_450.root differ diff --git a/Datacards/22fb_regression/MMR_450/datacard_450.txt b/Datacards/22fb_regression/MMR_450/datacard_450.txt new file mode 100644 index 0000000..cb25de2 --- /dev/null +++ b/Datacards/22fb_regression/MMR_450/datacard_450.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_450.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 268.245 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_450/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_450/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..423dff4 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_450/index.html b/Datacards/22fb_regression/MMR_450/index.html new file mode 100644 index 0000000..e3519f5 --- /dev/null +++ b/Datacards/22fb_regression/MMR_450/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 450

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 268.245
+ sg_p0 = 454.218 0.378764
+ sg_p1 = 11.6496 0.31077
+ sg_p2 = 1.19814 0.0676831
+ sg_p3 = 1.72493 0.129107
+btag lnN 1.07788 -
+ +
diff --git a/Datacards/22fb_regression/MMR_450/signal450_sig.log b/Datacards/22fb_regression/MMR_450/signal450_sig.log new file mode 100644 index 0000000..3e98a38 --- /dev/null +++ b/Datacards/22fb_regression/MMR_450/signal450_sig.log @@ -0,0 +1,208 @@ + +Processing test.c... +nSignal_init = 100000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [270,640] --> [270,640] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [370,540] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [270,640] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [370,540] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=5502.44 FROM MIGRAD STATUS=INITIATE 36 CALLS 37 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.40000e+02 6.00000e+00 0.00000e+00 -5.62823e+01 + 2 sg_p1 2.00000e+01 2.00000e+00 0.00000e+00 -1.08470e+02 + 3 sg_p2 1.26795e+00 5.00000e-01 -5.15327e-01 6.42966e+01 + 4 sg_p3 3.50000e+00 7.00000e-01 0.00000e+00 -1.57847e-02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + MINUIT WARNING IN HESSE + ============== Second derivative enters zero, param 4 + MINUIT WARNING IN HESSE + ============== Second derivative zero for parameter4 + MNHESS FAILS AND WILL RETURN DIAGONAL MATRIX. + FCN=5486.13 FROM MIGRAD STATUS=CONVERGED 147 CALLS 148 TOTAL + EDM=2.01444e-06 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 100.0 per cent + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.42724e+02 7.07631e-01 1.21128e-03 2.08055e-02 + 2 sg_p1 2.39143e+01 5.29744e-01 2.94317e-03 9.23703e-03 + 3 sg_p2 1.94071e+00 2.36609e-01 4.99142e-03 1.27853e-02 + 4 sg_p3 4.94606e+00 9.74110e-01 -5.58211e-03 0.00000e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 5.008e-01 0.000e+00 0.000e+00 0.000e+00 + 0.000e+00 2.809e-01 0.000e+00 0.000e+00 + 0.000e+00 0.000e+00 5.616e-02 0.000e+00 + 0.000e+00 0.000e+00 0.000e+00 9.800e-01 +ERR MATRIX APPROXIMATE + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.00000 1.000 0.000 0.000 0.000 + 2 0.00000 0.000 1.000 0.000 0.000 + 3 0.00000 0.000 0.000 1.000 0.000 + 4 0.00000 0.000 0.000 0.000 1.000 + ERR MATRIX APPROXIMATE + ********** + ** 18 **HESSE 2000 + ********** + MINUIT WARNING IN HESSE + ============== Second derivative zero for parameter4 + MNHESS FAILS AND WILL RETURN DIAGONAL MATRIX. + FCN=5486.13 FROM HESSE STATUS=FAILED 9 CALLS 157 TOTAL + EDM=2.01444e-06 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 100.0 per cent + EXT PARAMETER APPROXIMATE INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.42724e+02 7.07631e-01 1.21128e-03 9.09344e-02 + 2 sg_p1 2.39143e+01 5.29744e-01 2.94317e-03 4.02188e-01 + 3 sg_p2 1.94071e+00 2.36609e-01 4.99142e-03 -2.25626e-01 + 4 sg_p3 6.29711e+00 1.42024e+00 -5.58211e-03 2.71567e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 5.008e-01 0.000e+00 0.000e+00 0.000e+00 + 0.000e+00 2.809e-01 0.000e+00 0.000e+00 + 0.000e+00 0.000e+00 5.616e-02 0.000e+00 + 0.000e+00 0.000e+00 0.000e+00 9.800e-01 +ERR MATRIX APPROXIMATE + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.00000 1.000 0.000 0.000 0.000 + 2 0.00000 0.000 1.000 0.000 0.000 + 3 0.00000 0.000 0.000 1.000 0.000 + 4 0.00000 0.000 0.000 0.000 1.000 + ERR MATRIX APPROXIMATE +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +450 +442.724 +- 0.707631 +23.9143 +- 0.529744 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [300,640] --> [300,640] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [400,540] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [300,640] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [400,540] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=4801.97 FROM MIGRAD STATUS=INITIATE 52 CALLS 53 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.55000e+02 5.00000e+00 0.00000e+00 8.89255e+01 + 2 sg_p1 1.25000e+01 1.50000e+00 0.00000e+00 4.15116e+01 + 3 sg_p2 1.33151e+00 5.00000e-01 0.00000e+00 2.03481e+00 + 4 sg_p3 1.81007e+00 7.00000e-01 -5.03893e-01 3.78281e-01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4797.72 FROM MIGRAD STATUS=CONVERGED 118 CALLS 119 TOTAL + EDM=6.89813e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.54218e+02 3.78704e-01 6.92631e-04 9.51396e-02 + 2 sg_p1 1.16496e+01 3.10484e-01 1.74077e-03 -5.09466e-02 + 3 sg_p2 1.19814e+00 6.76357e-02 1.31943e-03 5.84349e-02 + 4 sg_p3 1.72493e+00 1.29023e-01 1.99025e-03 1.51779e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.434e-01 1.953e-02 7.002e-03 -2.686e-03 + 1.953e-02 9.646e-02 9.373e-03 9.248e-03 + 7.002e-03 9.373e-03 4.576e-03 9.566e-04 + -2.686e-03 9.248e-03 9.566e-04 1.666e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.29436 1.000 0.166 0.273 -0.055 + 2 0.48621 0.166 1.000 0.446 0.231 + 3 0.49046 0.273 0.446 1.000 0.110 + 4 0.25110 -0.055 0.231 0.110 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4797.72 FROM HESSE STATUS=OK 23 CALLS 142 TOTAL + EDM=6.90236e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.54218e+02 3.78764e-01 1.38526e-04 -3.12981e-02 + 2 sg_p1 1.16496e+01 3.10770e-01 3.48154e-04 -1.13636e-01 + 3 sg_p2 1.19814e+00 6.76831e-02 2.63886e-04 -5.47721e-01 + 4 sg_p3 1.72493e+00 1.29107e-01 7.96101e-05 -5.31889e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.435e-01 1.951e-02 7.018e-03 -2.708e-03 + 1.951e-02 9.663e-02 9.409e-03 9.353e-03 + 7.018e-03 9.409e-03 4.583e-03 9.692e-04 + -2.708e-03 9.353e-03 9.692e-04 1.668e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.29485 1.000 0.166 0.274 -0.055 + 2 0.48765 0.166 1.000 0.447 0.233 + 3 0.49154 0.274 0.447 1.000 0.111 + 4 0.25347 -0.055 0.233 0.111 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +450 +454.218 +- 0.378764 +11.6496 +- 0.31077 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_450/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_450/w_background_GaussExp.root new file mode 100644 index 0000000..6fd08e9 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_450/w_data.root b/Datacards/22fb_regression/MMR_450/w_data.root new file mode 100644 index 0000000..21f19a8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_450/w_signal_450.root b/Datacards/22fb_regression/MMR_450/w_signal_450.root new file mode 100644 index 0000000..259acc8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_450/w_signal_450.root differ diff --git a/Datacards/22fb_regression/MMR_500/c_H1_mass_500.png b/Datacards/22fb_regression/MMR_500/c_H1_mass_500.png new file mode 100644 index 0000000..eb6a142 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/c_H1_mass_500.png differ diff --git a/Datacards/22fb_regression/MMR_500/c_H2_mass_500.png b/Datacards/22fb_regression/MMR_500/c_H2_mass_500.png new file mode 100644 index 0000000..83adec6 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/c_H2_mass_500.png differ diff --git a/Datacards/22fb_regression/MMR_500/c_mX_SR_500.png b/Datacards/22fb_regression/MMR_500/c_mX_SR_500.png new file mode 100644 index 0000000..45b3b1b Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/c_mX_SR_500.png differ diff --git a/Datacards/22fb_regression/MMR_500/c_mX_SR_KinFit_500.png b/Datacards/22fb_regression/MMR_500/c_mX_SR_KinFit_500.png new file mode 100644 index 0000000..0267dab Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/c_mX_SR_KinFit_500.png differ diff --git a/Datacards/22fb_regression/MMR_500/data_bkg.log b/Datacards/22fb_regression/MMR_500/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_500/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_500/datacard_500.root b/Datacards/22fb_regression/MMR_500/datacard_500.root new file mode 100644 index 0000000..0d63383 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/datacard_500.root differ diff --git a/Datacards/22fb_regression/MMR_500/datacard_500.txt b/Datacards/22fb_regression/MMR_500/datacard_500.txt new file mode 100644 index 0000000..7d93a5c --- /dev/null +++ b/Datacards/22fb_regression/MMR_500/datacard_500.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_500.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 456.095 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_500/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_500/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..890c4d8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_500/index.html b/Datacards/22fb_regression/MMR_500/index.html new file mode 100644 index 0000000..0454b50 --- /dev/null +++ b/Datacards/22fb_regression/MMR_500/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 500

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 456.095
+ sg_p0 = 504.675 0.526208
+ sg_p1 = 15.1888 0.400327
+ sg_p2 = 1.39071 0.0942604
+ sg_p3 = 3.6281 2.94317
+btag lnN 1.08203 -
+ +
diff --git a/Datacards/22fb_regression/MMR_500/signal500_sig.log b/Datacards/22fb_regression/MMR_500/signal500_sig.log new file mode 100644 index 0000000..6e13c5b --- /dev/null +++ b/Datacards/22fb_regression/MMR_500/signal500_sig.log @@ -0,0 +1,202 @@ + +Processing test.c... +nSignal_init = 46000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [320,700] --> [320,700] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [420,600] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,700] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [420,600] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=4441 FROM MIGRAD STATUS=INITIATE 54 CALLS 55 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.90000e+02 6.00000e+00 0.00000e+00 7.70654e-01 + 2 sg_p1 2.25000e+01 2.50000e+00 0.00000e+00 -3.84073e+01 + 3 sg_p2 1.09113e+00 5.00000e-01 0.00000e+00 -4.06987e+01 + 4 sg_p3 1.60740e+00 7.00000e-01 -5.71320e-01 -1.95804e+00 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4423.04 FROM MIGRAD STATUS=CONVERGED 195 CALLS 196 TOTAL + EDM=4.11431e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 4.92233e+02 8.97599e-01 1.36107e-03 3.90542e-02 + 2 sg_p1 2.66836e+01 7.05475e-01 2.61249e-03 1.04830e-02 + 3 sg_p2 2.31490e+00 5.37755e-01 9.38468e-03 -2.99373e-02 + 4 sg_p3 2.71746e+00 2.50360e+00 3.24329e-02 -1.62725e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 8.059e-01 3.906e-03 7.250e-02 -1.930e-10 + 3.906e-03 4.983e-01 1.179e-01 7.246e-10 + 7.250e-02 1.179e-01 2.938e-01 -5.668e-10 + -1.930e-10 7.246e-10 -5.668e-10 7.902e+00 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.15473 1.000 0.006 0.149 -0.000 + 2 0.31068 0.006 1.000 0.308 0.000 + 3 0.34138 0.149 0.308 1.000 -0.000 + 4 0.00000 -0.000 0.000 -0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=4423.04 FROM HESSE STATUS=OK 33 CALLS 229 TOTAL + EDM=3.98596e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 4.92233e+02 8.98300e-01 2.72214e-04 7.44873e-02 + 2 sg_p1 2.66836e+01 7.07739e-01 1.04500e-04 3.41271e-01 + 3 sg_p2 2.31490e+00 5.39993e-01 3.75387e-04 -7.41092e-02 + 4 sg_p3 2.71746e+00 7.96568e-01 2.88925e-01 -2.25490e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 8.072e-01 5.352e-03 7.521e-02 -4.793e-11 + 5.352e-03 5.015e-01 1.223e-01 -7.793e-11 + 7.521e-02 1.223e-01 2.963e-01 -1.888e-10 + -4.793e-11 -7.793e-11 -1.888e-10 6.464e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.15958 1.000 0.008 0.154 -0.000 + 2 0.31984 0.008 1.000 0.317 -0.000 + 3 0.35138 0.154 0.317 1.000 -0.000 + 4 0.00000 -0.000 -0.000 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +500 +492.233 +- 0.8983 +26.6836 +- 0.707739 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [350,700] --> [350,700] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [450,600] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [350,700] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [450,600] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=3973.64 FROM MIGRAD STATUS=INITIATE 34 CALLS 35 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.05000e+02 5.00000e+00 0.00000e+00 3.09888e+01 + 2 sg_p1 1.50000e+01 2.00000e+00 0.00000e+00 -1.74933e+01 + 3 sg_p2 1.41383e+00 5.00000e-01 -4.49446e-01 8.11794e+00 + 4 sg_p3 3.50000e+00 7.00000e-01 0.00000e+00 -3.62595e-02 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=3973.23 FROM MIGRAD STATUS=CONVERGED 92 CALLS 93 TOTAL + EDM=9.15092e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.04675e+02 5.27904e-01 8.93884e-04 5.58806e-03 + 2 sg_p1 1.51888e+01 4.04614e-01 1.64186e-03 1.14645e-01 + 3 sg_p2 1.39071e+00 9.53434e-02 1.70179e-03 1.60362e-01 + 4 sg_p3 3.62810e+00 5.03790e+00 6.96200e-02 -1.96675e-04 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.787e-01 3.076e-02 1.126e-02 1.670e-09 + 3.076e-02 1.638e-01 1.380e-02 5.410e-10 + 1.126e-02 1.380e-02 9.096e-03 3.128e-10 + 1.670e-09 5.410e-10 3.128e-10 5.797e+01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.23397 1.000 0.144 0.224 0.000 + 2 0.36356 0.144 1.000 0.358 0.000 + 3 0.39769 0.224 0.358 1.000 0.000 + 4 0.00000 0.000 0.000 0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + MINUIT WARNING IN HESSE + ============== Negative diagonal element 4 in Error Matrix + MINUIT WARNING IN HESSE + ============== 11.9057 added to diagonal of error matrix + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=3973.23 FROM HESSE STATUS=OK 27 CALLS 120 TOTAL + EDM=8.90402e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 5.04675e+02 5.26208e-01 1.78777e-04 -1.29806e-02 + 2 sg_p1 1.51888e+01 4.00327e-01 3.28371e-04 1.88774e-02 + 3 sg_p2 1.39071e+00 9.42604e-02 3.40357e-04 -4.59743e-01 + 4 sg_p3 3.62810e+00 2.94317e+00 5.00000e-01 3.66075e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.769e-01 2.968e-02 1.097e-02 1.226e-10 + 2.968e-02 1.603e-01 1.330e-02 -1.897e-10 + 1.097e-02 1.330e-02 8.890e-03 -4.217e-11 + 1.226e-10 -1.897e-10 -4.217e-11 1.223e+01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.23107 1.000 0.141 0.221 0.000 + 2 0.35809 0.141 1.000 0.352 -0.000 + 3 0.39249 0.221 0.352 1.000 -0.000 + 4 0.00000 0.000 -0.000 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +500 +504.675 +- 0.526208 +15.1888 +- 0.400327 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_500/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_500/w_background_GaussExp.root new file mode 100644 index 0000000..bb1a2f3 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_500/w_data.root b/Datacards/22fb_regression/MMR_500/w_data.root new file mode 100644 index 0000000..6a9bbde Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_500/w_signal_500.root b/Datacards/22fb_regression/MMR_500/w_signal_500.root new file mode 100644 index 0000000..5562418 Binary files /dev/null and b/Datacards/22fb_regression/MMR_500/w_signal_500.root differ diff --git a/Datacards/22fb_regression/MMR_550/c_H1_mass_550.png b/Datacards/22fb_regression/MMR_550/c_H1_mass_550.png new file mode 100644 index 0000000..4a23dbf Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/c_H1_mass_550.png differ diff --git a/Datacards/22fb_regression/MMR_550/c_H2_mass_550.png b/Datacards/22fb_regression/MMR_550/c_H2_mass_550.png new file mode 100644 index 0000000..84da77f Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/c_H2_mass_550.png differ diff --git a/Datacards/22fb_regression/MMR_550/c_mX_SR_550.png b/Datacards/22fb_regression/MMR_550/c_mX_SR_550.png new file mode 100644 index 0000000..d988ee1 Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/c_mX_SR_550.png differ diff --git a/Datacards/22fb_regression/MMR_550/c_mX_SR_KinFit_550.png b/Datacards/22fb_regression/MMR_550/c_mX_SR_KinFit_550.png new file mode 100644 index 0000000..6f8a5a5 Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/c_mX_SR_KinFit_550.png differ diff --git a/Datacards/22fb_regression/MMR_550/data_bkg.log b/Datacards/22fb_regression/MMR_550/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_550/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_550/datacard_550.root b/Datacards/22fb_regression/MMR_550/datacard_550.root new file mode 100644 index 0000000..ca943db Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/datacard_550.root differ diff --git a/Datacards/22fb_regression/MMR_550/datacard_550.txt b/Datacards/22fb_regression/MMR_550/datacard_550.txt new file mode 100644 index 0000000..1a8f820 --- /dev/null +++ b/Datacards/22fb_regression/MMR_550/datacard_550.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_550.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 589.976 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_550/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_550/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..a1258b3 Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_550/index.html b/Datacards/22fb_regression/MMR_550/index.html new file mode 100644 index 0000000..4c81927 --- /dev/null +++ b/Datacards/22fb_regression/MMR_550/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 550

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 589.976
+ sg_p0 = 556.778 0.444556
+ sg_p1 = 15.1397 0.450421
+ sg_p2 = 1.25232 0.0535044
+ sg_p3 = 1.14653 0.0836776
+btag lnN 1.08783 -
+ +
diff --git a/Datacards/22fb_regression/MMR_550/signal550_sig.log b/Datacards/22fb_regression/MMR_550/signal550_sig.log new file mode 100644 index 0000000..9dc7b7f --- /dev/null +++ b/Datacards/22fb_regression/MMR_550/signal550_sig.log @@ -0,0 +1,213 @@ + +Processing test.c... +nSignal_init = 100000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [350,750] --> [350,750] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [450,650] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [350,750] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [450,650] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=12799.9 FROM MIGRAD STATUS=INITIATE 54 CALLS 55 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.40000e+02 6.00000e+00 0.00000e+00 -1.19111e+02 + 2 sg_p1 2.25000e+01 2.50000e+00 0.00000e+00 -8.05431e+01 + 3 sg_p2 1.10177e+00 5.00000e-01 0.00000e+00 5.34262e+01 + 4 sg_p3 9.56193e-01 7.00000e-01 -8.13654e-01 -1.57833e+02 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + EIGENVALUES OF SECOND-DERIVATIVE MATRIX: + -9.4359e-01 9.9999e-01 1.9625e+00 1.9811e+00 + MINUIT WARNING IN HESSE + ============== MATRIX FORCED POS-DEF BY ADDING 0.945570 TO DIAGONAL. + FCN=12738.4 FROM HESSE STATUS=NOT POSDEF 31 CALLS 226 TOTAL + EDM=585.67 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.40364e+02 4.55493e-02 3.30804e-04 -1.84360e+02 + 2 sg_p1 2.92348e+01 6.11874e-01 7.00397e-04 8.38437e+01 + 3 sg_p2 2.07201e+00 4.41110e-01 2.20338e-03 2.88372e+01 + 4 sg_p3 2.36289e+00 3.79430e-01 1.40239e-03 2.10543e+02 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD TERMINATED WITHOUT CONVERGENCE. + FCN=12738.4 FROM MIGRAD STATUS=FAILED 236 CALLS 237 TOTAL + EDM=585.67 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.40364e+02 4.55493e-02 -0.00000e+00 -1.84360e+02 + 2 sg_p1 2.92348e+01 6.11874e-01 -0.00000e+00 8.38437e+01 + 3 sg_p2 2.07201e+00 4.41110e-01 -0.00000e+00 2.88372e+01 + 4 sg_p3 2.36289e+00 3.79430e-01 -0.00000e+00 2.10543e+02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.075e-03 1.410e-03 1.023e-03 8.754e-04 + 1.410e-03 3.748e-01 2.710e-01 2.323e-01 + 1.023e-03 2.710e-01 1.967e-01 1.683e-01 + 8.754e-04 2.323e-01 1.683e-01 1.446e-01 +ERR MATRIX NOT POS-DEF + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.05064 1.000 0.051 0.051 0.051 + 2 0.99848 0.051 1.000 0.998 0.998 + 3 0.99847 0.051 0.998 1.000 0.998 + 4 0.99847 0.051 0.998 0.998 1.000 + ERR MATRIX NOT POS-DEF + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12738.4 FROM HESSE STATUS=OK 57 CALLS 294 TOTAL + EDM=4.415 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 5.40364e+02 5.84553e-01 4.74325e-02 1.21476e-02 + 2 sg_p1 2.92348e+01 4.42505e-01 1.01061e-01 5.68997e-01 + 3 sg_p2 2.07201e+00 2.05043e-01 2.41296e-01 -1.72043e-01 + 4 sg_p3 2.36289e+00 2.90300e-01 2.43438e-01 -3.30894e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.417e-01 1.596e-02 1.477e-02 -2.649e-03 + 1.596e-02 1.959e-01 1.812e-02 1.741e-03 + 1.477e-02 1.812e-02 4.214e-02 2.422e-04 + -2.649e-03 1.741e-03 2.422e-04 8.449e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.12982 1.000 0.062 0.123 -0.016 + 2 0.20330 0.062 1.000 0.199 0.014 + 3 0.22820 0.123 0.199 1.000 0.004 + 4 0.02156 -0.016 0.014 0.004 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +550 +540.364 +- 0.584553 +29.2348 +- 0.442505 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [390,750] --> [390,750] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [490,650] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [390,750] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [490,650] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=11524.6 FROM MIGRAD STATUS=INITIATE 58 CALLS 59 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.55000e+02 5.00000e+00 0.00000e+00 -1.93391e+02 + 2 sg_p1 1.50000e+01 2.00000e+00 0.00000e+00 -6.60854e+01 + 3 sg_p2 1.19181e+00 5.00000e-01 0.00000e+00 7.37694e+01 + 4 sg_p3 1.29442e+00 7.00000e-01 -6.81766e-01 -2.77144e-01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=11516.9 FROM MIGRAD STATUS=CONVERGED 160 CALLS 161 TOTAL + EDM=1.17097e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.56778e+02 4.43612e-01 1.01519e-03 -2.27808e-02 + 2 sg_p1 1.51397e+01 4.48175e-01 1.96713e-03 3.33608e-02 + 3 sg_p2 1.25232e+00 5.33710e-02 1.49902e-03 9.18133e-02 + 4 sg_p3 1.14653e+00 8.33092e-02 1.38710e-03 -1.71863e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.968e-01 -9.531e-02 -2.538e-03 -2.270e-02 + -9.531e-02 2.010e-01 1.295e-02 2.837e-02 + -2.538e-03 1.295e-02 2.849e-03 1.769e-03 + -2.270e-02 2.837e-02 1.769e-03 6.943e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.63793 1.000 -0.479 -0.107 -0.614 + 2 0.80579 -0.479 1.000 0.541 0.760 + 3 0.57170 -0.107 0.541 1.000 0.398 + 4 0.81246 -0.614 0.760 0.398 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=11516.9 FROM HESSE STATUS=OK 23 CALLS 184 TOTAL + EDM=1.18449e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 5.56778e+02 4.44556e-01 2.03038e-04 7.11750e-02 + 2 sg_p1 1.51397e+01 4.50421e-01 7.86853e-05 1.39726e-02 + 3 sg_p2 1.25232e+00 5.35044e-02 2.99804e-04 -5.22528e-01 + 4 sg_p3 1.14653e+00 8.36776e-02 5.54839e-05 -7.37472e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.977e-01 -9.661e-02 -2.629e-03 -2.292e-02 + -9.661e-02 2.030e-01 1.312e-02 2.873e-02 + -2.629e-03 1.312e-02 2.863e-03 1.799e-03 + -2.292e-02 2.873e-02 1.799e-03 7.004e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.63991 1.000 -0.482 -0.110 -0.616 + 2 0.80796 -0.482 1.000 0.544 0.762 + 3 0.57462 -0.110 0.544 1.000 0.402 + 4 0.81429 -0.616 0.762 0.402 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +550 +556.778 +- 0.444556 +15.1397 +- 0.450421 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_550/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_550/w_background_GaussExp.root new file mode 100644 index 0000000..e1265a7 Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_550/w_data.root b/Datacards/22fb_regression/MMR_550/w_data.root new file mode 100644 index 0000000..da8120a Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_550/w_signal_550.root b/Datacards/22fb_regression/MMR_550/w_signal_550.root new file mode 100644 index 0000000..abc76a5 Binary files /dev/null and b/Datacards/22fb_regression/MMR_550/w_signal_550.root differ diff --git a/Datacards/22fb_regression/MMR_600/c_H1_mass_600.png b/Datacards/22fb_regression/MMR_600/c_H1_mass_600.png new file mode 100644 index 0000000..fb85c24 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/c_H1_mass_600.png differ diff --git a/Datacards/22fb_regression/MMR_600/c_H2_mass_600.png b/Datacards/22fb_regression/MMR_600/c_H2_mass_600.png new file mode 100644 index 0000000..d7b84d6 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/c_H2_mass_600.png differ diff --git a/Datacards/22fb_regression/MMR_600/c_mX_SR_600.png b/Datacards/22fb_regression/MMR_600/c_mX_SR_600.png new file mode 100644 index 0000000..baa0b9a Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/c_mX_SR_600.png differ diff --git a/Datacards/22fb_regression/MMR_600/c_mX_SR_KinFit_600.png b/Datacards/22fb_regression/MMR_600/c_mX_SR_KinFit_600.png new file mode 100644 index 0000000..7791b85 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/c_mX_SR_KinFit_600.png differ diff --git a/Datacards/22fb_regression/MMR_600/data_bkg.log b/Datacards/22fb_regression/MMR_600/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_600/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_600/datacard_600.root b/Datacards/22fb_regression/MMR_600/datacard_600.root new file mode 100644 index 0000000..bc346ec Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/datacard_600.root differ diff --git a/Datacards/22fb_regression/MMR_600/datacard_600.txt b/Datacards/22fb_regression/MMR_600/datacard_600.txt new file mode 100644 index 0000000..c2fa368 --- /dev/null +++ b/Datacards/22fb_regression/MMR_600/datacard_600.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_600.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 708.607 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_600/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_600/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..6bf01c8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_600/index.html b/Datacards/22fb_regression/MMR_600/index.html new file mode 100644 index 0000000..1628e60 --- /dev/null +++ b/Datacards/22fb_regression/MMR_600/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 600

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 708.607
+ sg_p0 = 607.021 0.0968998
+ sg_p1 = 17.7233 0.0805113
+ sg_p2 = 1.41311 0.0177355
+ sg_p3 = 1.36228 0.055028
+btag lnN 1.09222 -
+ +
diff --git a/Datacards/22fb_regression/MMR_600/signal600_sig.log b/Datacards/22fb_regression/MMR_600/signal600_sig.log new file mode 100644 index 0000000..73b1c2e --- /dev/null +++ b/Datacards/22fb_regression/MMR_600/signal600_sig.log @@ -0,0 +1,237 @@ + +Processing test.c... +nSignal_init = 98000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [390,800] --> [390,800] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [490,700] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [390,800] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [490,700] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=15233.8 FROM MIGRAD STATUS=INITIATE 52 CALLS 53 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.90000e+02 6.00000e+00 0.00000e+00 1.64234e+02 + 2 sg_p1 2.25000e+01 2.50000e+00 0.00000e+00 8.27538e+01 + 3 sg_p2 8.11141e-01 5.00000e-01 0.00000e+00 -3.94850e+02 + 4 sg_p3 8.67862e-01 7.00000e-01 -8.51151e-01 -9.34021e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=15124.8 FROM HESSE STATUS=OK 27 CALLS 240 TOTAL + EDM=0.0089 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.89082e+02 5.51616e-01 1.55979e-03 -6.92908e-02 + 2 sg_p1 3.06075e+01 4.03875e-01 3.57480e-03 -4.02180e-03 + 3 sg_p2 2.50130e+00 2.90014e-01 1.04423e-02 4.15887e-01 + 4 sg_p3 3.06333e+00 1.00826e+00 2.66366e-02 -4.21680e-01 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=15124.8 FROM MIGRAD STATUS=CONVERGED 304 CALLS 305 TOTAL + EDM=0.000265795 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 5.89082e+02 5.51848e-01 1.56070e-03 2.33535e-02 + 2 sg_p1 3.06034e+01 4.04569e-01 3.58872e-03 -1.73122e-02 + 3 sg_p2 2.48438e+00 3.54302e-01 1.11663e-02 -9.90321e-02 + 4 sg_p3 3.21998e+00 1.99022e+00 3.96343e-02 -1.32990e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.046e-01 1.096e-03 1.067e-02 1.230e-03 + 1.096e-03 1.638e-01 1.599e-02 -1.879e-03 + 1.067e-02 1.599e-02 1.264e-01 -1.401e-04 + 1.230e-03 -1.879e-03 -1.401e-04 4.486e+00 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.05439 1.000 0.005 0.054 0.001 + 2 0.11119 0.005 1.000 0.111 -0.002 + 3 0.12351 0.054 0.111 1.000 -0.000 + 4 0.00244 0.001 -0.002 -0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=15124.8 FROM HESSE STATUS=OK 29 CALLS 334 TOTAL + EDM=0.000173968 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 5.89082e+02 5.51256e-01 3.12140e-04 -3.05940e-02 + 2 sg_p1 3.06034e+01 4.02908e-01 1.43549e-04 7.05311e-01 + 3 sg_p2 2.48438e+00 2.58848e-01 3.64373e-01 -6.24959e-03 + 4 sg_p3 3.21998e+00 2.01821e+00 1.58537e-03 -8.00914e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.039e-01 -9.794e-05 3.913e-03 9.456e-03 + -9.794e-05 1.624e-01 6.462e-03 -1.645e-02 + 3.913e-03 6.462e-03 6.724e-02 -5.320e-04 + 9.456e-03 -1.645e-02 -5.320e-04 4.632e+00 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.02858 1.000 -0.000 0.027 0.008 + 2 0.06469 -0.000 1.000 0.062 -0.019 + 3 0.06763 0.027 0.062 1.000 -0.001 + 4 0.02057 0.008 -0.019 -0.001 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +600 +589.082 +- 0.551256 +30.6034 +- 0.402908 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [440,800] --> [440,800] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [540,700] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [440,800] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [540,700] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13808.2 FROM MIGRAD STATUS=INITIATE 38 CALLS 39 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.05000e+02 5.00000e+00 0.00000e+00 -6.58085e+01 + 2 sg_p1 1.75000e+01 1.50000e+00 0.00000e+00 -1.27080e+02 + 3 sg_p2 1.18892e+00 5.00000e-01 -5.52049e-01 -1.29041e+02 + 4 sg_p3 3.50000e+00 7.00000e-01 0.00000e+00 -1.29333e-01 + ERR DEF= 0.5 + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 4 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== 1.02692 added to diagonal of error matrix + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + EIGENVALUES OF SECOND-DERIVATIVE MATRIX: + -3.2932e-01 7.0503e-01 1.3453e+00 2.2790e+00 + MINUIT WARNING IN HESSE + ============== MATRIX FORCED POS-DEF BY ADDING 0.331599 TO DIAGONAL. + FCN=13762.5 FROM HESSE STATUS=NOT POSDEF 25 CALLS 358 TOTAL + EDM=0.15411 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.07348e+02 2.76983e+00 1.16200e-03 -4.02506e-02 + 2 sg_p1 1.79730e+01 3.45694e+00 3.06454e-03 6.26421e-02 + 3 sg_p2 1.52858e+00 1.44391e+00 1.80428e-03 7.87914e-01 + 4 sg_p3 1.37028e+00 1.42756e-01 1.61206e-03 -8.61084e-02 + ERR DEF= 0.5 + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 2 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 3 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== 1.0046 added to diagonal of error matrix + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD TERMINATED WITHOUT CONVERGENCE. + FCN=13762.2 FROM MIGRAD STATUS=FAILED 451 CALLS 452 TOTAL + EDM=2631.34 STRATEGY= 1 ERR MATRIX NOT POS-DEF + EXT PARAMETER APPROXIMATE STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.07021e+02 2.72611e-01 0.00000e+00 -4.31317e+01 + 2 sg_p1 1.77233e+01 2.11062e-01 0.00000e+00 -5.95693e-01 + 3 sg_p2 1.41311e+00 4.37990e-02 -0.00000e+00 -1.69912e+01 + 4 sg_p3 1.36228e+00 6.96247e-02 -0.00000e+00 1.27054e+00 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 7.432e-02 1.172e-02 -9.795e-03 -7.456e-03 + 1.172e-02 -4.456e-02 5.547e-03 4.458e-03 + -9.795e-03 5.547e-03 1.919e-03 4.074e-04 + -7.456e-03 4.458e-03 4.074e-04 4.849e-03 +ERR MATRIX NOT POS-DEF + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.00000 1.000 0.204 -0.820 -0.393 + 2 0.00000 0.204 -1.000 0.600 0.303 + 3 0.00000 -0.820 0.600 1.000 0.134 + 4 0.00000 -0.393 0.303 0.134 1.000 + ERR MATRIX NOT POS-DEF + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=13762.2 FROM HESSE STATUS=OK 29 CALLS 481 TOTAL + EDM=0.0175888 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 6.07021e+02 9.68998e-02 1.13864e-03 8.09384e-02 + 2 sg_p1 1.77233e+01 8.05113e-02 3.01323e-03 2.97729e-02 + 3 sg_p2 1.41311e+00 1.77355e-02 2.22580e-03 -4.49769e-01 + 4 sg_p3 1.36228e+00 5.50280e-02 1.60447e-03 -6.57040e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 9.390e-03 -1.730e-05 4.846e-05 -2.802e-04 + -1.730e-05 6.482e-03 7.213e-05 3.927e-04 + 4.846e-05 7.213e-05 3.146e-04 1.623e-05 + -2.802e-04 3.927e-04 1.623e-05 3.028e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.06006 1.000 -0.002 0.028 -0.053 + 2 0.10131 -0.002 1.000 0.051 0.089 + 3 0.05950 0.028 0.051 1.000 0.017 + 4 0.10384 -0.053 0.089 0.017 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +600 +607.021 +- 0.0968998 +17.7233 +- 0.0805113 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_600/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_600/w_background_GaussExp.root new file mode 100644 index 0000000..3bcf82b Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_600/w_data.root b/Datacards/22fb_regression/MMR_600/w_data.root new file mode 100644 index 0000000..7e77123 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_600/w_signal_600.root b/Datacards/22fb_regression/MMR_600/w_signal_600.root new file mode 100644 index 0000000..d18d6f8 Binary files /dev/null and b/Datacards/22fb_regression/MMR_600/w_signal_600.root differ diff --git a/Datacards/22fb_regression/MMR_650/c_H1_mass_650.png b/Datacards/22fb_regression/MMR_650/c_H1_mass_650.png new file mode 100644 index 0000000..6dc8155 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/c_H1_mass_650.png differ diff --git a/Datacards/22fb_regression/MMR_650/c_H2_mass_650.png b/Datacards/22fb_regression/MMR_650/c_H2_mass_650.png new file mode 100644 index 0000000..22d9f0f Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/c_H2_mass_650.png differ diff --git a/Datacards/22fb_regression/MMR_650/c_mX_SR_650.png b/Datacards/22fb_regression/MMR_650/c_mX_SR_650.png new file mode 100644 index 0000000..f8f71bf Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/c_mX_SR_650.png differ diff --git a/Datacards/22fb_regression/MMR_650/c_mX_SR_KinFit_650.png b/Datacards/22fb_regression/MMR_650/c_mX_SR_KinFit_650.png new file mode 100644 index 0000000..3bbb290 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/c_mX_SR_KinFit_650.png differ diff --git a/Datacards/22fb_regression/MMR_650/data_bkg.log b/Datacards/22fb_regression/MMR_650/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_650/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_650/datacard_650.root b/Datacards/22fb_regression/MMR_650/datacard_650.root new file mode 100644 index 0000000..3596707 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/datacard_650.root differ diff --git a/Datacards/22fb_regression/MMR_650/datacard_650.txt b/Datacards/22fb_regression/MMR_650/datacard_650.txt new file mode 100644 index 0000000..18f6992 --- /dev/null +++ b/Datacards/22fb_regression/MMR_650/datacard_650.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_650.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 801.97 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_650/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_650/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..2bb0374 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_650/index.html b/Datacards/22fb_regression/MMR_650/index.html new file mode 100644 index 0000000..91a552c --- /dev/null +++ b/Datacards/22fb_regression/MMR_650/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 650

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 801.97
+ sg_p0 = 658.793 0.393046
+ sg_p1 = 19.76 0.359109
+ sg_p2 = 1.49161 0.0663272
+ sg_p3 = 1.2998 0.0598484
+btag lnN 1.09597 -
+ +
diff --git a/Datacards/22fb_regression/MMR_650/signal650_sig.log b/Datacards/22fb_regression/MMR_650/signal650_sig.log new file mode 100644 index 0000000..11bb0fa --- /dev/null +++ b/Datacards/22fb_regression/MMR_650/signal650_sig.log @@ -0,0 +1,208 @@ + +Processing test.c... +nSignal_init = 100000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [440,850] --> [440,850] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [540,750] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [440,850] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [540,750] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=17776.1 FROM MIGRAD STATUS=INITIATE 61 CALLS 62 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.40000e+02 6.00000e+00 0.00000e+00 -9.88458e+01 + 2 sg_p1 3.00000e+01 2.00000e+00 0.00000e+00 -4.28316e+01 + 3 sg_p2 1.90882e+00 5.00000e-01 0.00000e+00 4.45596e+00 + 4 sg_p3 1.07245e+00 7.00000e-01 -7.66455e-01 -2.10172e+02 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=17742.9 FROM MIGRAD STATUS=CONVERGED 212 CALLS 213 TOTAL + EDM=0.000580136 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.38516e+02 5.68768e-01 1.73175e-03 4.57381e-01 + 2 sg_p1 3.33826e+01 4.30272e-01 4.12281e-03 6.09390e-02 + 3 sg_p2 3.35764e+00 3.83235e+00 1.05372e-01 -1.94006e-03 + 4 sg_p3 2.26803e+00 3.23428e-01 1.06040e-02 2.30237e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.235e-01 -1.529e-02 6.909e-11 -2.208e-02 + -1.529e-02 1.853e-01 -8.240e-11 2.633e-02 + 6.909e-11 -8.240e-11 7.395e+00 -3.285e-10 + -2.208e-02 2.633e-02 -3.285e-10 1.049e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.12648 1.000 -0.062 0.000 -0.120 + 2 0.19302 -0.062 1.000 -0.000 0.189 + 3 0.00000 0.000 -0.000 1.000 -0.000 + 4 0.21762 -0.120 0.189 -0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=17742.9 FROM HESSE STATUS=OK 35 CALLS 248 TOTAL + EDM=0.000572498 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 6.38516e+02 5.65152e-01 3.46350e-04 -4.94748e-02 + 2 sg_p1 3.33826e+01 4.23498e-01 1.64912e-04 3.45071e-01 + 3 sg_p2 3.35764e+00 7.14353e-01 5.00000e-01 3.50167e-01 + 4 sg_p3 2.26803e+00 3.17889e-01 2.21310e-01 -3.59697e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.194e-01 -1.065e-02 -1.625e-14 -7.219e-03 + -1.065e-02 1.795e-01 2.023e-14 8.984e-03 + -1.625e-14 2.023e-14 5.269e-01 2.283e-13 + -7.219e-03 8.984e-03 2.283e-13 1.014e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.05802 1.000 -0.044 -0.000 -0.040 + 2 0.07866 -0.044 1.000 0.000 0.067 + 3 0.00000 -0.000 0.000 1.000 0.000 + 4 0.07629 -0.040 0.067 0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +650 +638.516 +- 0.565152 +33.3826 +- 0.423498 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [480,850] --> [480,850] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [580,750] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [480,850] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [580,750] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=16370.5 FROM MIGRAD STATUS=INITIATE 58 CALLS 59 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.55000e+02 5.00000e+00 0.00000e+00 -6.16520e+02 + 2 sg_p1 1.75000e+01 1.50000e+00 0.00000e+00 -2.05334e+02 + 3 sg_p2 1.21212e+00 5.00000e-01 0.00000e+00 2.19909e+02 + 4 sg_p3 1.36987e+00 7.00000e-01 -6.54307e-01 6.27927e+01 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=16308.5 FROM HESSE STATUS=OK 25 CALLS 257 TOTAL + EDM=0.0239065 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.58817e+02 3.77262e-01 1.28398e-03 1.88736e-01 + 2 sg_p1 1.97460e+01 3.14311e-01 3.48681e-03 1.06035e+00 + 3 sg_p2 1.49175e+00 2.61647e-02 2.25279e-03 1.07524e+00 + 4 sg_p3 1.28852e+00 5.27191e-02 1.51960e-03 -1.19547e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + FCN=16308.4 FROM MIGRAD STATUS=CONVERGED 267 CALLS 268 TOTAL + EDM=3.12655e-05 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 0.3 per cent + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.58793e+02 3.78062e-01 -9.54531e-04 1.01210e-02 + 2 sg_p1 1.97600e+01 3.14759e-01 1.95662e-03 -2.12068e-02 + 3 sg_p2 1.49161e+00 2.61744e-02 -5.89168e-05 3.73512e-01 + 4 sg_p3 1.29980e+00 5.37272e-02 4.15271e-03 -3.37533e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.429e-01 -1.714e-02 7.131e-04 -5.841e-03 + -1.714e-02 9.914e-02 1.452e-03 6.867e-03 + 7.131e-04 1.452e-03 6.851e-04 7.031e-05 + -5.841e-03 6.867e-03 7.031e-05 2.887e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.30365 1.000 -0.144 0.072 -0.288 + 2 0.43696 -0.144 1.000 0.176 0.406 + 3 0.20179 0.072 0.176 1.000 0.050 + 4 0.46727 -0.288 0.406 0.050 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=16308.4 FROM HESSE STATUS=OK 29 CALLS 297 TOTAL + EDM=0.000124332 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 6.58793e+02 3.93046e-01 1.28555e-03 1.52322e-01 + 2 sg_p1 1.97600e+01 3.59109e-01 3.49709e-03 3.06094e-01 + 3 sg_p2 1.49161e+00 6.63272e-02 2.25131e-03 -4.15180e-01 + 4 sg_p3 1.29980e+00 5.98484e-02 1.52139e-03 -6.79789e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.545e-01 -1.961e-02 3.548e-03 -7.615e-03 + -1.961e-02 1.291e-01 1.023e-02 1.084e-02 + 3.548e-03 1.023e-02 4.401e-03 7.894e-04 + -7.615e-03 1.084e-02 7.894e-04 3.582e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.38690 1.000 -0.139 0.136 -0.324 + 2 0.60775 -0.139 1.000 0.429 0.504 + 3 0.47429 0.136 0.429 1.000 0.199 + 4 0.56687 -0.324 0.504 0.199 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +650 +658.793 +- 0.393046 +19.76 +- 0.359109 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_650/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_650/w_background_GaussExp.root new file mode 100644 index 0000000..0e8af62 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_650/w_data.root b/Datacards/22fb_regression/MMR_650/w_data.root new file mode 100644 index 0000000..82fae92 Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_650/w_signal_650.root b/Datacards/22fb_regression/MMR_650/w_signal_650.root new file mode 100644 index 0000000..f55248f Binary files /dev/null and b/Datacards/22fb_regression/MMR_650/w_signal_650.root differ diff --git a/Datacards/22fb_regression/MMR_700/c_H1_mass_700.png b/Datacards/22fb_regression/MMR_700/c_H1_mass_700.png new file mode 100644 index 0000000..5aeb87d Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/c_H1_mass_700.png differ diff --git a/Datacards/22fb_regression/MMR_700/c_H2_mass_700.png b/Datacards/22fb_regression/MMR_700/c_H2_mass_700.png new file mode 100644 index 0000000..c73f95a Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/c_H2_mass_700.png differ diff --git a/Datacards/22fb_regression/MMR_700/c_mX_SR_700.png b/Datacards/22fb_regression/MMR_700/c_mX_SR_700.png new file mode 100644 index 0000000..b1b7a87 Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/c_mX_SR_700.png differ diff --git a/Datacards/22fb_regression/MMR_700/c_mX_SR_KinFit_700.png b/Datacards/22fb_regression/MMR_700/c_mX_SR_KinFit_700.png new file mode 100644 index 0000000..8c3902e Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/c_mX_SR_KinFit_700.png differ diff --git a/Datacards/22fb_regression/MMR_700/data_bkg.log b/Datacards/22fb_regression/MMR_700/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_700/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_700/datacard_700.root b/Datacards/22fb_regression/MMR_700/datacard_700.root new file mode 100644 index 0000000..c61a907 Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/datacard_700.root differ diff --git a/Datacards/22fb_regression/MMR_700/datacard_700.txt b/Datacards/22fb_regression/MMR_700/datacard_700.txt new file mode 100644 index 0000000..6720e0b --- /dev/null +++ b/Datacards/22fb_regression/MMR_700/datacard_700.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_700.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 874.152 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_700/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_700/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..313862e Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_700/index.html b/Datacards/22fb_regression/MMR_700/index.html new file mode 100644 index 0000000..75ac4ad --- /dev/null +++ b/Datacards/22fb_regression/MMR_700/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 700

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 874.152
+ sg_p0 = 710.151 0.435215
+ sg_p1 = 21.1844 0.46492
+ sg_p2 = 1.41686 0.0879853
+ sg_p3 = 1.29799 0.0652462
+btag lnN 1.09224 -
+ +
diff --git a/Datacards/22fb_regression/MMR_700/signal700_sig.log b/Datacards/22fb_regression/MMR_700/signal700_sig.log new file mode 100644 index 0000000..00ec2a8 --- /dev/null +++ b/Datacards/22fb_regression/MMR_700/signal700_sig.log @@ -0,0 +1,216 @@ + +Processing test.c... +nSignal_init = 100000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [480,900] --> [480,900] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [580,800] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [480,900] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [580,800] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=19626.8 FROM MIGRAD STATUS=INITIATE 56 CALLS 57 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.90000e+02 6.00000e+00 0.00000e+00 -2.31478e+02 + 2 sg_p1 3.00000e+01 2.00000e+00 0.00000e+00 -7.28250e+01 + 3 sg_p2 1.61079e+00 5.00000e-01 0.00000e+00 6.31205e+01 + 4 sg_p3 9.93119e-01 7.00000e-01 -7.98416e-01 -3.01155e+02 + ERR DEF= 0.5 + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=19572.6 FROM HESSE STATUS=OK 29 CALLS 207 TOTAL + EDM=0.000602474 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.89359e+02 6.03382e-01 1.84989e-03 -2.32719e-01 + 2 sg_p1 3.51920e+01 4.87038e-01 4.93407e-03 3.98279e-02 + 3 sg_p2 2.85269e+00 9.36869e-01 3.41248e-02 8.66606e-02 + 4 sg_p3 1.99617e+00 2.61463e-01 6.88795e-03 -1.23396e-01 + ERR DEF= 0.5 + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 3 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== 1.05439 added to diagonal of error matrix + MIGRAD FAILS TO FIND IMPROVEMENT + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=19572.5 FROM MIGRAD STATUS=CONVERGED 374 CALLS 375 TOTAL + EDM=0.000345709 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 6.89279e+02 5.69635e-01 1.83489e-03 -1.52196e-01 + 2 sg_p1 3.52898e+01 4.25959e-01 4.84933e-03 1.91351e-02 + 3 sg_p2 3.15163e+00 4.03078e+00 1.08381e-01 -1.15060e-02 + 4 sg_p3 2.11142e+00 1.33605e-01 4.00562e-03 -8.37589e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.245e-01 -2.883e-03 2.844e-12 1.844e-04 + -2.883e-03 1.816e-01 2.264e-11 1.468e-03 + 2.844e-12 2.264e-11 1.427e+01 2.755e-10 + 1.844e-04 1.468e-03 2.755e-10 1.786e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.01218 1.000 -0.012 0.000 0.002 + 2 0.02840 -0.012 1.000 0.000 0.026 + 3 0.00000 0.000 0.000 1.000 0.000 + 4 0.02592 0.002 0.026 0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=19572.5 FROM HESSE STATUS=OK 33 CALLS 408 TOTAL + EDM=4.66085e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 6.89279e+02 5.71675e-01 3.66978e-04 -2.40232e-02 + 2 sg_p1 3.52898e+01 4.30829e-01 1.93973e-04 5.57393e-01 + 3 sg_p2 3.15163e+00 6.46038e-01 5.00000e-01 2.63698e-01 + 4 sg_p3 2.11142e+00 2.30525e-01 1.87177e-01 -4.07960e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.269e-01 -6.330e-03 2.384e-14 -1.112e-02 + -6.330e-03 1.858e-01 -3.242e-14 1.512e-02 + 2.384e-14 -3.242e-14 4.277e-01 -1.141e-13 + -1.112e-02 1.512e-02 -1.141e-13 5.323e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.08530 1.000 -0.026 0.000 -0.084 + 2 0.15258 -0.026 1.000 -0.000 0.152 + 3 0.00000 0.000 -0.000 1.000 -0.000 + 4 0.17199 -0.084 0.152 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +700 +689.279 +- 0.571675 +35.2898 +- 0.430829 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [540,900] --> [540,900] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [640,800] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [540,900] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [640,800] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=18016.9 FROM MIGRAD STATUS=INITIATE 56 CALLS 57 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.15000e+02 5.00000e+00 0.00000e+00 -5.50804e+01 + 2 sg_p1 2.00000e+01 1.00000e+00 0.00000e+00 7.03560e+01 + 3 sg_p2 1.61820e+00 5.00000e-01 0.00000e+00 7.76225e+01 + 4 sg_p3 4.90105e-01 7.00000e-01 -1.03521e+00 -1.40057e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=17840.6 FROM MIGRAD STATUS=CONVERGED 233 CALLS 234 TOTAL + EDM=0.000134187 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.10151e+02 4.34893e-01 1.44058e-03 -4.73055e-01 + 2 sg_p1 2.11844e+01 4.62288e-01 5.96372e-03 4.86530e-02 + 3 sg_p2 1.41686e+00 8.75333e-02 2.47507e-03 2.40854e-01 + 4 sg_p3 1.29799e+00 6.50718e-02 1.84861e-03 -1.71930e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.892e-01 2.562e-02 1.380e-02 -5.272e-03 + 2.562e-02 2.144e-01 2.706e-02 1.458e-02 + 1.380e-02 2.706e-02 7.666e-03 1.631e-03 + -5.272e-03 1.458e-02 1.631e-03 4.235e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.47329 1.000 0.127 0.362 -0.186 + 2 0.73468 0.127 1.000 0.668 0.484 + 3 0.72493 0.362 0.668 1.000 0.286 + 4 0.54668 -0.186 0.484 0.286 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=17840.6 FROM HESSE STATUS=OK 23 CALLS 257 TOTAL + EDM=0.000135375 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 7.10151e+02 4.35215e-01 2.88117e-04 -1.95192e-01 + 2 sg_p1 2.11844e+01 4.64920e-01 2.38549e-04 2.39157e-01 + 3 sg_p2 1.41686e+00 8.79853e-02 4.95015e-04 -4.48104e-01 + 4 sg_p3 1.29799e+00 6.52462e-02 3.69721e-04 -6.80453e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 1.894e-01 2.605e-02 1.392e-02 -5.239e-03 + 2.605e-02 2.168e-01 2.751e-02 1.483e-02 + 1.392e-02 2.751e-02 7.745e-03 1.672e-03 + -5.239e-03 1.483e-02 1.672e-03 4.258e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.47450 1.000 0.129 0.363 -0.184 + 2 0.73822 0.129 1.000 0.671 0.488 + 3 0.72827 0.363 0.671 1.000 0.291 + 4 0.55009 -0.184 0.488 0.291 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +700 +710.151 +- 0.435215 +21.1844 +- 0.46492 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_700/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_700/w_background_GaussExp.root new file mode 100644 index 0000000..4f3c033 Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_700/w_data.root b/Datacards/22fb_regression/MMR_700/w_data.root new file mode 100644 index 0000000..7195d21 Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_700/w_signal_700.root b/Datacards/22fb_regression/MMR_700/w_signal_700.root new file mode 100644 index 0000000..83e891f Binary files /dev/null and b/Datacards/22fb_regression/MMR_700/w_signal_700.root differ diff --git a/Datacards/22fb_regression/MMR_750/c_H1_mass_750.png b/Datacards/22fb_regression/MMR_750/c_H1_mass_750.png new file mode 100644 index 0000000..c75551e Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/c_H1_mass_750.png differ diff --git a/Datacards/22fb_regression/MMR_750/c_H2_mass_750.png b/Datacards/22fb_regression/MMR_750/c_H2_mass_750.png new file mode 100644 index 0000000..bcc4802 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/c_H2_mass_750.png differ diff --git a/Datacards/22fb_regression/MMR_750/c_mX_SR_750.png b/Datacards/22fb_regression/MMR_750/c_mX_SR_750.png new file mode 100644 index 0000000..116f1a6 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/c_mX_SR_750.png differ diff --git a/Datacards/22fb_regression/MMR_750/c_mX_SR_KinFit_750.png b/Datacards/22fb_regression/MMR_750/c_mX_SR_KinFit_750.png new file mode 100644 index 0000000..a431380 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/c_mX_SR_KinFit_750.png differ diff --git a/Datacards/22fb_regression/MMR_750/data_bkg.log b/Datacards/22fb_regression/MMR_750/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_750/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_750/datacard_750.root b/Datacards/22fb_regression/MMR_750/datacard_750.root new file mode 100644 index 0000000..7bf0e93 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/datacard_750.root differ diff --git a/Datacards/22fb_regression/MMR_750/datacard_750.txt b/Datacards/22fb_regression/MMR_750/datacard_750.txt new file mode 100644 index 0000000..4503fe3 --- /dev/null +++ b/Datacards/22fb_regression/MMR_750/datacard_750.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_750.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 962.541 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_750/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_750/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..b91c962 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_750/index.html b/Datacards/22fb_regression/MMR_750/index.html new file mode 100644 index 0000000..f9770d6 --- /dev/null +++ b/Datacards/22fb_regression/MMR_750/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 750

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 962.541
+ sg_p0 = 760.232 0.449214
+ sg_p1 = 24.6133 0.418216
+ sg_p2 = 1.62807 0.138139
+ sg_p3 = 1.43589 0.056557
+btag lnN 1.0861 -
+ +
diff --git a/Datacards/22fb_regression/MMR_750/signal750_sig.log b/Datacards/22fb_regression/MMR_750/signal750_sig.log new file mode 100644 index 0000000..ff2aba1 --- /dev/null +++ b/Datacards/22fb_regression/MMR_750/signal750_sig.log @@ -0,0 +1,215 @@ + +Processing test.c... +nSignal_init = 95600 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [480,930] --> [480,930] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [580,830] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [480,930] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [580,830] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=20962.4 FROM MIGRAD STATUS=INITIATE 35 CALLS 36 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.45000e+02 7.00000e+00 0.00000e+00 -7.85401e+01 + 2 sg_p1 3.25000e+01 2.50000e+00 0.00000e+00 1.23587e+02 + 3 sg_p2 2.50000e+00 5.00000e-01 0.00000e+00 -9.20366e-01 + 4 sg_p3 6.96665e-01 7.00000e-01 -9.28885e-01 -1.36844e+03 + ERR DEF= 0.5 + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 3 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== Negative diagonal element 4 in Error Matrix + MINUIT WARNING IN MIGRAD + ============== 1.19034 added to diagonal of error matrix + MIGRAD FAILS TO FIND IMPROVEMENT + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=20788.3 FROM HESSE STATUS=OK 27 CALLS 345 TOTAL + EDM=0.0012716 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.37495e+02 6.19345e-01 1.79142e-03 6.86831e-02 + 2 sg_p1 3.81994e+01 4.86764e-01 4.27859e-03 -1.85645e-03 + 3 sg_p2 2.47039e+00 1.05419e+00 4.37632e-02 -1.15464e-01 + 4 sg_p3 2.16650e+00 1.20377e-01 4.50413e-03 -1.02018e-01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + FCN=20788.3 FROM MIGRAD STATUS=CONVERGED 359 CALLS 360 TOTAL + EDM=1.40754e-07 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 7.1 per cent + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.37494e+02 6.19281e-01 -3.76617e-05 -2.61957e-02 + 2 sg_p1 3.81998e+01 4.86782e-01 3.65027e-05 -7.17593e-04 + 3 sg_p2 2.54708e+00 1.23100e+00 3.06745e-02 0.00000e+00 + 4 sg_p3 2.16715e+00 1.20573e-01 2.02879e-04 -6.89420e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.836e-01 2.598e-02 -1.800e-03 -4.848e-03 + 2.598e-02 2.371e-01 3.701e-03 9.627e-03 + -1.800e-03 3.701e-03 1.657e+00 4.646e-03 + -4.848e-03 9.627e-03 4.646e-03 1.454e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.11765 1.000 0.086 -0.002 -0.065 + 2 0.19049 0.086 1.000 0.006 0.164 + 3 0.02995 -0.002 0.006 1.000 0.030 + 4 0.18438 -0.065 0.164 0.030 1.000 + ********** + ** 18 **HESSE 2000 + ********** + MINUIT WARNING IN HESSE + ============== Second derivative enters zero, param 3 + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=20788.3 FROM HESSE STATUS=OK 29 CALLS 389 TOTAL + EDM=0.861196 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 7.37494e+02 6.19983e-01 1.79138e-03 -2.16147e-01 + 2 sg_p1 3.81998e+01 4.89995e-01 1.71144e-03 4.73475e-01 + 3 sg_p2 2.54708e+00 5.78420e-01 4.33427e-01 1.88311e-02 + 4 sg_p3 2.16715e+00 1.45376e-01 1.80165e-03 -3.90676e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.844e-01 2.441e-02 5.715e-12 -7.123e-03 + 2.441e-02 2.403e-01 -1.398e-11 1.419e-02 + 5.715e-12 -1.398e-11 3.407e-01 -9.858e-13 + -7.123e-03 1.419e-02 -9.858e-13 2.115e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.12590 1.000 0.080 0.000 -0.079 + 2 0.22117 0.080 1.000 -0.000 0.199 + 3 0.00000 0.000 -0.000 1.000 -0.000 + 4 0.22071 -0.079 0.199 -0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +750 +737.494 +- 0.619983 +38.1998 +- 0.489995 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [520,930] --> [520,930] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [620,830] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [520,930] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [620,830] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=19503.8 FROM MIGRAD STATUS=INITIATE 56 CALLS 57 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.50000e+02 6.00000e+00 0.00000e+00 -1.14357e+03 + 2 sg_p1 2.75000e+01 1.50000e+00 0.00000e+00 1.03352e+02 + 3 sg_p2 1.11344e+00 5.00000e-01 0.00000e+00 3.92276e+01 + 4 sg_p3 2.06749e+00 7.00000e-01 -4.21673e-01 4.28333e+00 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=19269.7 FROM MIGRAD STATUS=CONVERGED 184 CALLS 185 TOTAL + EDM=1.23732e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.60232e+02 4.51541e-01 1.41695e-03 5.81108e-02 + 2 sg_p1 2.46133e+01 4.23120e-01 4.61551e-03 -1.71457e-02 + 3 sg_p2 1.62807e+00 1.41579e-01 4.85000e-03 -4.49004e-02 + 4 sg_p3 1.43589e+00 5.66014e-02 1.63033e-03 -3.36669e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.039e-01 1.694e-02 1.934e-02 -4.318e-03 + 1.694e-02 1.793e-01 2.816e-02 1.155e-02 + 1.934e-02 2.816e-02 2.007e-02 1.569e-03 + -4.318e-03 1.155e-02 1.569e-03 3.204e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.38459 1.000 0.089 0.302 -0.169 + 2 0.61688 0.089 1.000 0.469 0.482 + 3 0.53829 0.302 0.469 1.000 0.196 + 4 0.52762 -0.169 0.482 0.196 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=19269.7 FROM HESSE STATUS=OK 23 CALLS 208 TOTAL + EDM=1.18749e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 7.60232e+02 4.49214e-01 2.83389e-04 3.48062e-01 + 2 sg_p1 2.46133e+01 4.18216e-01 9.23101e-04 -3.95089e-01 + 3 sg_p2 1.62807e+00 1.38139e-01 1.94000e-04 -3.56260e-01 + 4 sg_p3 1.43589e+00 5.65570e-02 6.52131e-05 -6.30744e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.018e-01 1.355e-02 1.772e-02 -4.506e-03 + 1.355e-02 1.751e-01 2.591e-02 1.138e-02 + 1.772e-02 2.591e-02 1.910e-02 1.463e-03 + -4.506e-03 1.138e-02 1.463e-03 3.199e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.37290 1.000 0.072 0.285 -0.177 + 2 0.60491 0.072 1.000 0.448 0.481 + 3 0.51576 0.285 0.448 1.000 0.187 + 4 0.52672 -0.177 0.481 0.187 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +750 +760.232 +- 0.449214 +24.6133 +- 0.418216 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_750/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_750/w_background_GaussExp.root new file mode 100644 index 0000000..8cdfb25 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_750/w_data.root b/Datacards/22fb_regression/MMR_750/w_data.root new file mode 100644 index 0000000..52b4d30 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_750/w_signal_750.root b/Datacards/22fb_regression/MMR_750/w_signal_750.root new file mode 100644 index 0000000..39325f3 Binary files /dev/null and b/Datacards/22fb_regression/MMR_750/w_signal_750.root differ diff --git a/Datacards/22fb_regression/MMR_800/c_H1_mass_800.png b/Datacards/22fb_regression/MMR_800/c_H1_mass_800.png new file mode 100644 index 0000000..e4691f6 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/c_H1_mass_800.png differ diff --git a/Datacards/22fb_regression/MMR_800/c_H2_mass_800.png b/Datacards/22fb_regression/MMR_800/c_H2_mass_800.png new file mode 100644 index 0000000..f9df3ca Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/c_H2_mass_800.png differ diff --git a/Datacards/22fb_regression/MMR_800/c_mX_SR_800.png b/Datacards/22fb_regression/MMR_800/c_mX_SR_800.png new file mode 100644 index 0000000..73eeae2 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/c_mX_SR_800.png differ diff --git a/Datacards/22fb_regression/MMR_800/c_mX_SR_KinFit_800.png b/Datacards/22fb_regression/MMR_800/c_mX_SR_KinFit_800.png new file mode 100644 index 0000000..ec29501 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/c_mX_SR_KinFit_800.png differ diff --git a/Datacards/22fb_regression/MMR_800/data_bkg.log b/Datacards/22fb_regression/MMR_800/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_800/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_800/datacard_800.root b/Datacards/22fb_regression/MMR_800/datacard_800.root new file mode 100644 index 0000000..d7ed7c3 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/datacard_800.root differ diff --git a/Datacards/22fb_regression/MMR_800/datacard_800.txt b/Datacards/22fb_regression/MMR_800/datacard_800.txt new file mode 100644 index 0000000..8c88d0b --- /dev/null +++ b/Datacards/22fb_regression/MMR_800/datacard_800.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_800.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 991.948 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_800/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_800/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..8782ad3 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_800/index.html b/Datacards/22fb_regression/MMR_800/index.html new file mode 100644 index 0000000..6f8c7ad --- /dev/null +++ b/Datacards/22fb_regression/MMR_800/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 800

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 991.948
+ sg_p0 = 812.329 0.481084
+ sg_p1 = 27.1595 0.434836
+ sg_p2 = 1.68342 0.0917423
+ sg_p3 = 1.42513 0.0698249
+btag lnN 1.07121 -
+ +
diff --git a/Datacards/22fb_regression/MMR_800/signal800_sig.log b/Datacards/22fb_regression/MMR_800/signal800_sig.log new file mode 100644 index 0000000..1764b71 --- /dev/null +++ b/Datacards/22fb_regression/MMR_800/signal800_sig.log @@ -0,0 +1,210 @@ + +Processing test.c... +nSignal_init = 95800 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [550,1000] --> [550,1000] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [650,900] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [550,1000] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [650,900] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=21785.8 FROM MIGRAD STATUS=INITIATE 53 CALLS 54 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.90000e+02 6.00000e+00 0.00000e+00 1.39691e+02 + 2 sg_p1 3.75000e+01 2.50000e+00 0.00000e+00 -7.17987e+01 + 3 sg_p2 2.72030e+00 5.00000e-01 8.82340e-02 -6.12819e-01 + 4 sg_p3 1.49366e+00 7.00000e-01 0.00000e+00 2.53477e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + MINUIT WARNING IN HESSE + ============== Second derivative enters zero, param 3 + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=21773 FROM HESSE STATUS=OK 27 CALLS 201 TOTAL + EDM=0.218472 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.87217e+02 6.42598e-01 2.14039e-03 -1.82062e-01 + 2 sg_p1 3.98456e+01 5.14117e-01 4.00619e-03 -1.03949e-01 + 3 sg_p2 3.29548e+00 8.60706e-01 4.91300e-01 -1.77844e+00 + 4 sg_p3 1.91773e+00 1.44394e-01 4.33513e-03 -1.19179e-01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + FCN=21773 FROM MIGRAD STATUS=CONVERGED 212 CALLS 213 TOTAL + EDM=1.06682e-05 STRATEGY= 1 ERROR MATRIX UNCERTAINTY 0.2 per cent + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 7.87218e+02 6.42601e-01 5.08531e-05 1.46821e-03 + 2 sg_p1 3.98486e+01 5.14094e-01 2.48282e-04 -4.60177e-03 + 3 sg_p2 3.84797e+00 7.67167e-01 2.45650e-01 -1.24021e-02 + 4 sg_p3 1.91862e+00 1.44415e-01 2.85445e-04 -3.57587e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 4.130e-01 -2.757e-02 -6.387e-05 -2.004e-02 + -2.757e-02 2.644e-01 1.547e-04 2.560e-02 + -6.387e-05 1.547e-04 6.166e-01 4.110e-05 + -2.004e-02 2.560e-02 4.110e-05 2.087e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.21604 1.000 -0.083 -0.000 -0.216 + 2 0.34477 -0.083 1.000 0.000 0.345 + 3 0.00046 -0.000 0.000 1.000 0.000 + 4 0.39246 -0.216 0.345 0.000 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=21773 FROM HESSE STATUS=OK 29 CALLS 242 TOTAL + EDM=0.00304659 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 7.87218e+02 6.42889e-01 2.14042e-03 -9.28501e-02 + 2 sg_p1 3.98486e+01 5.14613e-01 4.00621e-03 1.89012e-01 + 3 sg_p2 3.84797e+00 2.66837e+00 4.91300e-01 5.69472e-01 + 4 sg_p3 1.91862e+00 1.44776e-01 1.73405e-03 -4.68807e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 4.134e-01 -2.790e-02 -1.752e-10 -2.026e-02 + -2.790e-02 2.650e-01 1.664e-09 2.586e-02 + -1.752e-10 1.664e-09 8.780e+01 1.623e-10 + -2.026e-02 2.586e-02 1.623e-10 2.098e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.21783 1.000 -0.084 -0.000 -0.218 + 2 0.34692 -0.084 1.000 0.000 0.347 + 3 0.00000 -0.000 0.000 1.000 0.000 + 4 0.39500 -0.218 0.347 0.000 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +800 +787.218 +- 0.642889 +39.8486 +- 0.514613 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [620,1020] --> [620,1020] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [720,920] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [620,1020] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [720,920] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=20380 FROM MIGRAD STATUS=INITIATE 54 CALLS 55 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 8.10000e+02 6.00000e+00 0.00000e+00 -2.92112e+02 + 2 sg_p1 2.25000e+01 1.50000e+00 0.00000e+00 -1.08309e+02 + 3 sg_p2 1.13599e+00 5.00000e-01 0.00000e+00 1.12550e+02 + 4 sg_p3 1.15363e+00 7.00000e-01 -7.34737e-01 5.23314e+01 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=20346.8 FROM MIGRAD STATUS=CONVERGED 225 CALLS 226 TOTAL + EDM=3.17954e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 8.12329e+02 4.80735e-01 1.48054e-03 3.55892e-02 + 2 sg_p1 2.71595e+01 4.32989e-01 6.00928e-03 2.43613e-02 + 3 sg_p2 1.68342e+00 9.14543e-02 3.35049e-03 2.26914e-03 + 4 sg_p3 1.42513e+00 6.96586e-02 2.12279e-03 -1.90120e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.311e-01 -1.725e-02 7.694e-03 -9.114e-03 + -1.725e-02 1.878e-01 1.689e-02 1.285e-02 + 7.694e-03 1.689e-02 8.368e-03 9.951e-04 + -9.114e-03 1.285e-02 9.951e-04 4.853e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.35461 1.000 -0.083 0.175 -0.272 + 2 0.56241 -0.083 1.000 0.426 0.426 + 3 0.47626 0.175 0.426 1.000 0.156 + 4 0.48843 -0.272 0.426 0.156 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=20346.8 FROM HESSE STATUS=OK 23 CALLS 249 TOTAL + EDM=3.20113e-06 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 8.12329e+02 4.81084e-01 2.96108e-04 7.77222e-02 + 2 sg_p1 2.71595e+01 4.34836e-01 2.40371e-04 6.70359e-01 + 3 sg_p2 1.68342e+00 9.17423e-02 1.34020e-04 -3.32739e-01 + 4 sg_p3 1.42513e+00 6.98249e-02 8.49116e-05 -6.34557e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 2.315e-01 -1.749e-02 7.744e-03 -9.165e-03 + -1.749e-02 1.894e-01 1.722e-02 1.307e-02 + 7.744e-03 1.722e-02 8.421e-03 1.026e-03 + -9.165e-03 1.307e-02 1.026e-03 4.877e-03 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.35639 1.000 -0.084 0.175 -0.273 + 2 0.56754 -0.084 1.000 0.431 0.430 + 3 0.48130 0.175 0.431 1.000 0.160 + 4 0.49212 -0.273 0.430 0.160 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +800 +812.329 +- 0.481084 +27.1595 +- 0.434836 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_800/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_800/w_background_GaussExp.root new file mode 100644 index 0000000..41e6b64 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_800/w_data.root b/Datacards/22fb_regression/MMR_800/w_data.root new file mode 100644 index 0000000..59d1e16 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_800/w_signal_800.root b/Datacards/22fb_regression/MMR_800/w_signal_800.root new file mode 100644 index 0000000..13b5930 Binary files /dev/null and b/Datacards/22fb_regression/MMR_800/w_signal_800.root differ diff --git a/Datacards/22fb_regression/MMR_900/c_H1_mass_900.png b/Datacards/22fb_regression/MMR_900/c_H1_mass_900.png new file mode 100644 index 0000000..58831dd Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/c_H1_mass_900.png differ diff --git a/Datacards/22fb_regression/MMR_900/c_H2_mass_900.png b/Datacards/22fb_regression/MMR_900/c_H2_mass_900.png new file mode 100644 index 0000000..d768b9d Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/c_H2_mass_900.png differ diff --git a/Datacards/22fb_regression/MMR_900/c_mX_SR_900.png b/Datacards/22fb_regression/MMR_900/c_mX_SR_900.png new file mode 100644 index 0000000..df04b55 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/c_mX_SR_900.png differ diff --git a/Datacards/22fb_regression/MMR_900/c_mX_SR_KinFit_900.png b/Datacards/22fb_regression/MMR_900/c_mX_SR_KinFit_900.png new file mode 100644 index 0000000..5011f9f Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/c_mX_SR_KinFit_900.png differ diff --git a/Datacards/22fb_regression/MMR_900/data_bkg.log b/Datacards/22fb_regression/MMR_900/data_bkg.log new file mode 100644 index 0000000..a39f781 --- /dev/null +++ b/Datacards/22fb_regression/MMR_900/data_bkg.log @@ -0,0 +1,117 @@ + +Processing fit_background.c... + Opened data file +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(pred): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [320,1400] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_background_pred' created with bounds [320,1400] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_background_pred) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 1500 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=13797.6 FROM MIGRAD STATUS=INITIATE 10 CALLS 11 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 5.00000e+02 1.00000e+01 2.01358e-01 -5.42256e+02 + 2 bg_p1 8.50000e+01 7.00000e+00 2.01358e-01 -1.08536e+03 + 3 bg_p2 1.05500e+00 2.09000e-01 2.01358e-01 2.41282e+03 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM MIGRAD STATUS=CONVERGED 131 CALLS 132 TOTAL + EDM=4.84277e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 bg_p0 4.98965e+02 5.81257e+00 4.46745e-03 9.19423e-02 + 2 bg_p1 6.66671e+01 4.11529e+00 4.42414e-03 -9.89988e-02 + 3 bg_p2 2.49961e-01 1.88645e-02 8.84729e-04 1.76993e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.394e+01 2.024e+01 9.319e-02 + 2.024e+01 1.704e+01 6.991e-02 + 9.319e-02 6.991e-02 3.560e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86722 1.000 0.841 0.848 + 2 0.91023 0.841 1.000 0.898 + 3 0.91378 0.848 0.898 1.000 + ********** + ** 18 **HESSE 1500 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=12467.7 FROM HESSE STATUS=OK 16 CALLS 148 TOTAL + EDM=4.84021e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 bg_p0 4.98965e+02 5.78750e+00 8.93490e-04 -2.07071e-02 + 2 bg_p1 6.66671e+01 4.09688e+00 8.84828e-04 -5.51303e-01 + 3 bg_p2 2.49961e-01 1.87841e-02 1.76946e-04 -7.62776e+01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 3 ERR DEF=0.5 + 3.365e+01 2.002e+01 9.225e-02 + 2.002e+01 1.689e+01 6.923e-02 + 9.225e-02 6.923e-02 3.529e-04 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 + 1 0.86597 1.000 0.840 0.847 + 2 0.90938 0.840 1.000 0.897 + 3 0.91301 0.847 0.897 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) only plotting range 'fit_nll_background_pred' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(background) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_background_pred' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(background_Int[x|fit_nll_background_pred]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +Fit chi2 = 0.653006 +22.04 fb^{-1} (13 TeV) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing GaussExp::background +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::bg_p2 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(data_obs): fit range of variable x expanded to nearest bin boundaries: [320,1400] --> [320,1400] +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing dataset data_obs +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x + === RooFit data fit result to be entered in datacard === + Background number of events = 1434 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_900/datacard_900.root b/Datacards/22fb_regression/MMR_900/datacard_900.root new file mode 100644 index 0000000..86b07b1 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/datacard_900.root differ diff --git a/Datacards/22fb_regression/MMR_900/datacard_900.txt b/Datacards/22fb_regression/MMR_900/datacard_900.txt new file mode 100644 index 0000000..c134c73 --- /dev/null +++ b/Datacards/22fb_regression/MMR_900/datacard_900.txt @@ -0,0 +1,23 @@ +imax 1 number of channels +jmax * number of backgrounds +kmax * number of systematic uncertainty sources +---------- +shapes signal HbbHbb w_signal_900.root HbbHbb:signal_fixed +shapes background HbbHbb w_background_GaussExp.root HbbHbb:background +shapes data_obs HbbHbb w_data.root HbbHbb:data_obs +---------- +## Observation +bin HbbHbb +observation -1 +---------- +bin HbbHbb HbbHbb +process signal background +process 0 1 +rate 971.35 1434 +lumi_13TeV lnN 1.062 - +bTag lnN 1.10 - +trigger lnN 1.10 - +bgFloat lnU - 2.00 +bg_p0 param 498.965 5.7875 +bg_p1 param 66.6671 4.09688 +bg_p2 param 0.249961 0.0187841 diff --git a/Datacards/22fb_regression/MMR_900/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/MMR_900/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..a8f9413 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/MMR_900/index.html b/Datacards/22fb_regression/MMR_900/index.html new file mode 100644 index 0000000..06fd0f9 --- /dev/null +++ b/Datacards/22fb_regression/MMR_900/index.html @@ -0,0 +1,49 @@ + + + + + +

Signal with JEC, JER Systematic Uncertainties

+

+

mX = 900

+ + + + + + + +
+ Higgs 1 mass + + + Higgs 2 mass + + +
+

Without Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+
+
+

With Kin-Fit. Fitted to an Exp-Gauss-Exp function.


+ === Baseline plot ===
+ norm = 971.35
+ sg_p0 = 905.175 5.822
+ sg_p1 = 20 11.2567
+ sg_p2 = 0.419832 0.0970936
+ sg_p3 = 0.784426 0.17486
+btag lnN 1.03891 -
+ +
diff --git a/Datacards/22fb_regression/MMR_900/signal900_sig.log b/Datacards/22fb_regression/MMR_900/signal900_sig.log new file mode 100644 index 0000000..284c601 --- /dev/null +++ b/Datacards/22fb_regression/MMR_900/signal900_sig.log @@ -0,0 +1,199 @@ + +Processing test.c... +nSignal_init = 2000 +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [620,1100] --> [620,1100] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [720,1000] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [620,1100] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [720,1000] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=466.589 FROM MIGRAD STATUS=INITIATE 54 CALLS 55 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 8.70000e+02 1.20000e+01 0.00000e+00 -2.25348e+01 + 2 sg_p1 4.00000e+01 3.00000e+00 0.00000e+00 1.64395e-02 + 3 sg_p2 7.74884e-01 5.00000e-01 0.00000e+00 8.27532e+00 + 4 sg_p3 1.16966e+00 7.00000e-01 -7.28583e-01 -5.67223e+00 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=463.126 FROM MIGRAD STATUS=CONVERGED 227 CALLS 228 TOTAL + EDM=0.000247308 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 8.88602e+02 6.24622e+00 1.43671e-03 6.22262e-02 + 2 sg_p1 4.68740e+01 5.64487e+00 5.14867e-03 -9.94777e-03 + 3 sg_p2 2.31064e+00 3.64820e+00 1.79105e-02 -9.55613e-03 + 4 sg_p3 1.33543e+00 5.21361e-01 2.09615e-03 4.34742e-03 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.917e+01 -1.128e+01 -1.615e-01 -1.538e+00 + -1.128e+01 3.397e+01 -9.448e-01 1.851e+00 + -1.615e-01 -9.448e-01 1.198e+01 -3.875e-02 + -1.538e+00 1.851e+00 -3.875e-02 2.751e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.46995 1.000 -0.309 -0.007 -0.468 + 2 0.60693 -0.309 1.000 -0.047 0.605 + 3 0.05221 -0.007 -0.047 1.000 -0.021 + 4 0.67368 -0.468 0.605 -0.021 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=463.126 FROM HESSE STATUS=OK 29 CALLS 257 TOTAL + EDM=0.000130772 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 8.88602e+02 6.25723e+00 2.87342e-04 3.15233e-01 + 2 sg_p1 4.68740e+01 5.65713e+00 1.02973e-03 4.76042e-01 + 3 sg_p2 2.31064e+00 1.75144e+00 4.52287e-01 -7.58179e-02 + 4 sg_p3 1.33543e+00 5.23094e-01 8.38458e-05 -6.66765e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.931e+01 -1.152e+01 -2.972e-03 -1.556e+00 + -1.152e+01 3.413e+01 -1.768e-02 1.871e+00 + -2.972e-03 -1.768e-02 3.771e+00 -7.314e-04 + -1.556e+00 1.871e+00 -7.314e-04 2.770e-01 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.47287 1.000 -0.314 -0.000 -0.472 + 2 0.60933 -0.314 1.000 -0.002 0.609 + 3 0.00174 -0.000 -0.002 1.000 -0.001 + 4 0.67639 -0.472 0.609 -0.001 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +900 +888.602 +- 6.25723 +46.874 +- 5.65713 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 + asd + asd + asd +[#1] INFO:DataHandling -- RooDataHist::adjustBinning(signalHistogram): fit range of variable x expanded to nearest bin boundaries: [690,1130] --> [690,1130] +[#0] WARNING:InputArguments -- RooAbsPdf::fitTo(signal) WARNING: a likelihood fit is request of what appears to be weighted data. + While the estimated values of the parameters will always be calculated taking the weights into account, + there are multiple ways to estimate the errors on these parameter values. You are advised to make an + explicit choice on the error calculation: + - Either provide SumW2Error(kTRUE), to calculate a sum-of-weights corrected HESSE error matrix + (error will be proportional to the number of events) + - Or provide SumW2Error(kFALSE), to return errors from original HESSE error matrix + (which will be proportional to the sum of the weights) + If you want the errors to reflect the information contained in the provided dataset, choose kTRUE. + If you want the errors to reflect the precision you would be able to obtain with an unweighted dataset + with 'sum-of-weights' events, choose kFALSE. +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit' created with bounds [790,1030] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) constructing test statistic for sub-range named fit +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'NormalizationRangeForfit' created with bounds [690,1130] +[#1] INFO:Eval -- RooRealVar::setRange(x) new range named 'fit_nll_signal_signalHistogram' created with bounds [790,1030] +[#1] INFO:Fitting -- RooAbsOptTestStatistic::ctor(nll_signal_signalHistogram) fixing interpretation of coefficients of any RooAddPdf to full domain of observables +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:Minization -- RooMinuit::optimizeConst: activating const optimization + ********** + ** 13 **MIGRAD 2000 1 + ********** + FIRST CALL TO USER FUNCTION AT NEW START POINT, WITH IFLAG=4. + START MIGRAD MINIMIZATION. STRATEGY 1. CONVERGENCE WHEN EDM .LT. 1.00e-03 + FCN=444.279 FROM MIGRAD STATUS=INITIATE 58 CALLS 59 TOTAL + EDM= unknown STRATEGY= 1 NO ERROR MATRIX + EXT PARAMETER CURRENT GUESS STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 9.10000e+02 8.00000e+00 0.00000e+00 1.95986e+00 + 2 sg_p1 2.75000e+01 1.50000e+00 0.00000e+00 -7.17691e-01 + 3 sg_p2 6.70646e-01 5.00000e-01 0.00000e+00 2.91781e+00 + 4 sg_p3 1.18033e+00 7.00000e-01 -7.24501e-01 3.29284e+00 + ERR DEF= 0.5 + MIGRAD MINIMIZATION HAS CONVERGED. + MIGRAD WILL VERIFY CONVERGENCE AND ERROR MATRIX. + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=443.7 FROM MIGRAD STATUS=CONVERGED 191 CALLS 192 TOTAL + EDM=1.68289e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER STEP FIRST + NO. NAME VALUE ERROR SIZE DERIVATIVE + 1 sg_p0 9.05175e+02 5.82720e+00 1.54224e-03 -2.94392e-02 + 2 sg_p1 2.00000e+01 1.12565e+01 2.36787e-02** at limit ** + 3 sg_p2 4.19832e-01 9.71688e-02 8.20942e-04 1.94696e-02 + 4 sg_p3 7.84426e-01 1.75021e-01 9.96711e-04 -5.49361e-02 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.420e+01 1.029e-03 3.162e-01 -4.789e-01 + 1.029e-03 1.123e-04 3.693e-05 4.731e-05 + 3.162e-01 3.693e-05 9.457e-03 -1.336e-03 + -4.789e-01 4.731e-05 -1.336e-03 3.070e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.69993 1.000 0.017 0.556 -0.467 + 2 0.04732 0.017 1.000 0.036 0.025 + 3 0.59297 0.556 0.036 1.000 -0.078 + 4 0.51652 -0.467 0.025 -0.078 1.000 + ********** + ** 18 **HESSE 2000 + ********** + COVARIANCE MATRIX CALCULATED SUCCESSFULLY + FCN=443.7 FROM HESSE STATUS=OK 23 CALLS 215 TOTAL + EDM=1.66877e-05 STRATEGY= 1 ERROR MATRIX ACCURATE + EXT PARAMETER INTERNAL INTERNAL + NO. NAME VALUE ERROR STEP SIZE VALUE + 1 sg_p0 9.05175e+02 5.82200e+00 3.08449e-04 -1.20917e-01 + 2 sg_p1 2.00000e+01 1.12567e+01 4.73574e-03 -1.57170e+00 + WARNING - - ABOVE PARAMETER IS AT LIMIT. + 3 sg_p2 4.19832e-01 9.70936e-02 1.64188e-04 -9.82824e-01 + 4 sg_p3 7.84426e-01 1.74860e-01 1.99342e-04 -8.88106e-01 + ERR DEF= 0.5 + EXTERNAL ERROR MATRIX. NDIM= 25 NPAR= 4 ERR DEF=0.5 + 3.414e+01 1.375e-04 3.154e-01 -4.774e-01 + 1.375e-04 1.123e-04 4.948e-06 6.361e-06 + 3.154e-01 4.948e-06 9.443e-03 -1.327e-03 + -4.774e-01 6.361e-06 -1.327e-03 3.064e-02 + PARAMETER CORRELATION COEFFICIENTS + NO. GLOBAL 1 2 3 4 + 1 0.69928 1.000 0.002 0.555 -0.467 + 2 0.00635 0.002 1.000 0.005 0.003 + 3 0.59212 0.555 0.005 1.000 -0.078 + 4 0.51521 -0.467 0.003 -0.078 1.000 +[#1] INFO:Minization -- RooMinuit::optimizeConst: deactivating const optimization +900 +905.175 +- 5.822 +20 +- 11.2567 +[#1] INFO:InputArguments -- RooAbsData::plotOn(signalHistogram) INFO: dataset has non-integer weights, auto-selecting SumW2 errors instead of Poisson errors +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f was fitted in range and no explicit plot,norm range was specified, using fit range as default +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) only plotting range 'fit_nll_signal_signalHistogram' +[#1] INFO:Plotting -- RooAbsPdf::plotOn(signal) p.d.f. curve is normalized using explicit choice of ranges 'fit_nll_signal_signalHistogram' +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:NumericIntegration -- RooRealIntegral::init(signal_Int[x|fit_nll_signal_signalHistogram]_Norm[x]) using numeric integrator RooIntegrator1D to calculate Int(x) +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing ExpGaussExp::signal_fixed +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::x +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p0 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p1 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p2 +[#1] INFO:ObjectHandling -- RooWorkspace::import(HbbHbb) importing RooRealVar::signal_p3 diff --git a/Datacards/22fb_regression/MMR_900/w_background_GaussExp.root b/Datacards/22fb_regression/MMR_900/w_background_GaussExp.root new file mode 100644 index 0000000..53bbd23 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/w_background_GaussExp.root differ diff --git a/Datacards/22fb_regression/MMR_900/w_data.root b/Datacards/22fb_regression/MMR_900/w_data.root new file mode 100644 index 0000000..44e9f79 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/w_data.root differ diff --git a/Datacards/22fb_regression/MMR_900/w_signal_900.root b/Datacards/22fb_regression/MMR_900/w_signal_900.root new file mode 100644 index 0000000..9529e70 Binary files /dev/null and b/Datacards/22fb_regression/MMR_900/w_signal_900.root differ diff --git a/Datacards/22fb_regression/higgsCombineTest.Asymptotic.mH120.root b/Datacards/22fb_regression/higgsCombineTest.Asymptotic.mH120.root new file mode 100644 index 0000000..e5ff1c3 Binary files /dev/null and b/Datacards/22fb_regression/higgsCombineTest.Asymptotic.mH120.root differ diff --git a/Datacards/22fb_regression/runLimits.sh b/Datacards/22fb_regression/runLimits.sh new file mode 100644 index 0000000..38dfa08 --- /dev/null +++ b/Datacards/22fb_regression/runLimits.sh @@ -0,0 +1,26 @@ +#!/bin/bash +#cd ../../../../../DiH_13TeV/CMSSW_7_1_5/src/ +#cmsenv +#cd - +#for i in 260 270 300 350 400 450 500 +#do +# echo "mass point $i" +# cd /uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/Datacards/22fb_regression/LMR_$i +# text2workspace.py datacard_$i\.txt -o datacard_$i\.root +# combine -M Asymptotic datacard_$i\.root --noFitAsimov -t -1 > CMS_HH4b_$i\_13TeV_asymptoticCLs.out + #combine HbbHbb_$i\.txt -M Asymptotic -v2 -t -1 -m $i -n CMSHH4b --rMax 1000 --rMin 0.01 &> CMS_HH4b_$i\_13TeV_asymptoticCLs.out + #mv higgsCombineCMSHH4b.Asymptotic.mH$i\.root Limits/CMS_$i\_HH4b_13TeV_asymptoticCLs.root + # combine -M MaxLikelihoodFit --robustFit=1 --rMin=-5 --rMax=5 -t -1 --plots --out Limits/sig$i bias_study/HbbHbb_$i\.txt &> CMS_HH4b_$i\_13TeV_MaxLikelihood.out + +#done + +for i in 350 400 450 500 550 600 650 700 750 800 900 1000 1200 +do + echo "mass point $i" + cd /uscms_data/d3/cvernier/4b/HbbHbb_2016/HbbHbb_Run2/Datacards/22fb_regression/MMR_$i + text2workspace.py datacard_$i\.txt -o datacard_$i\.root + combine -M Asymptotic datacard_$i\.root -t -1 --noFitAsimov +#&> ../MMRSelection_chi2_Regression/CMS_HH4b_$i\_13TeV_asymptoticCLs.out + +done +