7 bool isBlinded(
const std::string &binName,
const std::vector<std::string>& blindBins);
14 std::string cardType=
"mconly";
17 std::string rootfile(
"variations/sum_rescaled.root");
18 if(cardType==
"mconly") rootfile =
"variations/sum_rescaled_mconly.root";
19 TFile *
f = TFile::Open(rootfile.c_str(),
"update");
22 std::vector<std::string> mcStatisticsList = {
23 "signal_M750",
"signal_M1000",
"signal_M1100",
"signal_M1200",
"signal_M1300",
"signal_M1400",
"signal_M1500",
"qcd",
"ttbar"};
25 std::vector<std::string> rescaleList = {
26 "qcd_flavor",
"qcd_mur",
"qcd_muf",
"qcd_murf",
27 "ttbar_pt",
"jes",
"lep_eff",
28 "ttbar_mur",
"ttbar_muf",
"ttbar_murf"};
31 std::vector<std::string> signalList = {
32 "signal_M750",
"signal_M1000",
"signal_M1100",
"signal_M1200",
"signal_M1300",
"signal_M1400",
"signal_M1500"};
33 std::vector<std::string> signalRescaleList = {};
35 std::vector<std::string> upAndDown = {
"Up",
"Down"};
38 std::vector<std::string> binNames = {
39 "bin0",
"bin1",
"bin2",
40 "bin3",
"bin4",
"bin5",
41 "bin6",
"bin7",
"bin8",
"bin9",
42 "bin10",
"bin11",
"bin12",
43 "bin13",
"bin14",
"bin15",
"bin16",
"bin17"};
44 std::vector<std::string> blindedBins={};
45 if(cardType==
"control") blindedBins = {
46 "bin10",
"bin11",
"bin12",
47 "bin13",
"bin14",
"bin15",
"bin16",
"bin17"};
48 else if (cardType==
"mconly") blindedBins=binNames;
50 unsigned int nbins=binNames.size();
55 for(
unsigned int i=0; i<100; i++) {
56 std::string qcd_pdf(
"qcd_w_pdf");
57 qcd_pdf+=std::to_string(i);
58 rescaleList.push_back(qcd_pdf);
59 std::string ttbar_pdf(
"ttbar_w_pdf");
60 ttbar_pdf+=std::to_string(i);
61 rescaleList.push_back(ttbar_pdf);
69 for(
unsigned int ibin=0; ibin<
nbins; ibin++) {
72 if(ibin>=6 && ibin<=9)
continue;
74 TString binname(binNames.at(ibin).c_str());
76 for(
unsigned int isyst=0; isyst<rescaleList.size(); isyst++) {
77 for(
unsigned int idir=0; idir<upAndDown.size(); idir++) {
78 std::string process(
"qcd");
79 if(rescaleList.at(isyst).find(
"ttbar")!=std::string::npos) process=
"ttbar";
81 TString histnameNominal(Form(
"%s/%s", binNames.at(ibin).c_str(), process.c_str()));
82 std::cout <<
"Getting histogram " << histnameNominal << std::endl;
83 TString histnameRescale(Form(
"%s/%s_%s%s", binNames.at(ibin).c_str(), process.c_str(), rescaleList.at(isyst).c_str(), upAndDown.at(idir).c_str()));
84 if(rescaleList.at(isyst).find(
"pdf")!=std::string::npos &&
85 (rescaleList.at(isyst).find(
"qcd")!=std::string::npos ||
86 rescaleList.at(isyst).find(
"ttbar")!=std::string::npos) ) {
87 histnameRescale = Form(
"%s/%s%s", binNames.at(ibin).c_str(), rescaleList.at(isyst).c_str(), upAndDown.at(idir).c_str());
89 std::cout <<
"Getting histogram " << histnameRescale << std::endl;
90 TH1F *
nominal =
static_cast<TH1F*
>(f->Get(histnameNominal));
91 TH1F *rescale =
static_cast<TH1F*
>(f->Get(histnameRescale));
92 if(rescale->Integral()!=0) {
93 rescale->Scale(nominal->Integral()/rescale->Integral());
100 for(
auto isignal : signalList) {
101 for(
unsigned int isyst=0; isyst<signalRescaleList.size(); isyst++) {
102 for(
unsigned int idir=0; idir<upAndDown.size(); idir++) {
103 TString histnameNominal(Form(
"%s/%s", binNames.at(ibin).c_str(), isignal.c_str()));
104 std::cout <<
"Getting histogram " << histnameNominal << std::endl;
105 TString histnameRescale(Form(
"%s/%s_%s%s", binNames.at(ibin).c_str(), isignal.c_str(), signalRescaleList.at(isyst).c_str(), upAndDown.at(idir).c_str()));
107 std::cout <<
"Getting signal histogram " << histnameRescale << std::endl;
108 TH1F *
nominal =
static_cast<TH1F*
>(f->Get(histnameNominal));
109 TH1F *rescale =
static_cast<TH1F*
>(f->Get(histnameRescale));
110 if(rescale->Integral()!=0) {
111 rescale->Scale(nominal->Integral()/rescale->Integral());
122 for(
auto isample : mcStatisticsList) {
123 TString histnameNominal(Form(
"%s/%s", binNames.at(ibin).c_str(), isample.c_str()));
124 TH1F *
nominal =
static_cast<TH1F*
>(f->Get(histnameNominal));
125 for(
unsigned int ib=1; ib<=
nbins; ib++) {
126 TH1F *up =
static_cast<TH1F*
>(nominal->Clone());
127 TH1F *down =
static_cast<TH1F*
>(nominal->Clone());
128 up->SetBinContent(ib, nominal->GetBinContent(ib)+nominal->GetBinError(ib));
129 float downvalue = nominal->GetBinContent(ib)-nominal->GetBinError(ib);
130 if(downvalue<0) downvalue=0.0;
131 down->SetBinContent(ib, downvalue);
133 TString basename(nominal->GetName());
134 TString upname(Form(
"%s_mcstat_%s_%s_nb%dUp", nominal->GetName(), isample.c_str(), binname.Data(), ib-1));
135 TString downname(Form(
"%s_mcstat_%s_%s_nb%dDown", nominal->GetName(), isample.c_str(), binname.Data(), ib-1));
137 down->SetName(downname);
145 if(
isBlinded(binNames.at(ibin), blindedBins)) {
147 TH1F *data_obs =
static_cast<TH1F*
>(f->Get(Form(
"%s/data_obs", binNames.at(ibin).c_str())));
148 TH1F *qcd =
static_cast<TH1F*
>(f->Get(Form(
"%s/qcd", binNames.at(ibin).c_str())));
149 TH1F *ttbar =
static_cast<TH1F*
>(f->Get(Form(
"%s/ttbar", binNames.at(ibin).c_str())));
150 TH1F *wjets =
static_cast<TH1F*
>(f->Get(Form(
"%s/wjets", binNames.at(ibin).c_str())));
151 TH1F *other =
static_cast<TH1F*
>(f->Get(Form(
"%s/other", binNames.at(ibin).c_str())));
152 for(
int i=1; i<=data_obs->GetNbinsX(); i++) {
153 data_obs->SetBinContent(i, static_cast<int>(qcd->GetBinContent(i)
154 + ttbar->GetBinContent(i)
155 + wjets->GetBinContent(i)
156 + other->GetBinContent(i)));
172 bool isBlinded(
const std::string &binName,
const std::vector<std::string>& blindBins)
174 for(
auto iblind : blindBins) {
175 if(binName == iblind)
return true;
bool isBlinded(const std::string &binName, const std::vector< std::string > &blindBins)