74 int main(
int argc,
char *argv[]){
75 gErrorIgnoreLevel=6000;
82 pos.
Add(folder+
"*TTZJets*");
83 pos.
Add(folder+
"*QCD_Pt*");
84 pos.
Add(folder+
"*WJetsToLNu_HT*");
85 pos.
Add(folder+
"*ZJetsToLNu_HT*");
86 pos.
Add(folder+
"*DYJets*");
87 pos.
Add(folder+
"*H_HToBB*");
89 neg.
Add(folder+
"*_T*tW-channel*");
90 neg.
Add(folder+
"*_T*t-channel*");
93 vector<GammaParams> ttbar_gp, pos_gp, neg_gp, sig_gp;
100 vector<GammaParams> other_gp(pos_gp.size());
101 for(
size_t bin = 0; bin < other_gp.size(); ++bin){
102 other_gp.at(bin).SetYieldAndUncertainty(pos_gp.at(bin).Yield()+max(0.,neg_gp.at(bin).Yield()),
103 pos_gp.at(bin).Uncertainty());
106 vector<string> bkg_names;
107 vector<vector<GammaParams> > bkg_gps;
108 bkg_gps.push_back(ttbar_gp); bkg_names.push_back(
"ttbar");
109 bkg_gps.push_back(other_gp); bkg_names.push_back(
"other");
111 vector<GammaParams> mc_gp;
114 vector<double> data_counts;
117 WriteFile(bkg_gps, bkg_names, sig_gp, mc_gp, data_counts);
121 for(
size_t ibkg = 0; ibkg < bkg_gps.size(); ++ibkg){
122 PrintDebug(bkg_gps.at(ibkg), bkg_names.at(ibkg));
130 bool set_gluino =
false, set_lsp =
false, set_mj_div =
false;
132 static struct option long_options[] = {
133 {
"method", required_argument, 0,
'm'},
134 {
"ntuple_date", required_argument, 0,
'd'},
135 {
"lumi", required_argument, 0,
'l'},
136 {
"mc_multiplier", required_argument, 0, 0},
137 {
"no_mc_kappa", no_argument, 0, 0},
138 {
"no_systematics", no_argument, 0, 0},
139 {
"inject_signal", required_argument, 0,
's'},
140 {
"mgluino", required_argument, 0, 0},
141 {
"mlsp", required_argument, 0, 0},
142 {
"tk_veto", no_argument, 0,
't'},
143 {
"mt_min", required_argument, 0, 0},
144 {
"mt_div", required_argument, 0, 0},
145 {
"mj_min", required_argument, 0, 0},
146 {
"mj_div", required_argument, 0, 0},
147 {
"njets_min", required_argument, 0, 0},
148 {
"njets_div", required_argument, 0, 0},
149 {
"met_min", required_argument, 0, 0},
150 {
"met_div", required_argument, 0, 0},
151 {
"ht_min", required_argument, 0, 0},
152 {
"nb_min", required_argument, 0, 0},
153 {
"verbose", no_argument, 0,
'v'},
159 opt = getopt_long(argc, argv,
"m:d:l:s:tv", long_options, &option_index);
160 if( opt == -1)
break;
187 optname = long_options[option_index].name;
188 if(optname ==
"mc_multiplier"){
191 }
else if(optname ==
"no_mc_kappa"){
193 }
else if(optname ==
"no_systematics"){
195 }
else if(optname ==
"mgluino"){
199 }
else if(optname ==
"mlsp"){
203 }
else if(optname ==
"mt_min"){
206 }
else if(optname ==
"mt_div"){
209 }
else if(optname ==
"mj_min"){
212 }
else if(optname ==
"mj_div"){
216 }
else if(optname ==
"njets_min"){
219 }
else if(optname ==
"njets_div"){
222 }
else if(optname ==
"met_min"){
225 }
else if(optname ==
"met_div"){
228 }
else if(optname ==
"nb_min"){
231 }
else if(optname ==
"nb_div"){
234 }
else if(optname ==
"ht_min"){
238 printf(
"Bad option! Found option name %s\n", optname.c_str());
242 printf(
"Bad option! getopt_long returned character code 0%o\n", opt);
248 if(set_gluino && !set_lsp){
254 }
else if(set_lsp && !set_gluino){
257 }
else if(
mlsp ==
"800"){
269 case 0: nbins = 8;
break;
270 case 1: nbins = 16;
break;
271 case 2: nbins = 12;
break;
272 case 3: nbins = 18;
break;
276 vector<double> counts(nbins, 0.);
277 vector<double> squares(nbins, 0.);
279 double sumw = 0., sumw2 = 0.;
281 Timer timer(num_entries, 1.);
283 for(
int entry = 0; entry < num_entries; ++entry){
299 counts.at(bin) += weight;
300 squares.at(bin) += weight*weight;
303 sumw2 += weight*weight;
307 gp.resize(counts.size());
308 for(
size_t bin = 0; bin < counts.size(); ++bin){
314 gp.at(bin).SetNEffectiveAndWeight(raw, weight);
319 double sumw_backup,
double sumw2_backup,
320 double &nraw,
double &weight){
324 weight = sumw2_backup/sumw_backup;
325 }
else if(sumw <= 0.){
328 weight = sqrt(sumw2+sumw*sumw);
331 nraw = sumw*sumw/sumw2;
403 case 0x15:
return 10;
405 case 0x17:
return 11;
407 case 0x19:
return 12;
409 case 0x1B:
return 13;
411 case 0x1D:
return 14;
413 case 0x1F:
return 15;
447 case 0x1D:
return 10;
449 case 0x1F:
return 11;
471 case 0x11:
return 10;
473 case 0x13:
return 10;
477 case 0x17:
return 11;
478 case 0x18:
return 12;
479 case 0x19:
return 13;
480 case 0x1A:
return 14;
481 case 0x1B:
return 15;
483 case 0x1D:
return 16;
485 case 0x1F:
return 17;
494 const vector<vector<GammaParams> > &bkg_gps){
495 if(bkg_gps.size() == 0){
500 mc_gp = vector<GammaParams>(bkg_gps.at(0).size());
501 for(
size_t sample = 0; sample < bkg_gps.size(); ++sample){
502 for(
size_t bin = 0; bin < bkg_gps.at(sample).size(); ++bin){
503 mc_gp.at(bin) += bkg_gps.at(sample).at(bin);
509 const vector<GammaParams> &sig_gp,
510 const vector<vector<GammaParams> > &bkg_gps){
511 data.resize(sig_gp.size());
512 for(
size_t bin = 0; bin < data.size(); ++bin){
514 for(
size_t sample = 0; sample < bkg_gps.size(); ++sample){
515 data.at(bin) += bkg_gps.at(sample).at(bin).Yield();
521 size_t &nr2, vector<size_t> &r2_map,
522 size_t &nr3, vector<size_t> &r3_map,
523 size_t &nr4, vector<size_t> &r4_map){
524 nr1 = 0; nr2 = 0; nr3 = 0; nr4 = 0;
525 r1_map.clear(); r2_map.clear(); r3_map.clear(); r4_map.clear();
528 nr1 = 1; nr2 = 2; nr3 = 1; nr4 = 4;
529 r1_map.push_back(0); r2_map.push_back(0); r3_map.push_back(0); r4_map.push_back(0);
530 r1_map.push_back(0); r2_map.push_back(1); r3_map.push_back(0); r4_map.push_back(1);
531 r1_map.push_back(0); r2_map.push_back(0); r3_map.push_back(0); r4_map.push_back(2);
532 r1_map.push_back(0); r2_map.push_back(1); r3_map.push_back(0); r4_map.push_back(3);
535 nr1 = 4; nr2 = 4; nr3 = 4; nr4 = 4;
536 r1_map.push_back(0); r2_map.push_back(0); r3_map.push_back(0); r4_map.push_back(0);
537 r1_map.push_back(1); r2_map.push_back(1); r3_map.push_back(1); r4_map.push_back(1);
538 r1_map.push_back(2); r2_map.push_back(2); r3_map.push_back(2); r4_map.push_back(2);
539 r1_map.push_back(3); r2_map.push_back(3); r3_map.push_back(3); r4_map.push_back(3);
542 nr1 = 2; nr2 = 4; nr3 = 2; nr4 = 4;
543 r1_map.push_back(0); r2_map.push_back(0); r3_map.push_back(0); r4_map.push_back(0);
544 r1_map.push_back(0); r2_map.push_back(1); r3_map.push_back(0); r4_map.push_back(1);
545 r1_map.push_back(1); r2_map.push_back(2); r3_map.push_back(1); r4_map.push_back(2);
546 r1_map.push_back(1); r2_map.push_back(3); r3_map.push_back(1); r4_map.push_back(3);
549 nr1 = 3; nr2 = 6; nr3 = 3; nr4 = 6;
550 r1_map.push_back(0); r2_map.push_back(0); r3_map.push_back(0); r4_map.push_back(0);
551 r1_map.push_back(1); r2_map.push_back(1); r3_map.push_back(1); r4_map.push_back(1);
552 r1_map.push_back(0); r2_map.push_back(2); r3_map.push_back(0); r4_map.push_back(2);
553 r1_map.push_back(1); r2_map.push_back(3); r3_map.push_back(1); r4_map.push_back(3);
554 r1_map.push_back(2); r2_map.push_back(4); r3_map.push_back(2); r4_map.push_back(4);
555 r1_map.push_back(2); r2_map.push_back(5); r3_map.push_back(2); r4_map.push_back(5);
566 void WriteFile(
const vector<vector<GammaParams> > &bkg_gps,
567 const vector<string> &bkg_names,
568 const vector<GammaParams> &sig_gp,
569 const vector<GammaParams> &mc_gp,
570 const vector<double> &data_counts){
571 size_t nr1, nr2, nr3, nr4;
572 vector<size_t> r1_map, r2_map, r3_map, r4_map;
573 GetBinMapping(nr1, r1_map, nr2, r2_map, nr3, r3_map, nr4, r4_map);
575 ostringstream file_name;
576 file_name <<
"txt/data_card";
592 file_name <<
".txt" << flush;
594 ofstream
file(file_name.str().c_str());
595 file <<
"imax " << nr4 <<
" number of channels\n";
596 file <<
"jmax " << bkg_gps.size() <<
" number of backgrounds\n";
597 file <<
"kmax * number of nuisance parameters\n";
598 file <<
"------------\n";
600 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
601 file <<
' ' << setw(12) << (ir4+1);
604 file <<
"observation";
605 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
606 file <<
' ' << setw(12) << data_counts.at(ir4+nr1+nr2+nr3);
609 file <<
"------------\n";
611 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
612 for(
size_t i = 0; i < 3; ++i){
613 file <<
' ' << setw(12) << (ir4+1);
618 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
619 file <<
' ' << setw(12) <<
"sig";
620 for(
size_t isam = 0; isam < bkg_names.size(); ++isam){
621 file <<
' ' << setw(12) << bkg_names.at(isam);
626 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
628 for(
size_t isam = 0; isam < bkg_names.size(); ++isam){
629 file <<
' ' << setw(12) << (isam+1);
634 vector<double> sig_pred(0);
635 vector<vector<double> > bkg_preds(bkg_gps.size());
636 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
637 size_t ir1 = r1_map.at(ir4);
638 size_t ir2 = r2_map.at(ir4)+nr1;
639 size_t ir3 = r3_map.at(ir4)+nr1+nr2;
640 size_t iir4 = r4_map.at(ir4)+nr1+nr2+nr3;
641 sig_pred.push_back(sig_gp.at(iir4).Yield());
642 file <<
' ' << setw(12) << sig_pred.back();
643 for(
size_t isam = 0; isam < bkg_gps.size(); ++isam){
644 bkg_preds.at(isam).push_back(
GetPred(data_counts, mc_gp, bkg_gps.at(isam), ir1, ir2, ir3, iir4));
645 file <<
' ' << setw(12) << bkg_preds.at(isam).back();
649 file <<
"------------\n";
652 GammaToLogN13(file, r1_map, nr1, nr2, nr4, data_counts, bkg_gps.size());
653 GammaToLogN2(file, r2_map, nr1, nr2, nr4, data_counts, bkg_gps.size());
655 vector<double> mc_counts(mc_gp.size());
656 for(
size_t i = 0; i < mc_gp.size(); ++i){
657 mc_counts.at(i) = mc_gp.at(i).NEffective();
664 PrintGamma(file, r4_map,
"sgnl_r4", 4, nr1, nr2, nr3, nr4, sig_gp, sig_pred, 0, bkg_gps.size());
665 for(
size_t isam = 0; isam < bkg_preds.size(); ++isam){
666 PrintGamma(file, r4_map, bkg_names.at(isam)+
"_r4",4, nr1, nr2, nr3, nr4, bkg_gps.at(isam), bkg_preds.at(isam), isam+1, bkg_gps.size());
674 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
675 size_t ir1 = r1_map.at(ir4);
676 size_t ir2 = r2_map.at(ir4)+nr1;
677 size_t ir3 = r3_map.at(ir4)+nr1+nr2;
678 size_t iir4 = r4_map.at(ir4)+nr1+nr2+nr3;
680 double kappa = mc_gp.at(ir1).Yield();
681 kappa /= mc_gp.at(ir2).Yield();
682 kappa /= mc_gp.at(ir3).Yield();
683 kappa *= mc_gp.at(iir4).Yield();
685 file <<
' ' << setw(12) <<
'-';
686 for(
size_t isam = 0; isam < bkg_gps.size(); ++isam){
687 file <<
' ' << setw(12) <<
kappa;
694 cout << endl <<
"Created data card at " << file_name.str() << endl << endl;
698 double raw_in,
double weight_in,
double pred_in){
699 raw_out = TMath::Nint(raw_in);
701 weight_out = pred_in/raw_out;
703 weight_out = weight_in;
708 const vector<GammaParams> &mc_gp,
709 const vector<GammaParams> &proc_gp,
715 double pred = data.at(ir2)*data.at(ir3)/data.at(ir1);
718 pred *= (proc_gp.at(ir4).Yield())/mc_gp.at(ir4).Yield();
722 pred *= mc_gp.at(ir1).Yield();
723 pred /= mc_gp.at(ir2).Yield();
724 pred /= mc_gp.at(ir3).Yield();
725 pred *= mc_gp.at(ir4).Yield();
729 size_t id1 = 0, id2 = 0;
732 case 6: id1 = 4; id2 = 6;
break;
734 case 7: id1 = 5; id2 = 7;
break;
737 pred *= proc_gp.at(ir4).Yield();
738 pred /= proc_gp.at(id1).Yield()+proc_gp.at(id2).Yield();
746 const string &name,
size_t iregion,
747 size_t nr1,
size_t nr2,
size_t nr3,
size_t nr4,
748 const vector<GammaParams> &gps,
749 const vector<double> &preds,
750 size_t iproc,
size_t nbkgs){
751 size_t nri = -1;
size_t offset = 0;
753 case 1: nri = nr1; offset = 0;
break;
754 case 2: nri = nr2; offset = nr1;
break;
755 case 3: nri = nr3; offset = nr1+nr2;
break;
756 case 4: nri = nr4; offset = nr1+nr2+nr3;
break;
759 for(
size_t iri = 0; iri < nri; ++iri){
762 GetGammaParameters(gmn_raw, gmn_wght, gps.at(iri+offset).NEffective(), gps.at(iri+offset).Weight(), preds.at(iri));
763 file <<
Expand(name+
'_'+
ToString(iri+1),12) <<
" gmN " << setw(12) << gmn_raw;
764 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
765 if(map.at(ir4) == iri){
766 for(
size_t i = 0; i < (nbkgs+1); ++i){
768 file <<
' ' << setw(12) << gmn_wght;
770 file <<
' ' << setw(12) <<
'-';
774 for(
size_t isam = 0; isam < (nbkgs+1); ++isam){
775 file <<
' ' << setw(12) <<
'-';
787 string s = oss.str();
788 size_t l = s.find(
'.');
797 double lf = 1./sqrt(
lumi/10.);
802 file <<
"n_isr lnN ";
808 file <<
"isr_pt lnN ";
814 file <<
"top_pt lnN ";
820 file <<
"high_mt lnN ";
826 file <<
"dilep_data lnN ";
832 file <<
"dilep_mc lnN ";
840 file <<
"n_isr lnN ";
846 file <<
"isr_pt lnN ";
852 file <<
"top_pt lnN ";
858 file <<
"high_mt lnN ";
864 file <<
"dilep_data lnN ";
870 file <<
"dilep_mc lnN ";
878 file <<
"n_isr lnN ";
886 file <<
"isr_pt lnN ";
894 file <<
"top_pt lnN ";
902 file <<
"high_mt lnN ";
910 file <<
"dilep_data lnN ";
918 file <<
"dilep_mc lnN ";
933 file <<
' ' << setw(12) <<
'-';
934 for(
size_t ibkg = 0; ibkg < nbkgs; ++ibkg){
935 file <<
' ' << setw(12) << (1.+val/100.);
940 file <<
' ' << setw(12) <<
'-';
941 for(
size_t ibkg = 0; ibkg < nbkgs; ++ibkg){
942 file <<
' ' << setw(12) << (
ToString(1./(1.+minus/100.))+
'/'+
ToString(1.+plus/100.));
947 while(in.size() < size){
954 size_t nr1,
size_t nr2,
size_t nr4,
955 const vector<double> &counts,
size_t nbkgs){
956 for(
size_t icr = 0; icr < nr1; ++icr){
958 vector<vector<float> > entries(2,vector<float>(1)), weights(2,vector<float>(1,1.));
959 vector<float> powers(2);
960 entries.at(0).at(0) = counts.at(icr);
962 entries.at(1).at(0) = counts.at(icr+nr1+nr2);
967 double center =
calcKappa(entries, weights, powers, minus, plus,
false,
verbose);
968 minus = 1./(1.+minus/center);
969 plus = 1.+plus/center;
970 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
971 if(map.at(ir4) == icr){
973 for(
size_t ibkg = 0; ibkg < nbkgs; ++ibkg){
974 file <<
' ' << minus <<
'/' << plus;
977 for(
size_t ibkg = 0; ibkg < (nbkgs+1); ++ibkg){
978 file <<
' ' << setw(12) <<
'-';
987 size_t nr1,
size_t nr2,
size_t nr4,
988 const vector<double> &counts,
size_t nbkgs){
989 for(
size_t icr = 0; icr < nr2; ++icr){
991 vector<vector<float> > entries(1,vector<float>(1)), weights(1,vector<float>(1,1.));
992 entries.at(0).at(0) = counts.at(icr+nr1);
993 vector<float> powers(1,1.);
997 double center =
calcKappa(entries, weights, powers, minus, plus,
false,
verbose);
998 minus = 1./(1.+minus/center);
999 plus = 1.+plus/center;
1000 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
1001 if(map.at(ir4) == icr){
1003 for(
size_t ibkg = 0; ibkg < nbkgs; ++ibkg){
1004 file <<
' ' << minus <<
'/' << plus;
1007 for(
size_t ibkg = 0; ibkg < (nbkgs+1); ++ibkg){
1008 file <<
' ' << setw(12) <<
'-';
1017 size_t nr1,
size_t nr2,
size_t nr4,
1018 const vector<vector<GammaParams> > &gps){
1019 for(
size_t icr = 0; icr < nr1; ++icr){
1021 vector<vector<float> > entries(2,vector<float>(gps.size())), weights(2,vector<float>(gps.size()));
1022 for(
size_t isample = 0; isample < gps.size(); ++isample){
1023 entries.at(0).at(isample) = gps.at(isample).at(icr).NEffective();
1024 entries.at(1).at(isample) = gps.at(isample).at(icr+nr1+nr2).NEffective();
1025 weights.at(0).at(isample) = gps.at(isample).at(icr).Weight();
1026 weights.at(1).at(isample) = gps.at(isample).at(icr+nr1+nr2).Weight();
1028 vector<float> powers(2);
1034 double center =
calcKappa(entries, weights, powers, minus, plus,
false,
verbose);
1035 minus = 1./(1.+minus/center);
1036 plus = 1.+plus/center;
1037 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
1038 if(map.at(ir4) == icr){
1040 for(
size_t ibkg = 0; ibkg < gps.size(); ++ibkg){
1041 file <<
' ' << minus <<
'/' << plus;
1044 for(
size_t ibkg = 0; ibkg < (gps.size()+1); ++ibkg){
1045 file <<
' ' << setw(12) <<
'-';
1054 size_t nr1,
size_t nr2,
size_t nr4,
1055 const vector<vector<GammaParams> > &gps){
1056 for(
size_t icr = 0; icr < nr2; ++icr){
1058 vector<vector<float> > entries(1,vector<float>(gps.size())), weights(1,vector<float>(gps.size()));
1059 for(
size_t isample = 0; isample < gps.size(); ++isample){
1060 entries.at(0).at(isample) = gps.at(isample).at(icr+nr1).NEffective();
1061 weights.at(0).at(isample) = gps.at(isample).at(icr+nr1).Weight();
1063 vector<float> powers(1,-1.);
1067 double center =
calcKappa(entries, weights, powers, minus, plus,
false,
verbose);
1068 minus = 1./(1.+minus/center);
1069 plus = 1.+plus/center;
1070 for(
size_t ir4 = 0; ir4 < nr4; ++ir4){
1071 if(map.at(ir4) == icr){
1073 for(
size_t ibkg = 0; ibkg < gps.size(); ++ibkg){
1074 file <<
' ' << minus <<
'/' << plus;
1077 for(
size_t ibkg = 0; ibkg < (gps.size()+1); ++ibkg){
1078 file <<
' ' << setw(12) <<
'-';
1086 void PrintDebug(
const vector<GammaParams> &gps,
const string &name){
1088 <<
' ' << setw(16) <<
"Process" 1089 <<
' ' << setw(16) <<
"Bin" 1090 <<
' ' << setw(16) <<
"Yield" 1091 <<
' ' << setw(16) <<
"Uncertainty" 1092 <<
' ' << setw(16) <<
"N. Effective" 1093 <<
' ' << setw(16) <<
"Weight" 1095 for(
size_t ibin = 0; ibin < gps.size(); ++ibin){
1096 printf(
" %16s", name.c_str());
1097 printf(
" %16d", static_cast<int>(ibin+1));
1098 printf(
" %16.2f", gps.at(ibin).Yield());
1099 printf(
" %16.2f", gps.at(ibin).Uncertainty());
1100 printf(
" %16.2f", gps.at(ibin).NEffective());
1101 printf(
" %16.6f", gps.at(ibin).Weight());
void GammaToLogN2(ofstream &file, const vector< size_t > &map, size_t nr1, size_t nr2, size_t nr4, const vector< double > &counts, size_t nbkgs)
void GammaToLogN13(ofstream &file, const vector< size_t > &map, size_t nr1, size_t nr2, size_t nr4, const vector< double > &counts, size_t nbkgs)
void PrintDebug(const vector< GammaParams > &gps, const string &name)
void WriteFile(const vector< vector< GammaParams > > &bkg_gps, const vector< string > &bkg_names, const vector< GammaParams > &sig_gp, const vector< GammaParams > &mc_gp, const vector< double > &data_counts)
std::string ToString(const T &x)
void GetOptions(int argc, char *argv[])
float const & weight() const
void GetBinMapping(size_t &nr1, vector< size_t > &r1_map, size_t &nr2, vector< size_t > &r2_map, size_t &nr3, vector< size_t > &r3_map, size_t &nr4, vector< size_t > &r4_map)
void PrintGamma(ofstream &file, const vector< size_t > map, const string &name, size_t iregion, size_t nr1, size_t nr2, size_t nr3, size_t nr4, const vector< GammaParams > &gps, const vector< double > &preds, size_t iproc, size_t nbkgs)
void CountsToGammas(double sumw, double sumw2, double sumw_backup, double sumw2_backup, double &nraw, double &weight)
string NoDecimal(double x)
int main(int argc, char *argv[])
void GetMCTotals(vector< GammaParams > &mc_gp, const vector< vector< GammaParams > > &bkg_gps)
float const & met() const
string Expand(string in, size_t size)
virtual float const & mj() const
void RepAsymLogN(ofstream &file, double minus, double plus, size_t nbkgs)
void RepLogN(ofstream &file, double val, size_t nbkgs)
void GetGammaParameters(int &raw_out, double &weight_out, double raw_in, double weight_in, double pred_in)
void GetCounts(small_tree_quick &tree, vector< GammaParams > &gp)
double GetPred(const vector< double > &data, const vector< GammaParams > &mc_gp, const vector< GammaParams > &proc_gp, size_t ir1, size_t ir2, size_t ir3, size_t ir4)
size_t LookUpBin(small_tree_quick &tree)
int const & njets() const
virtual void GetEntry(const long entry)
void MockUpData(vector< double > &data, const vector< GammaParams > &sig_gp, const vector< vector< GammaParams > > &bkg_gps)
virtual int const & ntks_chg_mini() const
int Add(const std::string &filename)
double calcKappa(std::vector< std::vector< float > > &entries, std::vector< std::vector< float > > &weights, std::vector< float > &powers, float &mSigma, float &pSigma, bool do_data=false, bool verbose=false, bool do_plot=false, int nrep=100000)
void PrintSystematics(ofstream &file, size_t nbkgs)