1 |
//User
|
2 |
#include "cls.h"
|
3 |
#include "ConfigFile.h"
|
4 |
#include "table.h"
|
5 |
|
6 |
//system
|
7 |
#include <string>
|
8 |
#include <iostream>
|
9 |
#include <cmath>
|
10 |
#include <cstdlib>
|
11 |
|
12 |
//ROOT
|
13 |
#include "TH1.h"
|
14 |
|
15 |
using namespace std;
|
16 |
|
17 |
|
18 |
void Limit(int argc, char *argv[])
|
19 |
{
|
20 |
if (argc<1){
|
21 |
std::cerr<<"Error: Expected '"<<argv[0]<<" <limit config>'!"<<std::endl;
|
22 |
exit(1);
|
23 |
}
|
24 |
|
25 |
for (int file=1; file<argc; ++file){
|
26 |
std::cout << "opening: "<<argv[file]<<std::endl;
|
27 |
ConfigFile config(argv[file]);
|
28 |
|
29 |
int ndata = config.read<int>("data");
|
30 |
double nback = config.read<double>("background");
|
31 |
double bkgUncert = config.read<double>("background.uncertainty");
|
32 |
double signal = config.read<double>("signal.LO");
|
33 |
double sigUncert = config.read<double>("signal.LO.uncertainty");
|
34 |
double sigSignal = config.read<double>("signal.LO.signalregion.IsoMuon");
|
35 |
double sigSigTau = config.read<double>("signal.LO.signalregion.Tau");
|
36 |
double signalNLO = config.read<double>("signal.NLO");
|
37 |
double sigUncertNLO = config.read<double>("signal.NLO.uncertainty");
|
38 |
double sigSignalNLO = config.read<double>("signal.NLO.signalregion.IsoMuon");
|
39 |
double sigSigTauNLO = config.read<double>("signal.NLO.signalregion.Tau");
|
40 |
double bkgControl = config.read<double>("background.controlregion.IsoMuon");
|
41 |
double bkgSignal = config.read<double>("background.signalregion.IsoMuon");
|
42 |
|
43 |
double xsec = config.read<double>("Xsection");
|
44 |
double kfactor = config.read<double>("signal.kFactor");
|
45 |
|
46 |
//bkgUncert += sigSignal * sigUncert/signal;
|
47 |
|
48 |
//config.add("data", ndata);
|
49 |
//config.add("background", nback);
|
50 |
//config.add("background.uncertainty", bkgUncert);
|
51 |
|
52 |
char * n = new char[32];
|
53 |
sprintf(n,"bkgd%d",file); TH1 * bgd = new TH1F(n, "",1,0,1);
|
54 |
sprintf(n,"bkgd_NoSig%d",file); TH1 * bgd_NoSig = new TH1F(n, "",1,0,1);
|
55 |
sprintf(n,"data%d",file); TH1 * data = new TH1F(n, "",1,0,1);
|
56 |
sprintf(n,"sig%d", file); TH1 * sig = new TH1F(n,"",1,0,1);
|
57 |
data->SetBinContent(1,ndata);
|
58 |
data->SetBinError(1,sqrt(ndata));
|
59 |
bgd_NoSig->SetBinContent(1,nback);
|
60 |
bgd_NoSig->SetBinError(1,bkgUncert);
|
61 |
double bLO=(nback - sigSignal -sigSigTau<0?0:nback - sigSignal -sigSigTau);
|
62 |
bgd->SetBinContent(1,bLO);
|
63 |
bgd->SetBinError(1,bkgUncert);
|
64 |
sig->SetBinContent(1,signal);
|
65 |
sig->SetBinError(1,sigUncert);
|
66 |
|
67 |
cls limit_sys("cls_limit.ps",
|
68 |
sig, // signal with total syst. and stat. errors
|
69 |
bgd, // with total syst. and stat. errors
|
70 |
data,
|
71 |
bgd_NoSig);
|
72 |
limit_sys.SetStat(true); //Consider Bin-Errors (containing the full syst. uncertainties)
|
73 |
limit_sys.SetNMC(50000); //number of pseudo-experiments for each CL calculation
|
74 |
//limit_sys.Draw();
|
75 |
|
76 |
sprintf(n,"bkgdNLO%d",file); TH1 * bgdNLO = new TH1F(n, "",1,0,1);
|
77 |
sprintf(n,"bkgdNoSigNLO%d",file); TH1 * bgdNoSigNLO = new TH1F(n, "",1,0,1);
|
78 |
sprintf(n,"dataNLO%d",file); TH1 * dataNLO = new TH1F(n, "",1,0,1);
|
79 |
sprintf(n,"sigNLO%d", file); TH1 * sigNLO = new TH1F(n,"",1,0,1);
|
80 |
|
81 |
double bNLO=(nback - sigSignalNLO -sigSigTauNLO<0?0:nback - sigSignalNLO - sigSigTauNLO);
|
82 |
|
83 |
dataNLO->SetBinContent(1,ndata);
|
84 |
dataNLO->SetBinError(1,sqrt(ndata));
|
85 |
bgdNLO->SetBinContent(1,bNLO);
|
86 |
bgdNLO->SetBinError(1,bkgUncert);
|
87 |
bgdNoSigNLO->SetBinContent(1,nback);
|
88 |
bgdNoSigNLO->SetBinError(1,bkgUncert);
|
89 |
sigNLO->SetBinContent(1,signalNLO);
|
90 |
sigNLO->SetBinError(1,sigUncertNLO);
|
91 |
|
92 |
cls limit_sys_NLO("cls_limit_NLO.ps",
|
93 |
sigNLO, // signal with total syst. and stat. errors
|
94 |
bgdNLO, // with total syst. and stat. errors
|
95 |
dataNLO,
|
96 |
bgdNoSigNLO);
|
97 |
limit_sys_NLO.SetStat(true); //Consider Bin-Errors (containing the full syst. uncertainties)
|
98 |
limit_sys_NLO.SetNMC(50000); //number of pseudo-experiments for each CL calculation
|
99 |
//limit_sys.Draw();
|
100 |
|
101 |
try {
|
102 |
//limit_sys.WriteResult( &config, xsec );
|
103 |
limit_sys.WriteConfidence( &config, "LO." );
|
104 |
limit_sys_NLO.WriteConfidence( &config, "NLO." );
|
105 |
}
|
106 |
catch(exception& e){
|
107 |
cout << "Exception catched: " << e.what();
|
108 |
}
|
109 |
|
110 |
//write stuff:
|
111 |
time_t rawtime;
|
112 |
struct tm * timeinfo;
|
113 |
time ( &rawtime );
|
114 |
timeinfo = localtime ( &rawtime );
|
115 |
ofstream ofile;
|
116 |
ofile.open (argv[file]);
|
117 |
if (ofile.good())
|
118 |
std::cout << "writing '"<<argv[file]<<"'"<<std::endl;
|
119 |
else if ( (ofile.rdstate() & ifstream::failbit ) != 0 )
|
120 |
std::cerr << "ERROR opening '"<<argv[file]<<"'! Does the directory exist?"<<std::endl;
|
121 |
|
122 |
ofile << config.getComment() << asctime (timeinfo)
|
123 |
<< config.getComment()<< "\n"
|
124 |
<< config;
|
125 |
|
126 |
std::cout<<"d:"<<ndata<<", b:"<<bNLO<<", s:"<<signalNLO<<std::endl;
|
127 |
|
128 |
}
|
129 |
}
|
130 |
|
131 |
|
132 |
int main(int argc, char *argv[])
|
133 |
{
|
134 |
Limit(argc,argv);
|
135 |
}
|