diff --git a/_a_zh_systematics_8cc_source.html b/_a_zh_systematics_8cc_source.html
index f7da8845466..f8bbb4c714b 100644
--- a/_a_zh_systematics_8cc_source.html
+++ b/_a_zh_systematics_8cc_source.html
@@ -302,7 +302,7 @@
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
@@ -314,7 +314,7 @@
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
CombineHarvester & signals()
void AddSystematics_AZh(CombineHarvester &cb, CombineHarvester src)
@@ -322,7 +322,7 @@
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
diff --git a/_auto_rebin_8cc_source.html b/_auto_rebin_8cc_source.html
index 97885cac04f..96d8a02a182 100644
--- a/_auto_rebin_8cc_source.html
+++ b/_auto_rebin_8cc_source.html
@@ -453,8 +453,8 @@
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-std::unique_ptr< TH1 > ClonedScaledShape() const
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+std::unique_ptr< TH1 > ClonedScaledShape() const
std::set< std::string > bin_set()
int GetMaximumFracUncertBin(TH1F &total_bkg)
Return bin with maximum value of fractional error.
@@ -462,8 +462,8 @@
void FindNewBinning(TH1F &total_bkg, std::vector< double > &new_bins, double bin_condition, double bin_uncert_fraction, int mode)
Pass through the total background histogram to find bins failing the required condition ("empty" bins...
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-void ForEachProc(Function func)
-
+void ForEachProc(Function func)
+
void Rebin(CombineHarvester &src, CombineHarvester &dest)
Work out optimal binning using the total background histogram built from src, and apply the binning t...
diff --git a/_bin_by_bin_8cc_source.html b/_bin_by_bin_8cc_source.html
index 004941f1099..d415091668e 100644
--- a/_bin_by_bin_8cc_source.html
+++ b/_bin_by_bin_8cc_source.html
@@ -312,7 +312,7 @@
void CreateParameterIfEmpty(std::string const &name)
void set_name(std::string const &name)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
virtual int bin_id() const
std::set< std::string > bin_set()
void InsertSystematic(ch::Systematic const &sys)
@@ -326,15 +326,15 @@
virtual std::string const & mass() const
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-void ForEachProc(Function func)
-TH1 const * shape() const
+void ForEachProc(Function func)
+TH1 const * shape() const
void set_value_u(double const &value_u)
-static std::ostream & PrintHeader(std::ostream &out)
+static std::ostream & PrintHeader(std::ostream &out)
void MergeAndAdd(CombineHarvester &src, CombineHarvester &dest)
A convenience function which calls MergeBinErrors and AddBinByBin in turn.
virtual std::string const & bin() const
virtual std::string const & era() const
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
-
+
std::string const & name() const
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest ...
diff --git a/_c_m_s_hist_func_factory_8cc.html b/_c_m_s_hist_func_factory_8cc.html
new file mode 100644
index 00000000000..371142d0ea2
--- /dev/null
+++ b/_c_m_s_hist_func_factory_8cc.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+CombineHarvester: CombinePdfs/src/CMSHistFuncFactory.cc File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CombineHarvester
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "CombineHarvester/CombinePdfs/interface/CMSHistFuncFactory.h "
+
#include <iostream>
+
#include <set>
+
#include <vector>
+
#include <string>
+
#include "boost/lexical_cast.hpp"
+
#include "boost/format.hpp"
+
#include "boost/multi_array.hpp"
+
#include "TVector.h"
+
#include "TGraphErrors.h"
+
#include "RooFitResult.h"
+
#include "RooRealVar.h"
+
#include "RooDataHist.h"
+
#include "RooProduct.h"
+
#include "RooConstVar.h"
+
#include "CombineHarvester/CombineTools/interface/Logging.h "
+
+
Go to the source code of this file.
+
+
+
+
+
+
+
diff --git a/_c_m_s_hist_func_factory_8cc_source.html b/_c_m_s_hist_func_factory_8cc_source.html
new file mode 100644
index 00000000000..df4826ae226
--- /dev/null
+++ b/_c_m_s_hist_func_factory_8cc_source.html
@@ -0,0 +1,861 @@
+
+
+
+
+
+
+
+CombineHarvester: CombinePdfs/src/CMSHistFuncFactory.cc Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CombineHarvester
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file.
+
+
+
+
+
6 #include "boost/lexical_cast.hpp"
+
7 #include "boost/format.hpp"
+
8 #include "boost/multi_array.hpp"
+
+
10 #include "TGraphErrors.h"
+
11 #include "RooFitResult.h"
+
12 #include "RooRealVar.h"
+
13 #include "RooDataHist.h"
+
14 #include "RooProduct.h"
+
15 #include "RooConstVar.h"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
29 for (
auto const & bin : cb.
bin_set ()) {
+
30 for (
auto const & proc : cb.
cp ().
bin ({bin}).process_set()) {
+
+
32 std::cout <<
">> Processing " << bin <<
"," << proc <<
"\n" ;
+
33 RunSingleProc(cb, ws, bin, proc);
+
+
+
36 TH1F data_hist = cb.
cp ().
bin ({bin}).GetObservedShape();
+
37 if (rebin_) data_hist =
RebinHist (data_hist);
+
+
+
40 RooRealVar *xvar = ws.var(TString::Format(
"CMS_x_%s" , bin.c_str()));
+
41 RooDataHist rdh_dat(TString::Format(
"%s_data_obs" , bin.c_str()),
"" ,
+
42 RooArgList(*xvar), &data_hist);
+
+
+
+
+
+
+
+
+
+
+
53 void CMSHistFuncFactory::RunSingleProc(
CombineHarvester & cb, RooWorkspace& ws,
+
54 std::string bin, std::string
process ) {
+
+
+
+
58 using boost::lexical_cast;
+
59 using boost::multi_array;
+
+
+
62 TString key = bin +
"_" + process;
+
+
+
+
+
+
68 unsigned m = m_str_vec.size();
+
+
70 if (m_str_vec.size() == 1) {
+
+
72 std::sort(m_str_vec.begin(), m_str_vec.end(),
+
73 [](
string const & s1,
string const & s2) {
+
74 return lexical_cast<
double >(s1) < lexical_cast<double>(s2);
+
+
76 for (
auto const & s : m_str_vec) {
+
77 if (v_) std::cout <<
">>>> Mass point: " << s <<
"\n" ;
+
78 m_vec.push_back(lexical_cast<double>(s));
+
+
+
+
+
+
84 vector<string> ss_vec =
+
+
+
87 for (
auto const & s : m_str_vec) {
+
88 if (cbp.
cp ().
syst_type ({
"shape" ,
"shapeU" }).mass({s}).syst_name_set().size() !=
+
+
90 throw std::runtime_error(
FNERROR (
+
91 "Some mass points do not have the full set of shape systematics, "
+
92 "this is currently unsupported" ));
+
+
+
95 unsigned ss = ss_vec.size();
+
+
97 vector<string> ls_vec =
+
+
99 unsigned ls = ls_vec.size();
+
+
+
102 multi_array<ch::Process *, 1> pr_arr(extents[m]);
+
+
+
105 multi_array<ch::Systematic *, 2> ss_arr(extents[ss][m]);
+
+
+
+
+
+
111 multi_array<double, 1> ss_scale_arr(extents[ss]);
+
+
+
114 multi_array<bool, 1> ss_must_scale_arr(extents[ss]);
+
+
+
+
118 multi_array<ch::Systematic *, 2> ls_arr(extents[ls][m]);
+
+
+
+
122 multi_array<std::shared_ptr<RooRealVar>, 1> ss_scale_var_arr(extents[ss]);
+
+
+
125 multi_array<std::shared_ptr<RooConstVar>, 1> ss_scale_fac_arr(extents[ss]);
+
+
+
+
129 multi_array<std::shared_ptr<RooProduct>, 1> ss_scale_prod_arr(extents[ss]);
+
+
+
132 for (
unsigned mi = 0; mi < m; ++mi) {
+
+
+
+
+
137 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
+
139 cbp.
cp ().
mass ({m_str_vec[mi]}).syst_name({ss_vec[ssi]})
+
+
+
+
+
144 for (
unsigned lsi = 0; lsi < ls; ++lsi) {
+
+
146 cbp.
cp ().
mass ({m_str_vec[mi]}).syst_name({ls_vec[lsi]})
+
+
+
+
+
+
+
+
+
+
+
158 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
+
+
+
162 ss_scale_var_arr[ssi] =
+
163 std::make_shared<RooRealVar>(ss_vec[ssi].c_str(),
"" , 0);
+
+
+
+
+
+
+
170 for (
unsigned mi = 0; mi < m; ++mi) {
+
171 scales.insert(ss_arr[ssi][mi]->scale());
+
+
173 if (scales.size() > 1) {
+
+
+
176 "Shape morphing parameters that vary with mass are not allowed" ));
+
+
+
179 ss_scale_arr[ssi] = *(scales.begin());
+
+
181 if (std::fabs(ss_scale_arr[ssi] - 1.0) > 1E-6) {
+
182 ss_must_scale_arr[ssi] =
true ;
+
+
184 ss_scale_fac_arr[ssi] = std::make_shared<RooConstVar>(
+
185 TString::Format(
"%g" , ss_scale_arr[ssi]),
"" ,
+
+
+
+
189 ss_scale_prod_arr[ssi] = std::make_shared<RooProduct>(
+
190 ss_vec[ssi] +
"_scaled_" + key,
"" ,
+
191 RooArgList(*(ss_scale_var_arr[ssi]), *(ss_scale_fac_arr[ssi])));
+
+
193 ss_list.add(*(ss_scale_prod_arr[ssi]));
+
+
+
+
197 ss_list.add(*(ss_scale_var_arr[ssi]));
+
+
+
+
+
+
204 std::cout <<
">> Shape systematics: " << ss <<
"\n" ;
+
205 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
206 std::cout << boost::format(
"%-50s %-5i %-8.3g\n" )
+
207 % ss_vec[ssi] % ss_must_scale_arr[ssi] % ss_scale_arr[ssi];
+
+
+
+
+
+
+
+
+
+
+
+
+
220 vector<string> lms_vec;
+
+
+
223 vector<unsigned > lms_vec_idx;
+
224 for (
unsigned lsi = 0; lsi < ls; ++lsi) {
+
+
+
+
+
+
+
+
232 for (
unsigned mi = 0; mi < m; ++mi) {
+
233 Systematic *n = ls_arr[lsi][mi];
+
234 k_hi.insert(n->value_u());
+
+
236 k_lo.insert(n->value_d());
+
+
+
+
240 if (k_hi.size() > 1 || k_lo.size() > 1) {
+
241 lms_vec.push_back(ls_vec[lsi]);
+
242 lms_set.insert(ls_vec[lsi]);
+
243 lms_vec_idx.push_back(lsi);
+
+
+
246 unsigned lms = lms_vec.size();
+
+
248 multi_array<ch::Systematic *, 2> lms_arr(extents[lms][m]);
+
249 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
250 for (
unsigned mi = 0; mi < m; ++mi) {
+
251 lms_arr[lmsi][mi] = ls_arr[lms_vec_idx[lmsi]][mi];
+
+
+
+
+
256 multi_array<std::shared_ptr<RooRealVar>, 1> lms_var_arr(extents[lms]);
+
257 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
+
259 std::make_shared<RooRealVar>(lms_vec[lmsi].c_str(),
"" , 0);
+
+
+
+
+
264 std::cout <<
">> lnN morphing systematics: " << lms <<
"\n" ;
+
265 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
266 std::cout <<
">>>> " << lms_vec[lmsi] <<
"\n" ;
+
+
+
+
+
+
272 multi_array<std::shared_ptr<TH1F>, 2> hist_arr(extents[m][1+ss*2]);
+
+
+
275 multi_array<double, 1> rate_arr(extents[m]);
+
+
+
278 multi_array<double, 1> rate_unc_arr(extents[m]);
+
+
280 multi_array<std::shared_ptr<TList>, 1> list_arr(extents[m]);
+
+
+
+
+
285 multi_array<double, 2> ss_k_hi_arr(extents[ss][m]);
+
286 multi_array<double, 2> ss_k_lo_arr(extents[ss][m]);
+
+
+
289 multi_array<std::shared_ptr<RooAbsReal>, 1> ss_spl_hi_arr(extents[ss]);
+
290 multi_array<std::shared_ptr<RooAbsReal>, 1> ss_spl_lo_arr(extents[ss]);
+
+
+
293 multi_array<std::shared_ptr<AsymPow>, 1> ss_asy_arr(extents[ss]);
+
+
+
296 multi_array<double, 2> lms_k_hi_arr(extents[lms][m]);
+
297 multi_array<double, 2> lms_k_lo_arr(extents[lms][m]);
+
298 multi_array<std::shared_ptr<RooSpline1D>, 1> lms_spl_hi_arr(extents[lms]);
+
299 multi_array<std::shared_ptr<RooSpline1D>, 1> lms_spl_lo_arr(extents[lms]);
+
300 multi_array<std::shared_ptr<AsymPow>, 1> lms_asy_arr(extents[lms]);
+
+
302 for (
unsigned mi = 0; mi < m; ++mi) {
+
+
+
+
+
+
308 std::make_shared<TH1F>(AsTH1F(pr_arr[mi]->ClonedScaledShape().
get ()));
+
309 if (rebin_) *hist_arr[mi][0] =
RebinHist (*hist_arr[mi][0]);
+
+
311 for (
int b = 1; b < hist_arr[mi][0]->GetNbinsX() + 1; ++b) {
+
312 hist_arr[mi][0]->SetBinError(b, 0.);
+
+
+
+
+
+
+
+
+
+
+
+
+
325 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
326 hist_arr[mi][1 + 2 * ssi] =
+
327 std::make_shared<TH1F>(AsTH1F(ss_arr[ssi][mi]->shape_u()));
+
328 hist_arr[mi][2 + 2 * ssi] =
+
329 std::make_shared<TH1F>(AsTH1F(ss_arr[ssi][mi]->shape_d()));
+
330 if (rebin_) *hist_arr[mi][1 + 2 * ssi] =
RebinHist (*hist_arr[mi][1 + 2 * ssi]);
+
331 if (rebin_) *hist_arr[mi][2 + 2 * ssi] =
RebinHist (*hist_arr[mi][2 + 2 * ssi]);
+
332 TH1F* h_hi = hist_arr[mi][1 + 2 * ssi].get();
+
333 TH1F* h_lo = hist_arr[mi][2 + 2 * ssi].get();
+
334 if (h_hi->Integral() > 0.) {
+
335 h_hi->Scale(hist_arr[mi][0]->Integral() / h_hi->Integral());
+
+
337 if (h_lo->Integral() > 0.) {
+
338 h_lo->Scale(hist_arr[mi][0]->Integral() / h_lo->Integral());
+
+
+
+
+
+
+
+
+
+
+
+
350 ss_k_hi_arr[ssi][mi] = ss_arr[ssi][mi]->value_u();
+
351 ss_k_lo_arr[ssi][mi] = ss_arr[ssi][mi]->value_d();
+
+
+
354 if (std::fabs(ss_scale_arr[ssi] - 1.0) > 1E-6) {
+
355 ss_k_hi_arr[ssi][mi] = std::pow(ss_arr[ssi][mi]->value_u(), ss_scale_arr[ssi]);
+
356 ss_k_lo_arr[ssi][mi] = std::pow(ss_arr[ssi][mi]->value_d(), ss_scale_arr[ssi]);
+
+
+
+
+
361 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
362 lms_k_hi_arr[lmsi][mi] = lms_arr[lmsi][mi]->value_u();
+
363 if (lms_arr[lmsi][mi]->asymm()) {
+
364 lms_k_lo_arr[lmsi][mi] = lms_arr[lmsi][mi]->value_d();
+
+
366 lms_k_lo_arr[lmsi][mi] = 1. / lms_arr[lmsi][mi]->value_u();
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
385 for (
unsigned mi = 0; mi < m; ++mi) {
+
386 std::cout << boost::format(
"%-10s" ) % m_str_vec[mi];
+
+
+
389 for (
unsigned mi = 0; mi < m; ++mi) {
+
390 std::cout << boost::format(
"%-10.5g" ) % rate_arr[mi];
+
+
+
393 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
394 std::cout << ss_vec[ssi] <<
" Up" << std::endl;
+
395 for (
unsigned mi = 0; mi < m; ++mi) {
+
396 std::cout << boost::format(
"%-10.5g" ) % ss_k_hi_arr[ssi][mi];
+
+
+
399 std::cout << ss_vec[ssi] <<
" Down" << std::endl;
+
400 for (
unsigned mi = 0; mi < m; ++mi) {
+
401 std::cout << boost::format(
"%-10.5g" ) % ss_k_lo_arr[ssi][mi];
+
+
+
+
405 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
406 std::cout << lms_vec[lmsi] <<
" Up" << std::endl;
+
407 for (
unsigned mi = 0; mi < m; ++mi) {
+
408 std::cout << boost::format(
"%-10.5g" ) % lms_k_hi_arr[lmsi][mi];
+
+
+
411 std::cout << lms_vec[lmsi] <<
" Down" << std::endl;
+
412 for (
unsigned mi = 0; mi < m; ++mi) {
+
413 std::cout << boost::format(
"%-10.5g" ) % lms_k_lo_arr[lmsi][mi];
+
+
+
+
+
+
+
+
421 TString interp =
"LINEAR" ;
+
+
+
+
+
+
427 vector<double> new_m_vec(m_vec);
+
+
+
+
431 new_m_vec.insert(new_m_vec.begin(),m_vec[0]-1E-6);
+
432 new_m_vec.push_back(m_vec[m-1]+1E-6);
+
+
+
435 multi_array<double, 1> new_rate_arr(extents[m+2]);
+
436 new_rate_arr[0] = 0.0;
+
+
+
+
440 for (
unsigned i = 0; i < m; ++i) new_rate_arr[i+1] = 1.0;
+
441 new_rate_arr[m+1] = 0.0;
+
+
443 bool force_template_limit =
false ;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
458 std::shared_ptr<RooSpline1D> rate_spline;
+
459 if (m > 1) rate_spline = std::make_shared<RooSpline1D>(
"interp_rate_" +key,
"" , *mass_var[process],
+
460 force_template_limit ? m+2 : m,
+
461 force_template_limit ? new_m_vec.data() : m_vec.data(),
+
462 force_template_limit ? new_rate_arr.data() : rate_arr.data(),
+
+
+
+
+
+
+
+
470 RooArgList rate_prod;
+
+
472 rate_prod.add(*rate_spline);
+
+
+
475 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
+
477 ss_spl_hi_arr[ssi] = std::make_shared<RooSpline1D>(
"spline_hi_" +
+
478 key +
"_" + ss_vec[ssi],
"" , *mass_var[process], m, m_vec.data(),
+
479 ss_k_hi_arr[ssi].origin(), interp);
+
480 ss_spl_lo_arr[ssi] = std::make_shared<RooSpline1D>(
"spline_lo_" +
+
481 key +
"_" + ss_vec[ssi],
"" , *mass_var[process], m, m_vec.data(),
+
482 ss_k_lo_arr[ssi].origin(), interp);
+
+
484 ss_spl_hi_arr[ssi] = std::make_shared<RooConstVar>(TString::Format(
"%g" , ss_k_hi_arr[ssi][0]),
"" , ss_k_hi_arr[ssi][0]);
+
485 ss_spl_lo_arr[ssi] = std::make_shared<RooConstVar>(TString::Format(
"%g" , ss_k_lo_arr[ssi][0]),
"" , ss_k_lo_arr[ssi][0]);
+
+
487 ss_asy_arr[ssi] = std::make_shared<AsymPow>(
"systeff_" +
+
488 key +
"_" + ss_vec[ssi],
"" ,
+
489 *(ss_spl_lo_arr[ssi]), *(ss_spl_hi_arr[ssi]),
+
490 *(ss_scale_var_arr[ssi]));
+
+
+
+
+
+
+
+
+
499 rate_prod.add(*(ss_asy_arr[ssi]));
+
+
+
+
503 for (
unsigned lmsi = 0; lmsi < lms; ++lmsi) {
+
504 lms_spl_hi_arr[lmsi] = std::make_shared<RooSpline1D>(
"spline_hi_" +
+
505 key +
"_" + lms_vec[lmsi],
"" , *mass_var[process], m, m_vec.data(),
+
506 lms_k_hi_arr[lmsi].origin(), interp);
+
507 lms_spl_lo_arr[lmsi] = std::make_shared<RooSpline1D>(
"spline_lo_" +
+
508 key +
"_" + lms_vec[lmsi],
"" , *mass_var[process], m, m_vec.data(),
+
509 lms_k_lo_arr[lmsi].origin(), interp);
+
510 lms_asy_arr[lmsi] = std::make_shared<AsymPow>(
"systeff_" +
+
511 key +
"_" + lms_vec[lmsi],
"" , *(lms_spl_lo_arr[lmsi]),
+
512 *(lms_spl_hi_arr[lmsi]), *(lms_var_arr[lmsi]));
+
513 rate_prod.add(*(lms_asy_arr[lmsi]));
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
529 TString xvar_name = TString::Format(
"CMS_x_%s" , bin.c_str());
+
530 RooRealVar xvar = VarFromHist(xvar_name, xvar_name, data_hist);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
551 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
552 if (ss_scale_arr[ssi] < qrange) qrange = ss_scale_arr[ssi];
+
+
+
+
556 TString morph_name = key +
"_morph" ;
+
+
+
+
+
+
+
+
+
566 CMSHistFunc morph_func(morph_name,
"" , xvar, *hist_arr[0][0]);
+
567 morph_func.setVerticalSmoothRegion(qrange);
+
568 morph_func.setHorizontalType(CMSHistFunc::HorizontalType::Integral);
+
569 morph_func.setVerticalMorphs(ss_list);
+
+
571 morph_func.addHorizontalMorph(*mass_var[process], TVectorD(m, m_vec.data()));
+
+
573 morph_func.prepareStorage();
+
+
575 for (
unsigned mi = 0; mi < m; ++mi) {
+
576 morph_func.setShape(0, mi, 0, 0, *hist_arr[mi][0]);
+
577 for (
unsigned ssi = 0; ssi < ss; ++ssi) {
+
578 morph_func.setShape(0, mi, ssi + 1, 0, *hist_arr[mi][2 + 2 * ssi]);
+
579 morph_func.setShape(0, mi, ssi + 1, 1, *hist_arr[mi][1 + 2 * ssi]);
+
+
+
+
+
+
+
+
588 TString norm_postfix =
"norm" ;
+
589 RooProduct morph_rate(morph_name +
"_" + TString(norm_postfix),
"" ,
+
+
+
+
+
+
+
597 ws.import(morph_func, RooFit::RecycleConflictNodes());
+
598 if (rate_prod.getSize() > 0) {
+
599 ws.import(morph_rate, RooFit::RecycleConflictNodes());
+
+
601 std::cout <<
"No normalisation term to import!\n" ;
+
+
+
+
+
+
+
+
+
610 std::string mass_min = m_str_vec.at(0);
+
+
+
+
614 return p->
bin () == bin && p->
process () == process && p->
mass () != mass_min;
+
+
+
+
+
+
+
621 return (n->
bin () == bin && n->
process () == process) &&
+
622 ((n->
mass () != mass_min) || (n->
type () ==
"shape" || n->
type () ==
"shapeU" ) ||
+
623 (lms_set.count(n->
name ())));
+
+
+
+
+
+
629 if (p->
bin () == bin && p->
process () == process) {
+
+
+
+
+
+
+
+
+
+
+
640 if (n->
bin () == bin && n->
process () == process) {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
virtual void set_mass(std::string const &mass)
+
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
+
void Run(CombineHarvester &cb, RooWorkspace &ws)
+
std::string const & type() const
+
std::set< std::string > bin_set()
+
+
+
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
+
std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+
void set_rate(double const &rate)
+
CombineHarvester & FilterProcs(Function func)
+
+
virtual std::string const & process() const
+
void set_rate(double const &rate)
+
+
virtual std::string const & mass() const
+
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
+
+
TH1F RebinHist(TH1F const &hist)
+
void ForEachProc(Function func)
+
+
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
+
std::vector< T > Set2Vec(std::set< T > const &in)
+
virtual std::string const & bin() const
+
void ForEachSyst(Function func)
+
CombineHarvester & FilterSysts(Function func)
+
+
+
std::string const & name() const
+
+
+
void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
+
+
+
+
+
+
diff --git a/_c_m_s_hist_func_factory_8h.html b/_c_m_s_hist_func_factory_8h.html
new file mode 100644
index 00000000000..286e3a9ab4e
--- /dev/null
+++ b/_c_m_s_hist_func_factory_8h.html
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+CombineHarvester: CombinePdfs/interface/CMSHistFuncFactory.h File Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CombineHarvester
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include <algorithm>
+
#include <vector>
+
#include "RooWorkspace.h"
+
#include "RooHistPdf.h"
+
#include "RooBinning.h"
+
#include "CombineHarvester/CombineTools/interface/CombineHarvester.h "
+
#include "HiggsAnalysis/CombinedLimit/interface/CMSHistFunc.h"
+
#include "HiggsAnalysis/CombinedLimit/interface/RooSpline1D.h"
+
#include "HiggsAnalysis/CombinedLimit/interface/VerticalInterpHistPdf.h"
+
#include "HiggsAnalysis/CombinedLimit/interface/AsymPow.h"
+
+
Go to the source code of this file.
+
+
+
+
+
+
+
diff --git a/_c_m_s_hist_func_factory_8h_source.html b/_c_m_s_hist_func_factory_8h_source.html
new file mode 100644
index 00000000000..ddca3df436b
--- /dev/null
+++ b/_c_m_s_hist_func_factory_8h_source.html
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+CombineHarvester: CombinePdfs/interface/CMSHistFuncFactory.h Source File
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CombineHarvester
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Go to the documentation of this file. 1 #ifndef CMSHistFuncFactory_h
+
2 #define CMSHistFuncFactory_h
+
+
+
5 #include "RooWorkspace.h"
+
6 #include "RooHistPdf.h"
+
7 #include "RooBinning.h"
+
+
9 #pragma GCC diagnostic push
+
10 #pragma GCC diagnostic ignored "-Wuninitialized"
+
11 #pragma GCC diagnostic ignored "-Wignored-qualifiers"
+
12 #pragma GCC diagnostic ignored "-Wunused-parameter"
+
13 #include "HiggsAnalysis/CombinedLimit/interface/CMSHistFunc.h"
+
14 #include "HiggsAnalysis/CombinedLimit/interface/RooSpline1D.h"
+
15 #include "HiggsAnalysis/CombinedLimit/interface/VerticalInterpHistPdf.h"
+
16 #include "HiggsAnalysis/CombinedLimit/interface/AsymPow.h"
+
17 #pragma GCC diagnostic pop
+
+
+
+
+
+
+
+
+
+
+
+
29 std::map<std::string, RooAbsReal*> mass_var;
+
+
31 std::map<std::string, RooRealVar> obs_;
+
+
+
+
35 TH1F AsTH1F(TH1
const * hist) {
+
+
37 TH1F
const * test_f =
dynamic_cast< TH1F const*
> (hist);
+
38 TH1D
const * test_d =
dynamic_cast< TH1D const*
> (hist);
+
+
+
+
+
+
44 throw std::runtime_error(
"TH1 is not a TH1F or a TH1D" );
+
+
+
+
+
49 RooRealVar VarFromHist(TString name, TString title, TH1
const & hist) {
+
+
51 if (hist.GetXaxis()->GetXbins() && hist.GetXaxis()->GetXbins()->GetSize()) {
+
52 binning =
new RooBinning(hist.GetNbinsX(), hist.GetXaxis()->GetXbins()->GetArray());
+
+
54 binning =
new RooBinning(hist.GetNbinsX(), hist.GetXaxis()->GetXmin(), hist.GetXaxis()->GetXmax());
+
+
56 RooRealVar x(name, title, hist.GetXaxis()->GetXmin(), hist.GetXaxis()->GetXmax());
+
+
58 x.setBinning(*binning);
+
+
+
+
+
+
+
+
+
void SetHorizontalMorphingVariable(std::map< std::string, RooAbsReal * > &hvar)
+
+
+
void Run(CombineHarvester &cb, RooWorkspace &ws)
+
+
+
+
+
+
+
+
+
+
diff --git a/_card_writer_8cc_source.html b/_card_writer_8cc_source.html
index d664a9c4610..70ff5e18f85 100644
--- a/_card_writer_8cc_source.html
+++ b/_card_writer_8cc_source.html
@@ -158,112 +158,134 @@
57 f_map[key] = mappings;
-
-
-
- 62 void CardWriter::MakeDirs(PatternMap
const & map)
const {
- 63 std::set<boost::filesystem::path> mk_dirs;
- 64 for (
auto const & f : map) {
- 65 mk_dirs.insert(boost::filesystem::path(f.first).parent_path());
-
- 67 for (
auto & dir : mk_dirs) {
- 68 FNLOGC (std::cout, v_ > 0) <<
"Creating dir " << dir.string() <<
"\n" ;
-
- 70 boost::filesystem::create_directories(dir);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 92 auto f_map = BuildMap(root_pattern_, cmb);
-
- 94 if (create_dirs_) MakeDirs(f_map);
+ 59 auto masses = cmb.cp().mass(wildcard_masses_,
false ).mass_set();
+ 60 cmb.cp().mass(wildcard_masses_,
true )
+
+
+ 63 std::string key = Compile(pattern, obj,
true );
+ 64 for (
auto m : masses) {
+ 65 std::string full_key = key;
+ 66 boost::replace_all(full_key,
"$MASS" , m);
+ 67 if (f_map.count(full_key))
continue ;
+ 68 std::set<std::string> mappings;
+
+ 70 std::string wildcard_key = key;
+ 71 boost::replace_all(wildcard_key,
"$MASS" , obj->
mass ());
+ 72 mappings.insert(wildcard_key);
+ 73 f_map[full_key] = mappings;
+
+
+ 76 for (
auto const & it : f_map) {
+ 77 std::cout << it.first <<
": " ;
+ 78 for (
auto const & it2 : it.second) std::cout << it2 <<
" " ;
+
+
+
+
+
+ 84 void CardWriter::MakeDirs(PatternMap
const & map)
const {
+ 85 std::set<boost::filesystem::path> mk_dirs;
+ 86 for (
auto const & f : map) {
+ 87 mk_dirs.insert(boost::filesystem::path(f.first).parent_path());
+
+ 89 for (
auto & dir : mk_dirs) {
+ 90 FNLOGC (std::cout, v_ > 0) <<
"Creating dir " << dir.string() <<
"\n" ;
+
+ 92 boost::filesystem::create_directories(dir);
+
+
-
-
-
-
-
- 101 std::map<Object const*, std::string> root_map;
-
- 103 root_map[obj] = Compile(root_pattern_, obj);
-
- 105 std::map<Object const*, std::string> text_map;
-
- 107 text_map[obj] = Compile(text_pattern_, obj);
-
-
- 110 std::map<std::string, CombineHarvester> datacards;
- 111 for (
auto const & f : f_map) {
-
- 113 FNLOGC (std::cout, v_ > 0) <<
"Creating file " << f.first <<
"\n" ;
- 114 TFile file(f.first.c_str(),
"RECREATE" );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 114 auto f_map = BuildMap(root_pattern_, cmb);
-
-
-
-
-
-
-
-
- 124 auto d_map = BuildMap(text_pattern_, f_cmb);
-
-
- 127 if (create_dirs_) MakeDirs(d_map);
-
-
- 130 for (
auto const & d : d_map) {
-
-
-
-
-
- 136 FNLOGC (std::cout, v_ > 0) <<
"Creating datacard " << d.first <<
"\n" ;
-
- 138 datacards[d.first] = d_cmb;
-
-
-
-
+ 116 if (create_dirs_) MakeDirs(f_map);
+
+
+
+
+
+
+ 123 std::map<Object const*, std::string> root_map;
+
+ 125 root_map[obj] = Compile(root_pattern_, obj);
+
+ 127 std::map<Object const*, std::string> text_map;
+
+ 129 text_map[obj] = Compile(text_pattern_, obj);
+
+
+ 132 std::map<std::string, CombineHarvester> datacards;
+ 133 for (
auto const & f : f_map) {
+
+ 135 FNLOGC (std::cout, v_ > 0) <<
"Creating file " << f.first <<
"\n" ;
+ 136 TFile file(f.first.c_str(),
"RECREATE" );
+
+
+
+
+
+
- 144 std::string CardWriter::Compile(std::string pattern,
ch::Object const * obj,
- 145 bool skip_mass)
const {
- 146 #ifdef TIME_FUNCTIONS
-
-
- 149 boost::replace_all(pattern,
"$TAG" , tag_);
- 150 boost::replace_all(pattern,
"$BINID" ,
- 151 boost::lexical_cast<std::string>(obj->
bin_id ()));
- 152 boost::replace_all(pattern,
"$BIN" , obj->
bin ());
- 153 boost::replace_all(pattern,
"$PROCESS" , obj->
process ());
- 154 if (!skip_mass) boost::replace_all(pattern,
"$MASS" , obj->
mass ());
- 155 boost::replace_all(pattern,
"$ERA" , obj->
era ());
- 156 boost::replace_all(pattern,
"$CHANNEL" , obj->
channel ());
- 157 boost::replace_all(pattern,
"$ANALYSIS" , obj->
analysis ());
-
-
-
+
+
+ 146 auto d_map = BuildMap(text_pattern_, f_cmb);
+
+
+ 149 if (create_dirs_) MakeDirs(d_map);
+
+
+ 152 for (
auto const & d : d_map) {
+
+
+
+
+
+ 158 FNLOGC (std::cout, v_ > 0) <<
"Creating datacard " << d.first <<
"\n" ;
+
+ 160 datacards[d.first] = d_cmb;
+
+
+
+
+
+ 166 std::string CardWriter::Compile(std::string pattern,
ch::Object const * obj,
+ 167 bool skip_mass)
const {
+ 168 #ifdef TIME_FUNCTIONS
+
+
+ 171 boost::replace_all(pattern,
"$TAG" , tag_);
+ 172 boost::replace_all(pattern,
"$BINID" ,
+ 173 boost::lexical_cast<std::string>(obj->
bin_id ()));
+ 174 boost::replace_all(pattern,
"$BIN" , obj->
bin ());
+ 175 boost::replace_all(pattern,
"$PROCESS" , obj->
process ());
+ 176 if (!skip_mass) boost::replace_all(pattern,
"$MASS" , obj->
mass ());
+ 177 boost::replace_all(pattern,
"$ERA" , obj->
era ());
+ 178 boost::replace_all(pattern,
"$CHANNEL" , obj->
channel ());
+ 179 boost::replace_all(pattern,
"$ANALYSIS" , obj->
analysis ());
+
+
+
virtual std::string const & analysis() const
-void WriteDatacard(std::string const &name, std::string const &root_file)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+void WriteDatacard(std::string const &name, std::string const &root_file)
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
virtual int bin_id() const
CardWriter & SetWildcardMasses(std::vector< std::string > const &masses)
Redefine the mass values that should be treated as wildcards.
Automates the writing of datacards into directory structures.
@@ -273,15 +295,15 @@
virtual std::string const & mass() const
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
-CombineHarvester & FilterAll(Function func)
+CombineHarvester & FilterAll(Function func)
#define LAUNCH_FUNCTION_TIMER(x, y)
Conveniently initialise a ch::FnTimer instance.
bool contains(const Range &r, T p)
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
virtual std::string const & bin() const
virtual std::string const & era() const
-void ForEachObj(Function func)
-std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
+void ForEachObj(Function func)
+std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
diff --git a/_card_writer_8h_source.html b/_card_writer_8h_source.html
index 237abb896e7..91939307c61 100644
--- a/_card_writer_8h_source.html
+++ b/_card_writer_8h_source.html
@@ -145,7 +145,7 @@
CardWriter(std::string const &text_pattern, std::string const &root_pattern)
Must be constructed with text and ROOT file patterns.
CardWriter & CreateDirectories(bool flag)
Control whether directories can be created if missing.
-std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
+std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
CardWriter & SetVerbosity(unsigned v)
Set >= 1 for verbose output, otherwise silent.
diff --git a/_combine_harvester_8cc_source.html b/_combine_harvester_8cc_source.html
index eab7c2f5294..1be8db04058 100644
--- a/_combine_harvester_8cc_source.html
+++ b/_combine_harvester_8cc_source.html
@@ -143,770 +143,781 @@
41 swap (first.wspaces_, second.wspaces_);
42 swap (first.verbosity_, second.verbosity_);
43 swap (first.flags_, second.flags_);
- 44 swap (first.log_, second.log_);
-
-
-
-
-
-
- 51 params_(other.params_),
- 52 wspaces_(other.wspaces_),
-
- 54 verbosity_(other.verbosity_),
-
-
-
-
-
-
-
- 62 auto it = flags_.find(flag);
- 63 if (it != flags_.end()) {
- 64 FNLOG (std::cout) <<
"Changing value of flag \"" << it->first <<
"\" from " << it->second <<
" to " << value <<
"\n" ;
-
-
- 67 FNLOG (std::cout) <<
"Created new flag \"" << flag <<
"\" with value " << value <<
"\n" ;
-
-
-
-
-
- 73 auto it = flags_.find(flag);
- 74 if (it != flags_.end()) {
-
-
- 77 throw std::runtime_error(
FNERROR (
"Flag " + flag +
" is not defined" ));
-
-
-
-
-
-
-
- 85 cpy.obs_.resize(obs_.size());
- 86 cpy.procs_.resize(procs_.size());
- 87 cpy.systs_.resize(systs_.size());
-
- 89 cpy.verbosity_ = verbosity_;
-
-
-
- 93 std::map<RooAbsData const*, RooAbsData *> dat_map;
- 94 std::map<RooAbsPdf const*, RooAbsPdf *> pdf_map;
- 95 std::map<RooRealVar const*, RooRealVar *> var_map;
- 96 std::map<RooAbsReal const*, RooAbsReal *> fun_map;
-
-
- 99 for (
auto const & it : wspaces_) {
- 100 std::string ws_name = it.first;
- 101 RooWorkspace
const & o_wsp = *(it.second.get());
- 102 cpy.wspaces_.insert({ws_name, std::make_shared<RooWorkspace>(o_wsp)});
- 103 RooWorkspace & n_wsp = *(cpy.wspaces_.at(ws_name).get());
-
- 105 std::list<RooAbsData *> o_dat = o_wsp.allData();
- 106 RooArgSet
const & o_pdf = o_wsp.allPdfs();
- 107 RooArgSet
const & o_var = o_wsp.allVars();
- 108 RooArgSet
const & o_fun = o_wsp.allFunctions();
-
- 110 std::list<RooAbsData *> n_dat = n_wsp.allData();
- 111 RooArgSet
const & n_pdf = n_wsp.allPdfs();
- 112 RooArgSet
const & n_var = n_wsp.allVars();
- 113 RooArgSet
const & n_fun = n_wsp.allFunctions();
-
- 115 auto o_dat_it = o_dat.begin();
- 116 auto n_dat_it = n_dat.begin();
- 117 for (; o_dat_it != o_dat.end(); ++o_dat_it, ++n_dat_it) {
- 118 dat_map[*o_dat_it] = *n_dat_it;
-
-
- 121 auto o_pdf_it = o_pdf.createIterator();
- 122 auto n_pdf_it = n_pdf.createIterator();
-
- 124 RooAbsPdf *o_pdf_ptr =
static_cast< RooAbsPdf*
> (**o_pdf_it);
- 125 RooAbsPdf *n_pdf_ptr =
static_cast< RooAbsPdf*
> (**n_pdf_it);
- 126 if (o_pdf_ptr && n_pdf_ptr) pdf_map[o_pdf_ptr] = n_pdf_ptr;
-
- 128 }
while (o_pdf_it->Next());
-
- 130 auto o_var_it = o_var.createIterator();
- 131 auto n_var_it = n_var.createIterator();
-
- 133 RooRealVar *o_var_ptr =
static_cast< RooRealVar*
> (**o_var_it);
- 134 RooRealVar *n_var_ptr =
static_cast< RooRealVar*
> (**n_var_it);
- 135 if (o_var_ptr && n_var_ptr) var_map[o_var_ptr] = n_var_ptr;
-
- 137 }
while (o_var_it->Next());
-
- 139 auto o_fun_it = o_fun.createIterator();
- 140 auto n_fun_it = n_fun.createIterator();
-
- 142 RooAbsReal *o_fun_ptr =
static_cast< RooAbsReal*
> (**o_fun_it);
- 143 RooAbsReal *n_fun_ptr =
static_cast< RooAbsReal*
> (**n_fun_it);
- 144 if (o_fun_ptr && n_fun_ptr) fun_map[o_fun_ptr] = n_fun_ptr;
-
- 146 }
while (o_fun_it->Next());
-
-
-
- 150 for (std::size_t i = 0; i < cpy.obs_.size(); ++i) {
-
- 152 cpy.obs_[i] = std::make_shared<Observation>(*(obs_[i]));
-
- 154 cpy.obs_[i]->set_data(dat_map.at(obs_[i]->data()));
-
-
-
- 158 for (std::size_t i = 0; i < cpy.procs_.size(); ++i) {
-
- 160 cpy.procs_[i] = std::make_shared<Process>(*(procs_[i]));
- 161 if (procs_[i]->pdf())
- 162 cpy.procs_[i]->set_pdf(pdf_map.at(procs_[i]->pdf()));
- 163 if (procs_[i]->
data ())
- 164 cpy.procs_[i]->set_data(dat_map.at(procs_[i]->data()));
- 165 if (procs_[i]->norm())
- 166 cpy.procs_[i]->set_norm(fun_map.at(procs_[i]->norm()));
-
-
-
- 170 for (std::size_t i = 0; i < cpy.systs_.size(); ++i) {
-
- 172 cpy.systs_[i] = std::make_shared<Systematic>(*(systs_[i]));
- 173 if (systs_[i]->data_u() || systs_[i]->data_d()) {
- 174 cpy.systs_[i]->set_data(
- 175 static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_u())),
- 176 static_cast< RooDataHist*
> (dat_map.at(systs_[i]->data_d())),
-
-
-
-
-
- 182 for (
auto const & it : params_) {
-
- 184 cpy.params_.insert({it.first, std::make_shared<Parameter>(*(it.second))});
-
- 186 params_.insert({it.first,
nullptr });
-
-
-
- 190 for (
auto it : cpy.params_) {
- 191 for (
unsigned i = 0; i < it.second->vars().size(); ++i) {
- 192 it.second->vars()[i] = var_map.at(it.second->vars()[i]);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 223 for (
unsigned i = 0; i < obs_.size(); ++i)
- 224 std::cout << *(obs_[i]) <<
"\n" ;
-
-
-
-
-
- 230 for (
unsigned i = 0; i < procs_.size(); ++i)
- 231 std::cout << *(procs_[i]) <<
"\n" ;
-
-
-
-
-
- 237 for (
unsigned i = 0; i < systs_.size(); ++i)
- 238 std::cout << *(systs_[i]) <<
"\n" ;
-
-
-
-
-
- 244 for (
auto const & it : params_) std::cout << *(it.second) <<
"\n" ;
-
-
-
-
- 272 void CombineHarvester::LoadShapes(
Observation * entry,
- 273 std::vector<HistMapping>
const & mappings) {
-
-
- 276 throw std::runtime_error(
FNERROR (
"Observation already contains a shape" ));
-
-
- 279 if (verbosity_ >= 2) {
- 280 LOGLINE (log(),
"Extracting shapes for Observation:" );
-
-
- 283 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
-
-
-
-
- 288 if (mappings.size() == 0) {
- 289 if (verbosity_ >= 2)
LOGLINE (log(),
"No mappings in this card, assuming FAKE" );
-
-
- 292 HistMapping mapping =
- 293 ResolveMapping(entry->process(), entry->bin(), mappings);
- 294 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
- 295 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
- 296 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
- 297 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
-
- 299 if (verbosity_ >= 2) {
- 300 LOGLINE (log(),
"Resolved Mapping:" );
- 301 log() << mapping <<
"\n" ;
-
+ 44 swap (first.post_lines_, second.post_lines_);
+ 45 swap (first.log_, second.log_);
+
+
+
+
+
+
+ 52 params_(other.params_),
+ 53 wspaces_(other.wspaces_),
+
+ 55 post_lines_(other.post_lines_),
+ 56 verbosity_(other.verbosity_),
+
+
+
+
+
+
+
+ 64 auto it = flags_.find(flag);
+ 65 if (it != flags_.end()) {
+ 66 FNLOG (std::cout) <<
"Changing value of flag \"" << it->first <<
"\" from " << it->second <<
" to " << value <<
"\n" ;
+
+
+ 69 FNLOG (std::cout) <<
"Created new flag \"" << flag <<
"\" with value " << value <<
"\n" ;
+
+
+
+
+
+ 75 auto it = flags_.find(flag);
+ 76 if (it != flags_.end()) {
+
+
+ 79 throw std::runtime_error(
FNERROR (
"Flag " + flag +
" is not defined" ));
+
+
+
+
+
+
+
+ 87 cpy.obs_.resize(obs_.size());
+ 88 cpy.procs_.resize(procs_.size());
+ 89 cpy.systs_.resize(systs_.size());
+
+ 91 cpy.verbosity_ = verbosity_;
+ 92 cpy.post_lines_ = post_lines_;
+
+
+
+ 96 std::map<RooAbsData const*, RooAbsData *> dat_map;
+ 97 std::map<RooAbsReal const*, RooAbsReal *> pdf_map;
+ 98 std::map<RooRealVar const*, RooRealVar *> var_map;
+ 99 std::map<RooAbsReal const*, RooAbsReal *> fun_map;
+
+
+ 102 for (
auto const & it : wspaces_) {
+ 103 std::string ws_name = it.first;
+ 104 RooWorkspace
const & o_wsp = *(it.second.get());
+ 105 cpy.wspaces_.insert({ws_name, std::make_shared<RooWorkspace>(o_wsp)});
+ 106 RooWorkspace & n_wsp = *(cpy.wspaces_.at(ws_name).get());
+
+ 108 std::list<RooAbsData *> o_dat = o_wsp.allData();
+ 109 RooArgSet
const & o_pdf = o_wsp.allPdfs();
+ 110 RooArgSet
const & o_var = o_wsp.allVars();
+ 111 RooArgSet
const & o_fun = o_wsp.allFunctions();
+
+ 113 std::list<RooAbsData *> n_dat = n_wsp.allData();
+ 114 RooArgSet
const & n_pdf = n_wsp.allPdfs();
+ 115 RooArgSet
const & n_var = n_wsp.allVars();
+ 116 RooArgSet
const & n_fun = n_wsp.allFunctions();
+
+ 118 auto o_dat_it = o_dat.begin();
+ 119 auto n_dat_it = n_dat.begin();
+ 120 for (; o_dat_it != o_dat.end(); ++o_dat_it, ++n_dat_it) {
+ 121 dat_map[*o_dat_it] = *n_dat_it;
+
+
+ 124 auto o_pdf_it = o_pdf.createIterator();
+ 125 auto n_pdf_it = n_pdf.createIterator();
+
+ 127 RooAbsPdf *o_pdf_ptr =
static_cast< RooAbsPdf*
> (**o_pdf_it);
+ 128 RooAbsPdf *n_pdf_ptr =
static_cast< RooAbsPdf*
> (**n_pdf_it);
+ 129 if (o_pdf_ptr && n_pdf_ptr) pdf_map[o_pdf_ptr] = n_pdf_ptr;
+
+ 131 }
while (o_pdf_it->Next());
+
+ 133 auto o_var_it = o_var.createIterator();
+ 134 auto n_var_it = n_var.createIterator();
+
+ 136 RooRealVar *o_var_ptr =
static_cast< RooRealVar*
> (**o_var_it);
+ 137 RooRealVar *n_var_ptr =
static_cast< RooRealVar*
> (**n_var_it);
+ 138 if (o_var_ptr && n_var_ptr) var_map[o_var_ptr] = n_var_ptr;
+
+ 140 }
while (o_var_it->Next());
+
+ 142 auto o_fun_it = o_fun.createIterator();
+ 143 auto n_fun_it = n_fun.createIterator();
+
+ 145 RooAbsReal *o_fun_ptr =
static_cast< RooAbsReal*
> (**o_fun_it);
+ 146 RooAbsReal *n_fun_ptr =
static_cast< RooAbsReal*
> (**n_fun_it);
+ 147 if (o_fun_ptr && n_fun_ptr) fun_map[o_fun_ptr] = n_fun_ptr;
+
+ 149 }
while (o_fun_it->Next());
+
+
+
+ 153 for (std::size_t i = 0; i < cpy.obs_.size(); ++i) {
+
+ 155 cpy.obs_[i] = std::make_shared<Observation>(*(obs_[i]));
+
+ 157 cpy.obs_[i]->set_data(dat_map.at(obs_[i]->data()));
+
+
+
+ 161 for (std::size_t i = 0; i < cpy.procs_.size(); ++i) {
+
+ 163 cpy.procs_[i] = std::make_shared<Process>(*(procs_[i]));
+ 164 if (procs_[i]->pdf())
+ 165 cpy.procs_[i]->set_pdf(pdf_map.at(procs_[i]->pdf()));
+ 166 if (procs_[i]->observable())
+ 167 cpy.procs_[i]->set_observable(var_map.at(procs_[i]->observable()));
+ 168 if (procs_[i]->
data ())
+ 169 cpy.procs_[i]->set_data(dat_map.at(procs_[i]->data()));
+ 170 if (procs_[i]->norm())
+ 171 cpy.procs_[i]->set_norm(fun_map.at(procs_[i]->norm()));
+
+
+
+ 175 for (std::size_t i = 0; i < cpy.systs_.size(); ++i) {
+
+ 177 cpy.systs_[i] = std::make_shared<Systematic>(*(systs_[i]));
+ 178 if (systs_[i]->data_u() || systs_[i]->data_d()) {
+ 179 cpy.systs_[i]->set_data(
+ 180 static_cast<RooDataHist*>(dat_map.at(systs_[i]->data_u())),
+ 181 static_cast< RooDataHist*
> (dat_map.at(systs_[i]->data_d())),
+
+
+
+
+
+ 187 for (
auto const & it : params_) {
+
+ 189 cpy.params_.insert({it.first, std::make_shared<Parameter>(*(it.second))});
+
+ 191 params_.insert({it.first,
nullptr });
+
+
+
+ 195 for (
auto it : cpy.params_) {
+ 196 for (
unsigned i = 0; i < it.second->vars().size(); ++i) {
+ 197 it.second->vars()[i] = var_map.at(it.second->vars()[i]);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 228 for (
unsigned i = 0; i < obs_.size(); ++i)
+ 229 std::cout << *(obs_[i]) <<
"\n" ;
+
+
+
+
+
+ 235 for (
unsigned i = 0; i < procs_.size(); ++i)
+ 236 std::cout << *(procs_[i]) <<
"\n" ;
+
+
+
+
+
+ 242 for (
unsigned i = 0; i < systs_.size(); ++i)
+ 243 std::cout << *(systs_[i]) <<
"\n" ;
+
+
+
+
+
+ 249 for (
auto const & it : params_) std::cout << *(it.second) <<
"\n" ;
+
+
+
+
+ 277 void CombineHarvester::LoadShapes(
Observation * entry,
+ 278 std::vector<HistMapping>
const & mappings) {
+
+
+ 281 throw std::runtime_error(
FNERROR (
"Observation already contains a shape" ));
+
+
+ 284 if (verbosity_ >= 2) {
+ 285 LOGLINE (log(),
"Extracting shapes for Observation:" );
+
+
+ 288 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
+
+
+
+
+ 293 if (mappings.size() == 0) {
+ 294 if (verbosity_ >= 2)
LOGLINE (log(),
"No mappings in this card, assuming FAKE" );
+
+
+ 297 HistMapping mapping =
+ 298 ResolveMapping(entry->process(), entry->bin(), mappings);
+ 299 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
+ 300 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
+ 301 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
+ 302 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
- 304 if (mapping.is_fake) {
- 305 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is FAKE" );
- 306 }
else if (mapping.IsHist()) {
- 307 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type in TH1" );
-
-
- 310 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
-
- 312 entry->set_shape(std::move(h),
true );
- 313 }
else if (mapping.IsData()) {
- 314 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooAbsData" );
-
-
- 317 RooAbsData* dat = mapping.ws->data(mapping.WorkspaceObj().c_str());
-
- 319 throw std::runtime_error(
FNERROR (
"RooAbsData not found in workspace" ));
-
-
- 322 entry->set_data(dat);
- 323 entry->set_rate(dat->sumEntries());
-
-
-
- 356 void CombineHarvester::LoadShapes(Process* entry,
- 357 std::vector<HistMapping>
const & mappings) {
-
- 359 if (entry->shape() || entry->pdf()) {
- 360 throw std::runtime_error(
FNERROR (
"Process already contains a shape" ));
-
-
- 363 if (verbosity_ >= 2) {
- 364 LOGLINE (log(),
"Extracting shapes for Process:" );
-
-
- 367 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
-
-
-
-
- 372 if (mappings.size() == 0) {
- 373 if (verbosity_ >= 2)
LOGLINE (log(),
"No mappings in this card, assuming FAKE" );
-
-
- 376 HistMapping mapping =
- 377 ResolveMapping(entry->process(), entry->bin(), mappings);
- 378 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
- 379 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
- 380 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
- 381 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
-
- 383 if (verbosity_ >= 2) {
- 384 LOGLINE (log(),
"Resolved Mapping:" );
- 385 log() << mapping <<
"\n" ;
-
+ 304 if (verbosity_ >= 2) {
+ 305 LOGLINE (log(),
"Resolved Mapping:" );
+ 306 log() << mapping <<
"\n" ;
+
+
+ 309 if (mapping.is_fake) {
+ 310 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is FAKE" );
+ 311 }
else if (mapping.IsHist()) {
+ 312 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type in TH1" );
+
+
+ 315 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
+
+ 317 entry->set_shape(std::move(h),
true );
+ 318 }
else if (mapping.IsData()) {
+ 319 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooAbsData" );
+
+
+ 322 RooAbsData* dat = mapping.ws->data(mapping.WorkspaceObj().c_str());
+
+ 324 throw std::runtime_error(
FNERROR (
"RooAbsData not found in workspace" ));
+
+
+ 327 entry->set_data(dat);
+ 328 entry->set_rate(dat->sumEntries());
+
+
+
+ 361 void CombineHarvester::LoadShapes(Process* entry,
+ 362 std::vector<HistMapping>
const & mappings) {
+
+ 364 if (entry->shape() || entry->pdf()) {
+ 365 throw std::runtime_error(
FNERROR (
"Process already contains a shape" ));
+
+
+ 368 if (verbosity_ >= 2) {
+ 369 LOGLINE (log(),
"Extracting shapes for Process:" );
+
+
+ 372 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
+
+
+
+
+ 377 if (mappings.size() == 0) {
+ 378 if (verbosity_ >= 2)
LOGLINE (log(),
"No mappings in this card, assuming FAKE" );
+
+
+ 381 HistMapping mapping =
+ 382 ResolveMapping(entry->process(), entry->bin(), mappings);
+ 383 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
+ 384 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
+ 385 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
+ 386 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
- 388 if (mapping.is_fake) {
- 389 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is FAKE" );
- 390 }
else if (mapping.IsHist()) {
- 391 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is TH1" );
-
-
- 394 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
-
-
- 397 LOGLINE (log(),
"Warning: process shape has negative bins" );
-
- 399 if (flags_.at(
"zero-negative-bins-on-import" )) {
-
-
-
-
- 404 entry->set_shape(std::move(h),
true );
- 405 }
else if (mapping.IsPdf()) {
- 406 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooAbsPdf/RooAbsData" );
-
-
- 409 RooAbsData*
data = mapping.ws->
data (mapping.WorkspaceObj().c_str());
- 410 RooAbsPdf* pdf = mapping.ws->pdf(mapping.WorkspaceObj().c_str());
-
- 412 if (verbosity_ >= 2) {
- 413 data->printStream(log(), data->defaultPrintContents(0),
- 414 data->defaultPrintStyle(0),
"[LoadShapes] " );
-
- 416 entry->set_data(data);
- 417 entry->set_rate(data->sumEntries());
-
- 419 if (verbosity_ >= 2) {
- 420 pdf->printStream(log(), pdf->defaultPrintContents(0),
- 421 pdf->defaultPrintStyle(0),
"[LoadShapes] " );
-
-
-
-
- 426 if (flags_.at(
"allow-missing-shapes" )) {
- 427 LOGLINE (log(),
"Warning, shape missing:" );
-
-
- 430 throw std::runtime_error(
FNERROR (
"RooAbsPdf not found in workspace" ));
-
-
-
- 434 HistMapping norm_mapping = mapping;
- 435 if (!data && norm_mapping.syst_pattern !=
"" ) {
-
-
- 438 norm_mapping.pattern = norm_mapping.syst_pattern;
- 439 boost::replace_all(norm_mapping.pattern,
"$CHANNEL" , entry->bin());
- 440 boost::replace_all(norm_mapping.pattern,
"$BIN" , entry->bin());
- 441 boost::replace_all(norm_mapping.pattern,
"$PROCESS" , entry->process());
- 442 boost::replace_all(norm_mapping.pattern,
"$MASS" , entry->mass());
-
- 444 norm_mapping.pattern +=
"_norm" ;
-
-
- 447 norm_mapping.ws->function(norm_mapping.WorkspaceObj().c_str());
-
-
- 450 entry->set_norm(norm);
- 451 if (verbosity_ >= 2) {
- 452 LOGLINE (log(),
"Normalisation RooAbsReal found" );
- 453 norm->printStream(log(), norm->defaultPrintContents(0),
- 454 norm->defaultPrintStyle(0),
"[LoadShapes] " );
-
-
-
- 458 RooRealVar* norm_var =
dynamic_cast< RooRealVar*
> (norm);
-
- 460 RooArgSet tmp_set(*norm_var);
- 461 ImportParameters(&tmp_set);
-
-
-
-
-
- 467 RooAbsData
const * data_obj = FindMatchingData(entry);
-
- 469 if (verbosity_ >= 2)
LOGLINE (log(),
"Matching RooAbsData has been found" );
-
-
- 472 ImportParameters(&argset);
-
-
-
- 476 ImportParameters(&argset);
-
-
-
- 480 LOGLINE (log(),
"No RooAbsData found, assume observable CMS_th1x" );
- 481 RooRealVar mx(
"CMS_th1x" ,
"CMS_th1x" , 0, 1);
- 482 RooArgSet tmp_set(mx);
-
-
- 485 ImportParameters(&argset);
-
-
-
- 489 ImportParameters(&argset);
-
-
-
-
-
- 495 void CombineHarvester::LoadShapes(Systematic* entry,
- 496 std::vector<HistMapping>
const & mappings) {
- 497 if (entry->shape_u() || entry->shape_d() ||
- 498 entry->data_u() || entry->data_d()) {
- 499 throw std::runtime_error(
FNERROR (
"Systematic already contains a shape" ));
-
-
- 502 if (verbosity_ >= 2) {
- 503 LOGLINE (log(),
"Extracting shapes for Systematic:" );
-
-
- 506 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
-
-
-
-
- 511 HistMapping mapping =
- 512 ResolveMapping(entry->process(), entry->bin(), mappings);
- 513 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
- 514 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
- 515 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
- 516 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
-
- 518 mapping.
IsPdf () ? mapping.SystWorkspaceObj() : mapping.syst_pattern;
- 519 boost::replace_all(p_s,
"$CHANNEL" , entry->bin());
- 520 boost::replace_all(p_s,
"$BIN" , entry->bin());
- 521 boost::replace_all(p_s,
"$PROCESS" , entry->process());
- 522 boost::replace_all(p_s,
"$MASS" , entry->mass());
- 523 std::string p_s_hi = p_s;
- 524 std::string p_s_lo = p_s;
- 525 boost::replace_all(p_s_hi,
"$SYSTEMATIC" , entry->name() +
"Up" );
- 526 boost::replace_all(p_s_lo,
"$SYSTEMATIC" , entry->name() +
"Down" );
- 527 if (mapping.IsHist()) {
- 528 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is TH1" );
- 529 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
- 530 std::unique_ptr<TH1> h_u =
GetClonedTH1 (mapping.file.get(), p_s_hi);
- 531 std::unique_ptr<TH1> h_d =
GetClonedTH1 (mapping.file.get(), p_s_lo);
-
-
- 534 LOGLINE (log(),
"Warning: Systematic shape has negative bins" );
-
- 536 if (flags_.at(
"zero-negative-bins-on-import" )) {
-
-
-
-
-
- 542 LOGLINE (log(),
"Warning: Systematic shape_u has negative bins" );
-
- 544 if (flags_.at(
"zero-negative-bins-on-import" )) {
-
-
-
-
-
- 550 LOGLINE (log(),
"Warning: Systematic shape_d has negative bins" );
-
- 552 if (flags_.at(
"zero-negative-bins-on-import" )) {
-
-
-
- 556 entry->set_shapes(std::move(h_u), std::move(h_d), h.get());
- 557 }
else if (mapping.IsPdf()) {
- 558 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooDataHist" );
-
-
- 561 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(mapping.WorkspaceObj().c_str()));
-
- 563 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(p_s_hi.c_str()));
-
- 565 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(p_s_lo.c_str()));
- 566 if (!h || !h_u || !h_d) {
- 567 if (flags_.at(
"allow-missing-shapes" )) {
- 568 LOGLINE (log(),
"Warning, shape missing:" );
-
-
- 571 throw std::runtime_error(
- 572 FNERROR (
"All shapes must be of type RooDataHist" ));
-
-
- 575 entry->set_data(h_u, h_d, h);
-
-
- 578 throw std::runtime_error(
- 579 FNERROR (
"Resolved mapping is not of TH1 / RooAbsData type" ));
-
-
-
- 602 HistMapping
const & CombineHarvester::ResolveMapping(
- 603 std::string
const &
process , std::string
const &
bin ,
- 604 std::vector<HistMapping>
const & mappings) {
- 605 StrPairVec attempts = GenerateShapeMapAttempts(process, bin);
- 606 for (
unsigned a = 0; a < attempts.size(); ++a) {
- 607 for (
unsigned m = 0; m < mappings.size(); ++m) {
- 608 if ((attempts[a].first == mappings[m].process) &&
- 609 (attempts[a].second == mappings[m].category)) {
-
-
-
-
-
- 615 FNLOG (log()) <<
"Searching for mapping for (" << bin <<
"," << process <<
")\n" ;
- 616 FNLOG (log()) <<
"Avaiable mappings:\n" ;
- 617 for (
auto const & m : mappings) {
- 618 FNLOG (log()) << m <<
"\n" ;
-
- 620 throw std::runtime_error(
FNERROR (
"Valid mapping not found" ));
-
-
- 623 CombineHarvester::StrPairVec CombineHarvester::GenerateShapeMapAttempts(
- 624 std::string process, std::string category) {
- 625 CombineHarvester::StrPairVec result;
- 626 result.push_back(std::make_pair(process , category));
- 627 result.push_back(std::make_pair(
"*" , category));
- 628 result.push_back(std::make_pair(process ,
"*" ));
- 629 result.push_back(std::make_pair(
"*" ,
"*" ));
-
-
-
- 633 std::shared_ptr<RooWorkspace> CombineHarvester::SetupWorkspace(
- 634 RooWorkspace
const & ws,
bool can_rename) {
- 635 bool name_in_use =
false ;
-
-
- 638 for (
auto const & it : wspaces_) {
-
- 640 if (it.second->uuid() == ws.uuid() && flags_[
"workspace-uuid-recycle" ]) {
- 641 FNLOGC (log(), verbosity_ >= 1)
- 642 <<
"Workspace with name " << it.second->GetName()
- 643 <<
" has the same UUID, will use this one\n" ;
-
-
- 646 if (!name_in_use && strcmp(it.second->GetName(), ws.GetName()) == 0) {
-
-
-
-
-
-
-
-
-
- 656 if (
GetFlag (
"workspaces-use-clone" )) {
- 657 wspaces_[std::string(ws.GetName())] = std::shared_ptr<RooWorkspace>(
- 658 reinterpret_cast<RooWorkspace*>(ws.Clone()));
-
- 660 wspaces_[std::string(ws.GetName())] =
- 661 std::make_shared<RooWorkspace>(RooWorkspace(ws));
-
- 663 return wspaces_.at(ws.GetName());
-
-
-
-
-
- 669 throw std::runtime_error(
FNERROR (
"A different workspace with name " +
- 670 std::string(ws.GetName()) +
-
-
-
-
- 675 std::set<int> used_ints = {0};
- 676 std::string src_name(ws.GetName());
- 677 for (
auto const & it : wspaces_) {
- 678 std::string test_name(it.second->GetName());
- 679 if (test_name.find(src_name) == 0) {
- 680 std::string postfix = test_name.substr(src_name.size());
-
- 682 int number = boost::lexical_cast<
int >(postfix);
- 683 used_ints.insert(number);
- 684 }
catch (boost::bad_lexical_cast & e) {
-
-
-
- 688 std::string new_name =
- 689 src_name + boost::lexical_cast<std::string>(*(used_ints.rbegin()) + 1);
- 690 FNLOGC (log(), verbosity_ >= 1) <<
"Workspace with name " << src_name
- 691 <<
" already defined, renaming to " << new_name
-
-
- 694 std::shared_ptr<RooWorkspace> new_wsp;
- 695 if (
GetFlag (
"workspaces-use-clone" )) {
- 696 new_wsp = std::shared_ptr<RooWorkspace>(
- 697 reinterpret_cast< RooWorkspace*
> (ws.Clone(new_name.c_str())));
-
- 699 new_wsp = std::make_shared<RooWorkspace>(RooWorkspace(ws));
-
- 701 new_wsp->SetName(new_name.c_str());
- 702 wspaces_[new_name] = new_wsp;
- 703 return wspaces_.at(new_name);
-
-
- 706 void CombineHarvester::ImportParameters(RooArgSet *vars) {
- 707 auto x = vars->createIterator();
-
- 709 RooRealVar *y =
dynamic_cast< RooRealVar*
> (**x);
-
- 711 if (!params_.count(y->GetName())) {
- 712 if (verbosity_ >= 1) {
- 713 log() <<
"[ImportParameters] Creating parameter from RooRealVar:\n" ;
- 714 y->printStream(log(), y->defaultPrintContents(0),
- 715 y->defaultPrintStyle(0),
"[ImportParameters] " );
-
-
- 718 par.set_name(y->GetName());
- 719 par.set_val(y->getVal());
- 720 if ((y->hasError() || y->hasAsymError()) &&
- 721 flags_[
"import-parameter-err" ]) {
- 722 par.set_err_d(y->getErrorLo());
- 723 par.set_err_u(y->getErrorHi());
-
-
-
+ 388 if (verbosity_ >= 2) {
+ 389 LOGLINE (log(),
"Resolved Mapping:" );
+ 390 log() << mapping <<
"\n" ;
+
+
+ 393 if (mapping.is_fake) {
+ 394 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is FAKE" );
+ 395 }
else if (mapping.IsHist()) {
+ 396 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is TH1" );
+
+
+ 399 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
+
+
+ 402 LOGLINE (log(),
"Warning: process shape has negative bins" );
+
+ 404 if (flags_.at(
"zero-negative-bins-on-import" )) {
+
+
+
+
+ 409 entry->set_shape(std::move(h),
true );
+ 410 }
else if (mapping.IsPdf()) {
+ 411 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooAbsPdf/RooAbsData" );
+
+
+ 414 RooAbsData*
data = mapping.ws->
data (mapping.WorkspaceObj().c_str());
+ 415 RooAbsReal* pdf = mapping.ws->function(mapping.WorkspaceObj().c_str());
+
+ 417 if (verbosity_ >= 2) {
+ 418 data->printStream(log(), data->defaultPrintContents(0),
+ 419 data->defaultPrintStyle(0),
"[LoadShapes] " );
+
+ 421 entry->set_data(data);
+ 422 entry->set_rate(data->sumEntries());
+
+ 424 if (verbosity_ >= 2) {
+ 425 pdf->printStream(log(), pdf->defaultPrintContents(0),
+ 426 pdf->defaultPrintStyle(0),
"[LoadShapes] " );
+
+
+
+
+ 431 if (flags_.at(
"allow-missing-shapes" )) {
+ 432 LOGLINE (log(),
"Warning, shape missing:" );
+
+
+ 435 throw std::runtime_error(
FNERROR (
"RooAbsPdf not found in workspace" ));
+
+
+
+ 439 HistMapping norm_mapping = mapping;
+ 440 if (!data && norm_mapping.syst_pattern !=
"" ) {
+
+
+ 443 norm_mapping.pattern = norm_mapping.syst_pattern;
+ 444 boost::replace_all(norm_mapping.pattern,
"$CHANNEL" , entry->bin());
+ 445 boost::replace_all(norm_mapping.pattern,
"$BIN" , entry->bin());
+ 446 boost::replace_all(norm_mapping.pattern,
"$PROCESS" , entry->process());
+ 447 boost::replace_all(norm_mapping.pattern,
"$MASS" , entry->mass());
+
+ 449 norm_mapping.pattern +=
"_norm" ;
+
+
+ 452 norm_mapping.ws->function(norm_mapping.WorkspaceObj().c_str());
+
+
+ 455 entry->set_norm(norm);
+ 456 if (verbosity_ >= 2) {
+ 457 LOGLINE (log(),
"Normalisation RooAbsReal found" );
+ 458 norm->printStream(log(), norm->defaultPrintContents(0),
+ 459 norm->defaultPrintStyle(0),
"[LoadShapes] " );
+
+
+
+ 463 RooRealVar* norm_var =
dynamic_cast< RooRealVar*
> (norm);
+
+ 465 RooArgSet tmp_set(*norm_var);
+ 466 ImportParameters(&tmp_set);
+
+
+
+
+
+ 472 RooAbsData
const * data_obj = FindMatchingData(entry);
+
+ 474 if (verbosity_ >= 2)
LOGLINE (log(),
"Matching RooAbsData has been found" );
+
+
+ 477 ImportParameters(&argset);
+ 478 if (!entry->observable()) {
+ 479 std::string var_name;
+ 480 if (data_obj) var_name = data_obj->get()->first()->GetName();
+ 481 entry->set_observable(
+ 482 (RooRealVar*)entry->pdf()->findServer(var_name.c_str()));
+
+
+
+
+ 487 ImportParameters(&argset);
+
+
+
+ 491 LOGLINE (log(),
"No RooAbsData found, assume observable CMS_th1x" );
+ 492 RooRealVar mx(
"CMS_th1x" ,
"CMS_th1x" , 0, 1);
+ 493 RooArgSet tmp_set(mx);
+
+
+ 496 ImportParameters(&argset);
+
+
+
+ 500 ImportParameters(&argset);
+
+
+
+
+
+ 506 void CombineHarvester::LoadShapes(Systematic* entry,
+ 507 std::vector<HistMapping>
const & mappings) {
+ 508 if (entry->shape_u() || entry->shape_d() ||
+ 509 entry->data_u() || entry->data_d()) {
+ 510 throw std::runtime_error(
FNERROR (
"Systematic already contains a shape" ));
+
+
+ 513 if (verbosity_ >= 2) {
+ 514 LOGLINE (log(),
"Extracting shapes for Systematic:" );
+
+
+ 517 for (HistMapping
const & m : mappings) log() << m <<
"\n" ;
+
+
+
+
+ 522 HistMapping mapping =
+ 523 ResolveMapping(entry->process(), entry->bin(), mappings);
+ 524 boost::replace_all(mapping.pattern,
"$CHANNEL" , entry->bin());
+ 525 boost::replace_all(mapping.pattern,
"$BIN" , entry->bin());
+ 526 boost::replace_all(mapping.pattern,
"$PROCESS" , entry->process());
+ 527 boost::replace_all(mapping.pattern,
"$MASS" , entry->mass());
+
+ 529 mapping.
IsPdf () ? mapping.SystWorkspaceObj() : mapping.syst_pattern;
+ 530 boost::replace_all(p_s,
"$CHANNEL" , entry->bin());
+ 531 boost::replace_all(p_s,
"$BIN" , entry->bin());
+ 532 boost::replace_all(p_s,
"$PROCESS" , entry->process());
+ 533 boost::replace_all(p_s,
"$MASS" , entry->mass());
+ 534 std::string p_s_hi = p_s;
+ 535 std::string p_s_lo = p_s;
+ 536 boost::replace_all(p_s_hi,
"$SYSTEMATIC" , entry->name() +
"Up" );
+ 537 boost::replace_all(p_s_lo,
"$SYSTEMATIC" , entry->name() +
"Down" );
+ 538 if (mapping.IsHist()) {
+ 539 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is TH1" );
+ 540 std::unique_ptr<TH1> h =
GetClonedTH1 (mapping.file.get(), mapping.pattern);
+ 541 std::unique_ptr<TH1> h_u =
GetClonedTH1 (mapping.file.get(), p_s_hi);
+ 542 std::unique_ptr<TH1> h_d =
GetClonedTH1 (mapping.file.get(), p_s_lo);
+
+
+ 545 LOGLINE (log(),
"Warning: Systematic shape has negative bins" );
+
+ 547 if (flags_.at(
"zero-negative-bins-on-import" )) {
+
+
+
+
+
+ 553 LOGLINE (log(),
"Warning: Systematic shape_u has negative bins" );
+
+ 555 if (flags_.at(
"zero-negative-bins-on-import" )) {
+
+
+
+
+
+ 561 LOGLINE (log(),
"Warning: Systematic shape_d has negative bins" );
+
+ 563 if (flags_.at(
"zero-negative-bins-on-import" )) {
+
+
+
+ 567 entry->set_shapes(std::move(h_u), std::move(h_d), h.get());
+ 568 }
else if (mapping.IsPdf()) {
+ 569 if (verbosity_ >= 2)
LOGLINE (log(),
"Mapping type is RooDataHist" );
+
+
+ 572 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(mapping.WorkspaceObj().c_str()));
+
+ 574 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(p_s_hi.c_str()));
+
+ 576 dynamic_cast< RooDataHist*
> (mapping.sys_ws->data(p_s_lo.c_str()));
+ 577 if (!h || !h_u || !h_d) {
+ 578 if (flags_.at(
"allow-missing-shapes" )) {
+ 579 LOGLINE (log(),
"Warning, shape missing:" );
+
+
+ 582 throw std::runtime_error(
+ 583 FNERROR (
"All shapes must be of type RooDataHist" ));
+
+
+ 586 entry->set_data(h_u, h_d, h);
+
+
+ 589 throw std::runtime_error(
+ 590 FNERROR (
"Resolved mapping is not of TH1 / RooAbsData type" ));
+
+
+
+ 613 HistMapping
const & CombineHarvester::ResolveMapping(
+ 614 std::string
const &
process , std::string
const &
bin ,
+ 615 std::vector<HistMapping>
const & mappings) {
+ 616 StrPairVec attempts = GenerateShapeMapAttempts(process, bin);
+ 617 for (
unsigned a = 0; a < attempts.size(); ++a) {
+ 618 for (
unsigned m = 0; m < mappings.size(); ++m) {
+ 619 if ((attempts[a].first == mappings[m].process) &&
+ 620 (attempts[a].second == mappings[m].category)) {
+
+
+
+
+
+ 626 FNLOG (log()) <<
"Searching for mapping for (" << bin <<
"," << process <<
")\n" ;
+ 627 FNLOG (log()) <<
"Avaiable mappings:\n" ;
+ 628 for (
auto const & m : mappings) {
+ 629 FNLOG (log()) << m <<
"\n" ;
+
+ 631 throw std::runtime_error(
FNERROR (
"Valid mapping not found" ));
+
+
+ 634 CombineHarvester::StrPairVec CombineHarvester::GenerateShapeMapAttempts(
+ 635 std::string process, std::string category) {
+ 636 CombineHarvester::StrPairVec result;
+ 637 result.push_back(std::make_pair(process , category));
+ 638 result.push_back(std::make_pair(
"*" , category));
+ 639 result.push_back(std::make_pair(process ,
"*" ));
+ 640 result.push_back(std::make_pair(
"*" ,
"*" ));
+
+
+
+ 644 std::shared_ptr<RooWorkspace> CombineHarvester::SetupWorkspace(
+ 645 RooWorkspace
const & ws,
bool can_rename) {
+ 646 bool name_in_use =
false ;
+
+
+ 649 for (
auto const & it : wspaces_) {
+
+ 651 if (it.second->uuid() == ws.uuid() && flags_[
"workspace-uuid-recycle" ]) {
+ 652 FNLOGC (log(), verbosity_ >= 1)
+ 653 <<
"Workspace with name " << it.second->GetName()
+ 654 <<
" has the same UUID, will use this one\n" ;
+
+
+ 657 if (!name_in_use && strcmp(it.second->GetName(), ws.GetName()) == 0) {
+
+
+
+
+
+
+
+
+
+ 667 if (
GetFlag (
"workspaces-use-clone" )) {
+ 668 wspaces_[std::string(ws.GetName())] = std::shared_ptr<RooWorkspace>(
+ 669 reinterpret_cast<RooWorkspace*>(ws.Clone()));
+
+ 671 wspaces_[std::string(ws.GetName())] =
+ 672 std::make_shared<RooWorkspace>(RooWorkspace(ws));
+
+ 674 return wspaces_.at(ws.GetName());
+
+
+
+
+
+ 680 throw std::runtime_error(
FNERROR (
"A different workspace with name " +
+ 681 std::string(ws.GetName()) +
+
+
+
+
+ 686 std::set<int> used_ints = {0};
+ 687 std::string src_name(ws.GetName());
+ 688 for (
auto const & it : wspaces_) {
+ 689 std::string test_name(it.second->GetName());
+ 690 if (test_name.find(src_name) == 0) {
+ 691 std::string postfix = test_name.substr(src_name.size());
+
+ 693 int number = boost::lexical_cast<
int >(postfix);
+ 694 used_ints.insert(number);
+ 695 }
catch (boost::bad_lexical_cast & e) {
+
+
+
+ 699 std::string new_name =
+ 700 src_name + boost::lexical_cast<std::string>(*(used_ints.rbegin()) + 1);
+ 701 FNLOGC (log(), verbosity_ >= 1) <<
"Workspace with name " << src_name
+ 702 <<
" already defined, renaming to " << new_name
+
+
+ 705 std::shared_ptr<RooWorkspace> new_wsp;
+ 706 if (
GetFlag (
"workspaces-use-clone" )) {
+ 707 new_wsp = std::shared_ptr<RooWorkspace>(
+ 708 reinterpret_cast< RooWorkspace*
> (ws.Clone(new_name.c_str())));
+
+ 710 new_wsp = std::make_shared<RooWorkspace>(RooWorkspace(ws));
+
+ 712 new_wsp->SetName(new_name.c_str());
+ 713 wspaces_[new_name] = new_wsp;
+ 714 return wspaces_.at(new_name);
+
+
+ 717 void CombineHarvester::ImportParameters(RooArgSet *vars) {
+ 718 auto x = vars->createIterator();
+
+ 720 RooRealVar *y =
dynamic_cast< RooRealVar*
> (**x);
+
+ 722 if (!params_.count(y->GetName())) {
+ 723 if (verbosity_ >= 1) {
+ 724 log() <<
"[ImportParameters] Creating parameter from RooRealVar:\n" ;
+ 725 y->printStream(log(), y->defaultPrintContents(0),
+ 726 y->defaultPrintStyle(0),
"[ImportParameters] " );
- 728 params_[y->GetName()] = std::make_shared<Parameter>(par);
-
-
- 731 log() <<
"[ImportParameters] Parameter \"" << y->GetName()
- 732 <<
"\" already exists\n" ;
-
- 734 Parameter *param = params_[y->GetName()].get();
- 735 std::vector<RooRealVar *> & p_vars = param->vars();
- 736 if (std::find(p_vars.begin(), p_vars.end(), y) == p_vars.end()) {
-
-
- 739 log() <<
"[ImportParameters] Parameter now stores " << p_vars.size()
- 740 <<
" link(s) to RooRealVar objects\n" ;
-
-
- 743 log() <<
"[ImportParameters] Parameter already stores link to "
- 744 "RooRealVar object\n" ;
-
-
-
-
-
- 750 RooAbsData
const * CombineHarvester::FindMatchingData(Process
const * proc) {
- 751 RooAbsData
const * data_obj =
nullptr ;
- 752 for (
unsigned i = 0; i < obs_.size(); ++i) {
- 753 if (proc->bin() == obs_[i]->bin() &&
- 754 proc->bin_id() == obs_[i]->bin_id()) {
- 755 data_obj = obs_[i]->data();
-
-
-
+
+ 729 par.set_name(y->GetName());
+ 730 par.set_val(y->getVal());
+ 731 if ((y->hasError() || y->hasAsymError()) &&
+ 732 flags_[
"import-parameter-err" ]) {
+ 733 par.set_err_d(y->getErrorLo());
+ 734 par.set_err_u(y->getErrorHi());
+
+
+
+
+ 739 params_[y->GetName()] = std::make_shared<Parameter>(par);
+
+
+ 742 log() <<
"[ImportParameters] Parameter \"" << y->GetName()
+ 743 <<
"\" already exists\n" ;
+
+ 745 Parameter *param = params_[y->GetName()].get();
+ 746 std::vector<RooRealVar *> & p_vars = param->vars();
+ 747 if (std::find(p_vars.begin(), p_vars.end(), y) == p_vars.end()) {
+
+
+ 750 log() <<
"[ImportParameters] Parameter now stores " << p_vars.size()
+ 751 <<
" link(s) to RooRealVar objects\n" ;
+
+
+ 754 log() <<
"[ImportParameters] Parameter already stores link to "
+ 755 "RooRealVar object\n" ;
+
+
+
- 761 ch::Parameter * CombineHarvester::SetupRateParamVar(std::string
const & name,
-
- 763 RooWorkspace *ws =
nullptr ;
- 764 if (!wspaces_.count(
"_rateParams" )) {
- 765 ws = this->SetupWorkspace(RooWorkspace(
"_rateParams" ,
"_rateParams" )).get();
-
- 767 ws = wspaces_.at(
"_rateParams" ).get();
+ 761 RooAbsData
const * CombineHarvester::FindMatchingData(Process
const * proc) {
+ 762 RooAbsData
const * data_obj =
nullptr ;
+ 763 for (
unsigned i = 0; i < obs_.size(); ++i) {
+ 764 if (proc->bin() == obs_[i]->bin() &&
+ 765 proc->bin_id() == obs_[i]->bin_id()) {
+ 766 data_obj = obs_[i]->data();
+
-
- 770 RooRealVar *var = ws->var(name.c_str());
-
-
- 773 RooRealVar tmp_var(name.c_str(), name.c_str(), 0);
-
- 775 var = ws->var(name.c_str());
- 776 FNLOGC (log(), verbosity_ > 1)
- 777 <<
"Created new RooRealVar for rateParam: " << name <<
"\n" ;
- 778 if (verbosity_ > 1) var->Print();
-
- 780 FNLOGC (log(), verbosity_ > 1)
- 781 <<
"Reusing existing RooRealVar for rateParam: " << name <<
"\n" ;
-
- 783 Parameter * param =
nullptr ;
- 784 if (!params_.count(name)) {
- 785 params_[name] = std::make_shared<Parameter>(Parameter());
- 786 param = params_.at(name).get();
- 787 param->set_name(name);
- 788 param->set_err_u(0.);
- 789 param->set_err_d(0.);
+
+
+
+ 772 ch::Parameter * CombineHarvester::SetupRateParamVar(std::string
const & name,
+
+ 774 RooWorkspace *ws =
nullptr ;
+ 775 if (!wspaces_.count(
"_rateParams" )) {
+ 776 ws = this->SetupWorkspace(RooWorkspace(
"_rateParams" ,
"_rateParams" )).get();
+
+ 778 ws = wspaces_.at(
"_rateParams" ).get();
+
+
+ 781 RooRealVar *var = ws->var(name.c_str());
+
+
+ 784 RooRealVar tmp_var(name.c_str(), name.c_str(), 0);
+
+ 786 var = ws->var(name.c_str());
+ 787 FNLOGC (log(), verbosity_ > 1)
+ 788 <<
"Created new RooRealVar for rateParam: " << name <<
"\n" ;
+ 789 if (verbosity_ > 1) var->Print();
- 791 param = params_.at(name).get();
-
-
- 794 bool var_in_par =
false ;
- 795 for (
auto const & ptr : param->vars()) {
-
-
-
-
-
-
- 802 param->vars().push_back(var);
+ 791 FNLOGC (log(), verbosity_ > 1)
+ 792 <<
"Reusing existing RooRealVar for rateParam: " << name <<
"\n" ;
+
+ 794 Parameter * param =
nullptr ;
+ 795 if (!params_.count(name)) {
+ 796 params_[name] = std::make_shared<Parameter>(Parameter());
+ 797 param = params_.at(name).get();
+ 798 param->set_name(name);
+ 799 param->set_err_u(0.);
+ 800 param->set_err_d(0.);
+
+ 802 param = params_.at(name).get();
-
- 805 FNLOGC (log(), verbosity_ > 1) <<
"Updating parameter value from "
-
-
- 808 if (verbosity_ > 1) log() <<
" to " << param->val() <<
"\n" ;
-
-
-
- 812 void CombineHarvester::SetupRateParamFunc(std::string
const & name,
- 813 std::string
const & formula,
- 814 std::string
const & pars) {
- 815 RooWorkspace *ws =
nullptr ;
- 816 if (!wspaces_.count(
"_rateParams" )) {
- 817 ws = this->SetupWorkspace(RooWorkspace(
"_rateParams" ,
"_rateParams" )).get();
-
- 819 ws = wspaces_.at(
"_rateParams" ).get();
-
- 821 RooAbsReal *form = ws->function(name.c_str());
-
-
- 824 RooFormulaVar formularvar(name.c_str(), name.c_str(),
-
- 826 RooArgList(ws->argSet(pars.c_str())));
- 827 ws->import(formularvar);
- 828 form = ws->function(name.c_str());
- 829 FNLOGC (log(), verbosity_ > 1)
- 830 <<
"Created new RooFormulaVar for rateParam: " << name <<
"\n" ;
- 831 if (verbosity_ > 1) form->Print();
-
-
-
+
+ 805 bool var_in_par =
false ;
+ 806 for (
auto const & ptr : param->vars()) {
+
+
+
+
+
+
+ 813 param->vars().push_back(var);
+
+
+ 816 FNLOGC (log(), verbosity_ > 1) <<
"Updating parameter value from "
+
+
+ 819 if (verbosity_ > 1) log() <<
" to " << param->val() <<
"\n" ;
+
+
+
+ 823 void CombineHarvester::SetupRateParamFunc(std::string
const & name,
+ 824 std::string
const & formula,
+ 825 std::string
const & pars) {
+ 826 RooWorkspace *ws =
nullptr ;
+ 827 if (!wspaces_.count(
"_rateParams" )) {
+ 828 ws = this->SetupWorkspace(RooWorkspace(
"_rateParams" ,
"_rateParams" )).get();
+
+ 830 ws = wspaces_.at(
"_rateParams" ).get();
+
+ 832 RooAbsReal *form = ws->function(name.c_str());
+
+
+ 835 RooFormulaVar formularvar(name.c_str(), name.c_str(),
+
+ 837 RooArgList(ws->argSet(pars.c_str())));
+ 838 ws->import(formularvar);
+ 839 form = ws->function(name.c_str());
+ 840 FNLOGC (log(), verbosity_ > 1)
+ 841 <<
"Created new RooFormulaVar for rateParam: " << name <<
"\n" ;
+ 842 if (verbosity_ > 1) form->Print();
+
+
+
friend void swap(CombineHarvester &first, CombineHarvester &second)
CombineHarvester & data()
static std::ostream & PrintHeader(std::ostream &out)
static std::ostream & PrintHeader(std::ostream &out)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
TH1 const * shape() const
void swap(CombineHarvester &first, CombineHarvester &second)
-CombineHarvester & PrintObs()
-void ZeroNegativeBins(TH1 *h)
+CombineHarvester & PrintObs()
+void ZeroNegativeBins(TH1 *h)
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-CombineHarvester & PrintParams()
+CombineHarvester & PrintParams()
std::unique_ptr< TH1 > GetClonedTH1(TFile *file, std::string const &path)
-bool HasNegativeBins(TH1 const *h)
+bool HasNegativeBins(TH1 const *h)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
+void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
RooAbsData const * data() const
-static std::ostream & PrintHeader(std::ostream &out)
-CombineHarvester & PrintProcs()
-CombineHarvester & PrintAll()
+static std::ostream & PrintHeader(std::ostream &out)
+CombineHarvester & PrintProcs()
+CombineHarvester & PrintAll()
static std::ostream & PrintHeader(std::ostream &out)
-bool GetFlag(std::string const &flag) const
-CombineHarvester & PrintSysts()
+bool GetFlag(std::string const &flag) const
+CombineHarvester & PrintSysts()
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
-CombineHarvester & operator=(CombineHarvester other)
-CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
+CombineHarvester & operator=(CombineHarvester other)
+CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
diff --git a/_combine_harvester_8h_source.html b/_combine_harvester_8h_source.html
index afc3161c537..444bbeb4fb5 100644
--- a/_combine_harvester_8h_source.html
+++ b/_combine_harvester_8h_source.html
@@ -251,316 +251,323 @@
300 void RemoveGroup (std::string
const & name, std::vector<std::string>
const & patterns);
308 void RenameGroup (std::string
const & oldname, std::string
const & newname);
-
-
-
-
- 334 double GetUncertainty (RooFitResult
const * fit,
unsigned n_samples);
- 335 double GetUncertainty (RooFitResult
const & fit,
unsigned n_samples);
-
-
-
-
-
-
-
-
-
-
-
- 381 std::vector<std::string>
era ,
- 382 std::vector<std::string>
channel ,
-
-
-
-
- 387 std::vector<std::string>
era ,
- 388 std::vector<std::string>
channel ,
- 389 std::vector<std::string> procs,
-
-
-
- 393 std::string
const & type,
bool asymm,
double val_u,
- 394 double val_d, std::string
const & formula,
- 395 std::string
const & args);
+
+
+
+
+
+
+
+
+ 346 double GetUncertainty (RooFitResult
const * fit,
unsigned n_samples);
+ 347 double GetUncertainty (RooFitResult
const & fit,
unsigned n_samples);
+
+
+
+
+
+
+
+
+
+
+
+ 393 std::vector<std::string>
era ,
+ 394 std::vector<std::string>
channel ,
+
-
-
- 399 std::string
const & type, Map
const & valmap);
-
- 401 void ExtractShapes (std::string
const & file, std::string
const & rule,
- 402 std::string
const & syst_rule);
-
- 404 std::string
const & rule, std::string norm_rule =
"" );
- 405 void ExtractData (std::string
const & ws_name, std::string
const & rule);
-
- 407 void AddWorkspace (RooWorkspace
const & ws,
bool can_rename =
false );
+
+
+ 399 std::vector<std::string>
era ,
+ 400 std::vector<std::string>
channel ,
+ 401 std::vector<std::string> procs,
+
+
+
+ 405 std::string
const & type,
bool asymm,
double val_u,
+ 406 double val_d, std::string
const & formula,
+ 407 std::string
const & args);
-
-
-
+
+
+ 411 std::string
const & type, Map
const & valmap);
-
-
-
-
-
-
-
-
-
-
- 446 void MergeBinErrors (
double bbb_threshold,
double merge_threshold);
-
-
+ 413 void ExtractShapes (std::string
const & file, std::string
const & rule,
+ 414 std::string
const & syst_rule);
+
+ 416 std::string
const & rule, std::string norm_rule =
"" );
+ 417 void ExtractData (std::string
const & ws_name, std::string
const & rule);
+
+ 419 void AddWorkspace (RooWorkspace
const & ws,
bool can_rename =
false );
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- 455 std::vector<std::shared_ptr<Observation>> obs_;
- 456 std::vector<std::shared_ptr<Process>> procs_;
- 457 std::vector<std::shared_ptr<Systematic>> systs_;
- 458 std::map<std::string, std::shared_ptr<Parameter>> params_;
- 459 std::map<std::string, std::shared_ptr<RooWorkspace>> wspaces_;
-
- 461 std::unordered_map<std::string, bool> flags_;
-
-
-
-
- 466 typedef std::pair<std::string, std::string> StrPair;
- 467 typedef std::vector<StrPair> StrPairVec;
- 468 typedef std::vector<std::string> StrVec;
-
-
-
-
-
-
-
- 476 std::ostream& log()
const {
return *log_; }
-
-
-
-
-
- 482 void LoadShapes(Observation* entry,
- 483 std::vector<HistMapping>
const & mappings);
- 484 void LoadShapes(Process* entry,
- 485 std::vector<HistMapping>
const & mappings);
- 486 void LoadShapes(Systematic* entry,
- 487 std::vector<HistMapping>
const & mappings);
-
- 489 HistMapping
const & ResolveMapping(std::string
const &
process ,
- 490 std::string
const &
bin ,
- 491 std::vector<HistMapping>
const & mappings);
-
- 493 StrPairVec GenerateShapeMapAttempts(std::string
process ,
- 494 std::string category);
-
- 496 std::shared_ptr<RooWorkspace> SetupWorkspace(RooWorkspace
const & ws,
- 497 bool can_rename =
false );
-
- 499 void ImportParameters(RooArgSet *vars);
-
- 501 RooAbsData
const * FindMatchingData(Process
const * proc);
+ 458 void MergeBinErrors (
double bbb_threshold,
double merge_threshold);
+
+
+
+
+
+
+ 467 std::vector<std::shared_ptr<Observation>> obs_;
+ 468 std::vector<std::shared_ptr<Process>> procs_;
+ 469 std::vector<std::shared_ptr<Systematic>> systs_;
+ 470 std::map<std::string, std::shared_ptr<Parameter>> params_;
+ 471 std::map<std::string, std::shared_ptr<RooWorkspace>> wspaces_;
+
+ 473 std::unordered_map<std::string, bool> flags_;
+
+ 475 std::vector<std::string> post_lines_;
+
+
+
+
+ 480 typedef std::pair<std::string, std::string> StrPair;
+ 481 typedef std::vector<StrPair> StrPairVec;
+ 482 typedef std::vector<std::string> StrVec;
+
+
+
+
+
+
+
+ 490 std::ostream& log()
const {
return *log_; }
+
+
+
+
+
+ 496 void LoadShapes(Observation* entry,
+ 497 std::vector<HistMapping>
const & mappings);
+ 498 void LoadShapes(Process* entry,
+ 499 std::vector<HistMapping>
const & mappings);
+ 500 void LoadShapes(Systematic* entry,
+ 501 std::vector<HistMapping>
const & mappings);
- 503 ch::Parameter * SetupRateParamVar(std::string
const & name,
double val);
- 504 void SetupRateParamFunc(std::string
const & name, std::string
const & formula,
- 505 std::string
const & pars);
+ 503 HistMapping
const & ResolveMapping(std::string
const &
process ,
+ 504 std::string
const &
bin ,
+ 505 std::vector<HistMapping>
const & mappings);
-
-
-
- 510 void WriteHistToFile(
-
-
- 513 std::vector<HistMapping>
const & mappings,
- 514 std::string
const &
bin ,
-
- 516 std::string
const &
mass ,
- 517 std::string
const & nuisance,
-
-
- 520 void FillHistMappings(std::vector<HistMapping> & mappings);
-
-
-
-
-
- 526 typedef std::vector<std::vector<Systematic const*>> ProcSystMap;
- 527 ProcSystMap GenerateProcSystMap();
-
- 529 double GetRateInternal(ProcSystMap
const & lookup,
- 530 std::string
const & single_sys =
"" );
-
- 532 TH1F GetShapeInternal(ProcSystMap
const & lookup,
- 533 std::string
const & single_sys =
"" );
-
- 535 inline double smoothStepFunc(
double x)
const {
- 536 if (std::fabs(x) >= 1.0)
return x > 0 ? +1 : -1;
- 537 double xnorm = x/1.0;
- 538 double xnorm2 = xnorm*xnorm;
- 539 return 0.125 * xnorm * (xnorm2 * (3.*xnorm2 - 10.) + 15);
-
-
- 542 double logKappaForX(
double x,
double k_low,
double k_high)
const ;
-
- 544 void ShapeDiff(
double x, TH1F* target, TH1
const * nom, TH1
const * low,
- 545 TH1
const * high,
bool linear);
- 546 void ShapeDiff(
double x, TH1F* target, RooDataHist
const * nom,
- 547 RooDataHist
const * low, RooDataHist
const * high);
-
-
-
-
-
-
- 554 template <
typename T,
typename R>
-
-
- 557 for (
auto const & item : obs_) ret.insert(func(item.get()));
- 558 for (
auto const & item : procs_) ret.insert(func(item.get()));
- 559 for (
auto const & item : systs_) ret.insert(func(item.get()));
-
-
-
- 563 template <
typename T,
typename R>
-
-
- 566 for (
auto const & item : obs_) ret.insert(func(item.get()));
-
-
-
- 570 template <
typename T,
typename R>
-
-
- 573 for (
auto const & item : procs_) ret.insert(func(item.get()));
+ 507 StrPairVec GenerateShapeMapAttempts(std::string
process ,
+ 508 std::string category);
+
+ 510 std::shared_ptr<RooWorkspace> SetupWorkspace(RooWorkspace
const & ws,
+ 511 bool can_rename =
false );
+
+ 513 void ImportParameters(RooArgSet *vars);
+
+ 515 RooAbsData
const * FindMatchingData(Process
const * proc);
+
+ 517 ch::Parameter * SetupRateParamVar(std::string
const & name,
double val);
+ 518 void SetupRateParamFunc(std::string
const & name, std::string
const & formula,
+ 519 std::string
const & pars);
+
+
+
+
+ 524 void WriteHistToFile(
+
+
+ 527 std::vector<HistMapping>
const & mappings,
+ 528 std::string
const &
bin ,
+
+ 530 std::string
const &
mass ,
+ 531 std::string
const & nuisance,
+
+
+ 534 void FillHistMappings(std::vector<HistMapping> & mappings);
+
+
+
+
+
+ 540 typedef std::vector<std::vector<Systematic const*>> ProcSystMap;
+ 541 ProcSystMap GenerateProcSystMap();
+
+ 543 double GetRateInternal(ProcSystMap
const & lookup,
+ 544 std::string
const & single_sys =
"" );
+
+ 546 TH1F GetShapeInternal(ProcSystMap
const & lookup,
+ 547 std::string
const & single_sys =
"" );
+
+ 549 inline double smoothStepFunc(
double x)
const {
+ 550 if (std::fabs(x) >= 1.0)
return x > 0 ? +1 : -1;
+ 551 double xnorm = x/1.0;
+ 552 double xnorm2 = xnorm*xnorm;
+ 553 return 0.125 * xnorm * (xnorm2 * (3.*xnorm2 - 10.) + 15);
+
+
+ 556 double logKappaForX(
double x,
double k_low,
double k_high)
const ;
+
+ 558 void ShapeDiff(
double x, TH1F* target, TH1
const * nom, TH1
const * low,
+ 559 TH1
const * high,
bool linear);
+ 560 void ShapeDiff(
double x, TH1F* target, RooDataHist
const * nom,
+ 561 RooDataHist
const * low, RooDataHist
const * high);
+
+
+
+
+
+
+ 568 template <
typename T,
typename R>
+
+
+ 571 for (
auto const & item : obs_) ret.insert(func(item.get()));
+ 572 for (
auto const & item : procs_) ret.insert(func(item.get()));
+ 573 for (
auto const & item : systs_) ret.insert(func(item.get()));
577 template <
typename T,
typename R>
-
+
- 580 for (
auto const & item : systs_) ret.insert(func(item.get()));
+ 580 for (
auto const & item : obs_) ret.insert(func(item.get()));
- 584 template <
typename Function>
-
-
-
-
-
+ 584 template <
typename T,
typename R>
+
+
+ 587 for (
auto const & item : procs_) ret.insert(func(item.get()));
+
+
- 591 template <
typename Function>
-
- 593 for (
auto & item: procs_) func(item.get());
-
-
- 596 template <
typename Function>
-
- 598 for (
auto & item: obs_) func(item.get());
-
-
- 601 template <
typename Function>
-
- 603 for (
auto & item: systs_) func(item.get());
-
-
- 606 template <
typename Function>
-
-
-
-
-
-
-
- 614 template <
typename Function>
-
- 616 boost::remove_erase_if(
- 617 obs_, [&](std::shared_ptr<Observation> ptr) {
return func(ptr.get());
-
-
-
-
- 622 template <
typename Function>
-
- 624 boost::remove_erase_if(
- 625 procs_, [&](std::shared_ptr<Process> ptr) {
return func(ptr.get());
-
-
-
- 629 template <
typename Function>
-
- 631 boost::remove_erase_if(
- 632 systs_, [&](std::shared_ptr<Systematic> ptr) {
return func(ptr.get());
-
-
-
-
-
-
- 639 std::string
const & name, std::string
const & type,
-
-
-
- 643 std::vector<ch::Process *> not_added_procs;
- 644 std::vector<ch::Process *> added_procs;
-
-
-
- 648 auto tuples = valmap.GetTupleSet();
- 649 if (verbosity_ >= 1) {
- 650 LOGLINE (log(), name +
":" + type);
-
- 652 for (
unsigned i = 0; i < procs_.size(); ++i) {
- 653 if (!valmap.Contains(procs_[i].get())) {
- 654 not_added_procs.push_back(procs_[i].
get ());
-
-
- 657 tuples.erase(valmap.GetTuple(procs_[i].get()));
- 658 added_procs.push_back(procs_[i].
get ());
- 659 double val_u = valmap.ValU(procs_[i].
get ());
- 660 double val_d = valmap.ValD(procs_[i].
get ());
- 661 std::string formula = valmap.Formula(procs_[i].
get ());
- 662 std::string args = valmap.Args(procs_[i].
get ());
-
- 664 val_u, val_d, formula, args);
+ 591 template <
typename T,
typename R>
+
+
+ 594 for (
auto const & item : systs_) ret.insert(func(item.get()));
+
+
+
+ 598 template <
typename Function>
+
+
+
+
+
+
+ 605 template <
typename Function>
+
+ 607 for (
auto & item: procs_) func(item.get());
+
+
+ 610 template <
typename Function>
+
+ 612 for (
auto & item: obs_) func(item.get());
+
+
+ 615 template <
typename Function>
+
+ 617 for (
auto & item: systs_) func(item.get());
+
+
+ 620 template <
typename Function>
+
+
+
+
+
+
+
+ 628 template <
typename Function>
+
+ 630 boost::remove_erase_if(
+ 631 obs_, [&](std::shared_ptr<Observation> ptr) {
return func(ptr.get());
+
+
+
+
+ 636 template <
typename Function>
+
+ 638 boost::remove_erase_if(
+ 639 procs_, [&](std::shared_ptr<Process> ptr) {
return func(ptr.get());
+
+
+
+ 643 template <
typename Function>
+
+ 645 boost::remove_erase_if(
+ 646 systs_, [&](std::shared_ptr<Systematic> ptr) {
return func(ptr.get());
+
+
+
+
+
+
+ 653 std::string
const & name, std::string
const & type,
+
+
+
+ 657 std::vector<ch::Process *> not_added_procs;
+ 658 std::vector<ch::Process *> added_procs;
+
+
+
+ 662 auto tuples = valmap.GetTupleSet();
+ 663 if (verbosity_ >= 1) {
+ 664 LOGLINE (log(), name +
":" + type);
- 666 if (tuples.size() && verbosity_ >= 1) {
- 667 log() <<
">> Map keys that were not used to create a Systematic:\n" ;
- 668 for (
auto s : tuples) {
-
+ 666 for (
unsigned i = 0; i < procs_.size(); ++i) {
+ 667 if (!valmap.Contains(procs_[i].get())) {
+ 668 not_added_procs.push_back(procs_[i].
get ());
+
-
- 672 if (verbosity_ >= 2) {
-
- 674 log() <<
">> Process entries that did not get a Systematic:\n" ;
- 675 for (
auto p : not_added_procs) {
-
-
- 678 log() <<
">> Process entries that did get a Systematic:\n" ;
- 679 for (
auto p : added_procs) {
-
-
-
-
-
-
-
+ 671 tuples.erase(valmap.GetTuple(procs_[i].get()));
+ 672 added_procs.push_back(procs_[i].
get ());
+ 673 double val_u = valmap.ValU(procs_[i].
get ());
+ 674 double val_d = valmap.ValD(procs_[i].
get ());
+ 675 std::string formula = valmap.Formula(procs_[i].
get ());
+ 676 std::string args = valmap.Args(procs_[i].
get ());
+
+ 678 val_u, val_d, formula, args);
+
+ 680 if (tuples.size() && verbosity_ >= 1) {
+ 681 log() <<
">> Map keys that were not used to create a Systematic:\n" ;
+ 682 for (
auto s : tuples) {
+
+
+
+ 686 if (verbosity_ >= 2) {
+
+ 688 log() <<
">> Process entries that did not get a Systematic:\n" ;
+ 689 for (
auto p : not_added_procs) {
+
+
+ 692 log() <<
">> Process entries that did get a Systematic:\n" ;
+ 693 for (
auto p : added_procs) {
+
+
+
+
+
+
+
friend void swap(CombineHarvester &first, CombineHarvester &second)
-std::set< R > SetFromAll(T func)
Fill an std::set with the return values from an arbitrary function.
+void ClearDatacardLinesAtEnd()
Clear all added datacard lines.
+std::set< R > SetFromAll(T func)
Fill an std::set with the return values from an arbitrary function.
CombineHarvester & data()
void CreateParameterIfEmpty(std::string const &name)
void ExtractData(std::string const &ws_name, std::string const &rule)
-void WriteDatacard(std::string const &name, std::string const &root_file)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+void WriteDatacard(std::string const &name, std::string const &root_file)
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
-void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
+void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
void ExtractPdfs(CombineHarvester &target, std::string const &ws_name, std::string const &rule, std::string norm_rule="")
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
std::set< std::string > analysis_set()
@@ -575,85 +582,86 @@
std::set< std::string > syst_name_set()
CombineHarvester & era(std::vector< std::string > const &vec, bool cond=true)
-
-CombineHarvester & PrintObs()
+
+CombineHarvester & PrintObs()
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
void InsertProcess(ch::Process const &proc)
void SetVerbosity(unsigned verbosity)
std::set< std::string > channel_set()
-CombineHarvester & PrintParams()
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+CombineHarvester & PrintParams()
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
std::set< int > bin_id_set()
-void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
-CombineHarvester & FilterProcs(Function func)
+void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
+CombineHarvester & FilterProcs(Function func)
void AddProcesses(std::vector< std::string > mass, std::vector< std::string > analysis, std::vector< std::string > era, std::vector< std::string > channel, std::vector< std::string > procs, ch::Categories bin, bool signal)
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
void AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)
Create bin-by-bin uncertainties.
-std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
+std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
std::set< std::string > mass_set()
-ch::Parameter const * GetParameter(std::string const &name) const
+ch::Parameter const * GetParameter(std::string const &name) const
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
-
-void ForEachProc(Function func)
+
+void ForEachProc(Function func)
void InsertObservation(ch::Observation const &obs)
void MergeBinErrors(double bbb_threshold, double merge_threshold)
Merge bin errors within a bin.
TH1F GetShapeWithUncertainty()
-CombineHarvester & FilterAll(Function func)
+CombineHarvester & FilterAll(Function func)
void RenameSystematic(CombineHarvester &target, std::string const &old_name, std::string const &new_name)
Rename a systematic from 'old_name' to 'new_name' and add a parameter 'new_name' to CH instance 'targ...
-void RenameParameter(std::string const &oldname, std::string const &newname)
-void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
+void RenameParameter(std::string const &oldname, std::string const &newname)
+void SetFlag(std::string const &flag, bool const &value)
Set a named flag value.
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-CombineHarvester & FilterObs(Function func)
-static std::ostream & PrintHeader(std::ostream &out)
+CombineHarvester & FilterObs(Function func)
+static std::ostream & PrintHeader(std::ostream &out)
CombineHarvester & attr(std::vector< std::string > const &vec, std::string attr_label, bool cond=true)
-void VariableRebin(std::vector< double > bins)
+void VariableRebin(std::vector< double > bins)
CombineHarvester & histograms()
-CombineHarvester & PrintProcs()
-CombineHarvester & PrintAll()
+CombineHarvester & PrintProcs()
+CombineHarvester & PrintAll()
std::set< std::string > era_set()
-std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
+std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
std::set< std::string > syst_type_set()
-void SetPdfBins(unsigned nbins)
+void SetPdfBins(unsigned nbins)
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
-void ForEachObj(Function func)
+void ForEachObj(Function func)
-bool GetFlag(std::string const &flag) const
-void ForEachSyst(Function func)
-void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
-void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
+bool GetFlag(std::string const &flag) const
+void ForEachSyst(Function func)
+void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
-std::vector< ch::Parameter > GetParameters() const
-CombineHarvester & PrintSysts()
-CombineHarvester & FilterSysts(Function func)
-void ForEachObs(Function func)
+std::vector< ch::Parameter > GetParameters() const
+CombineHarvester & PrintSysts()
+CombineHarvester & FilterSysts(Function func)
+void ForEachObs(Function func)
CombineHarvester & pdfs()
-
+
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & signals()
std::vector< std::pair< int, std::string > > Categories
-std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
void AddObservations(std::vector< std::string > mass, std::vector< std::string > analysis, std::vector< std::string > era, std::vector< std::string > channel, ch::Categories bin)
-CombineHarvester & operator=(CombineHarvester other)
-CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
+CombineHarvester & operator=(CombineHarvester other)
+CombineHarvester deep()
Creates and retunrs a deep copy of the CombineHarvester instance.
diff --git a/_combine_harvester___creation_8cc_source.html b/_combine_harvester___creation_8cc_source.html
index 8fb6d25348d..e1d68d0d2fd 100644
--- a/_combine_harvester___creation_8cc_source.html
+++ b/_combine_harvester___creation_8cc_source.html
@@ -357,7 +357,7 @@
virtual std::string const & analysis() const
-std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
+std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
CombineHarvester & data()
void CreateParameterIfEmpty(std::string const &name)
void ExtractData(std::string const &ws_name, std::string const &rule)
@@ -384,7 +384,7 @@
void InsertObservation(ch::Observation const &obs)
void MergeBinErrors(double bbb_threshold, double merge_threshold)
Merge bin errors within a bin.
void RenameSystematic(CombineHarvester &target, std::string const &old_name, std::string const &new_name)
Rename a systematic from 'old_name' to 'new_name' and add a parameter 'new_name' to CH instance 'targ...
-virtual std::string const attribute(std::string const &attr_label) const
+virtual std::string const attribute(std::string const &attr_label) const
@@ -395,10 +395,10 @@
void MergeBinErrors(CombineHarvester &cb)
Merges histogram bin errors between processes.
-
+
std::vector< std::pair< int, std::string > > Categories
-virtual std::map< std::string, std::string > const & all_attributes() const
+virtual std::map< std::string, std::string > const & all_attributes() const
void AddBinByBin(CombineHarvester &src, CombineHarvester &dest)
Create bin-by-bin shape uncertainties for every process in src, and add these to dest ...
void ExtractShapes(std::string const &file, std::string const &rule, std::string const &syst_rule)
diff --git a/_combine_harvester___datacards_8cc_source.html b/_combine_harvester___datacards_8cc_source.html
index 7d52ca9edbf..7570a814874 100644
--- a/_combine_harvester___datacards_8cc_source.html
+++ b/_combine_harvester___datacards_8cc_source.html
@@ -159,1093 +159,1104 @@
59 std::string
const & mass) {
-
-
-
-
-
-
- 66 std::vector<std::vector<std::string>> words;
- 67 for (
unsigned i = 0; i < lines.size(); ++i) {
- 68 boost::trim(lines[i]);
- 69 if (lines[i].size() == 0)
continue ;
- 70 if (lines[i].at(0) ==
'#' || lines[i].at(0) ==
'-' )
continue ;
- 71 words.push_back(std::vector<std::string>());
- 72 boost::split(words.back(), lines[i], boost::is_any_of(
"\t " ),
- 73 boost::token_compress_on);
-
-
- 76 std::vector<HistMapping> hist_mapping;
-
- 78 std::map<std::string, std::shared_ptr<TFile>> file_store;
- 79 std::map<std::string, std::shared_ptr<RooWorkspace>> ws_store;
-
- 81 bool start_nuisance_scan =
false ;
-
-
-
-
-
- 87 std::shared_ptr<ch::Observation> single_obs =
nullptr ;
- 88 std::set<std::string> bin_names;
-
-
- 91 std::map<std::string, std::set<std::string>> groups;
-
-
-
- 95 for (
unsigned i = 0; i < words.size(); ++i) {
-
- 97 if (words[i].size() <= 1)
continue ;
-
-
-
- 101 if (boost::iequals(words[i][0],
"shapes" ) && words[i].size() >= 5) {
-
-
-
-
-
-
-
- 109 std::size_t slash = filename.find_last_of(
'/' );
- 110 if (slash != filename.npos) {
- 111 dc_path = filename.substr(0, slash) +
"/" + words[i][3];
-
- 113 dc_path = words[i][3];
-
- 115 if (!file_store.count(dc_path))
- 116 file_store[dc_path] = std::make_shared<TFile>(dc_path.c_str());
- 117 mapping.
file = file_store.at(dc_path);
-
- 119 if (words[i].size() > 5) mapping.
syst_pattern = words[i][5];
-
- 121 if (mapping.
IsPdf ()) {
- 122 std::string store_key =
-
- 124 if (!ws_store.count(store_key)) {
-
- 126 std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
-
-
- 129 throw std::runtime_error(
FNERROR (
"Workspace not found in file" ));
-
- 131 ws_store[store_key] = ptr;
-
- 133 mapping.
ws = SetupWorkspace(*(ws_store[store_key]),
true );
-
-
- 136 std::string store_key =
-
- 138 if (!ws_store.count(store_key)) {
-
- 140 std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
-
-
- 143 throw std::runtime_error(
FNERROR (
"Workspace not found in file" ));
-
- 145 ws_store[store_key] = ptr;
-
- 147 mapping.
sys_ws = SetupWorkspace(*(ws_store[store_key]),
true );
-
-
-
-
-
- 153 if (boost::iequals(words[i][0],
"shapes" ) && words[i].size() == 4 &&
- 154 boost::iequals(words[i][3],
"FAKE" )) {
-
-
-
-
-
-
-
-
-
- 164 for (
unsigned i = 0; i < words.size(); ++i) {
-
- 166 if (words[i].size() <= 1)
continue ;
-
-
-
-
-
-
- 173 if ( boost::iequals(words[i][0],
"observation" ) &&
- 174 boost::iequals(words[i-1][0],
"bin" ) &&
- 175 words[i].size() == words[i-1].size()) {
- 176 for (
unsigned p = 1; p < words[i].size(); ++p) {
- 177 auto obs = std::make_shared<Observation>();
- 178 obs->set_bin(words[i-1][p]);
- 179 obs->set_rate(boost::lexical_cast<double>(words[i][p]));
- 180 obs->set_analysis(analysis);
-
- 182 obs->set_channel(channel);
- 183 obs->set_bin_id(bin_id);
-
-
- 186 LoadShapes(obs.get(), hist_mapping);
-
-
-
-
-
-
- 193 if (boost::iequals(words[i][0],
"observation" ) &&
- 194 !boost::iequals(words[i-1][0],
"bin" ) &&
- 195 words[i].size() == 2 &&
- 196 single_obs.get() ==
nullptr ) {
- 197 for (
unsigned p = 1; p < words[i].size(); ++p) {
- 198 single_obs = std::make_shared<Observation>();
- 199 single_obs->set_bin(
"" );
- 200 single_obs->set_rate(boost::lexical_cast<double>(words[i][p]));
- 201 single_obs->set_analysis(analysis);
- 202 single_obs->set_era(era);
- 203 single_obs->set_channel(channel);
- 204 single_obs->set_bin_id(bin_id);
- 205 single_obs->set_mass(mass);
-
-
-
-
-
-
-
-
-
-
- 216 if ( boost::iequals(words[i][0],
"rate" ) &&
- 217 boost::iequals(words[i-1][0],
"process" ) &&
- 218 boost::iequals(words[i-2][0],
"process" ) &&
- 219 boost::iequals(words[i-3][0],
"bin" ) &&
- 220 words[i].size() == words[i-1].size() &&
- 221 words[i].size() == words[i-2].size() &&
- 222 words[i].size() == words[i-3].size()) {
- 223 for (
unsigned p = 1; p < words[i].size(); ++p) {
- 224 auto proc = std::make_shared<Process>();
- 225 proc->set_bin(words[i-3][p]);
- 226 bin_names.insert(words[i-3][p]);
-
- 228 int process_id = boost::lexical_cast<
int >(words[i-2][p]);
- 229 proc->set_signal(process_id <= 0);
- 230 proc->set_process(words[i-1][p]);
- 231 }
catch (boost::bad_lexical_cast &) {
- 232 int process_id = boost::lexical_cast<
int >(words[i-1][p]);
- 233 proc->set_signal(process_id <= 0);
- 234 proc->set_process(words[i-2][p]);
-
- 236 proc->set_rate(boost::lexical_cast<double>(words[i][p]));
- 237 proc->set_analysis(analysis);
-
- 239 proc->set_channel(channel);
- 240 proc->set_bin_id(bin_id);
- 241 proc->set_mass(mass);
-
- 243 LoadShapes(proc.get(), hist_mapping);
-
- 245 procs_.push_back(proc);
-
-
- 248 start_nuisance_scan =
true ;
-
-
-
- 252 if (start_nuisance_scan && words[i].size() >= 4) {
- 253 if (boost::iequals(words[i][1],
"param" )) {
- 254 std::string param_name = words[i][0];
- 255 if (!params_.count(param_name))
- 256 params_[param_name] = std::make_shared<Parameter>(
Parameter ());
- 257 Parameter * param = params_.at(param_name).get();
-
- 259 param->
set_val (boost::lexical_cast<double>(words[i][2]));
- 260 std::size_t slash_pos = words[i][3].find(
"/" );
- 261 if (slash_pos != words[i][3].npos) {
-
- 263 boost::lexical_cast<double>(words[i][3].substr(0, slash_pos)));
-
- 265 boost::lexical_cast<double>(words[i][3].substr(slash_pos+1)));
-
- 267 param->
set_err_u (+1.0 * boost::lexical_cast<double>(words[i][3]));
- 268 param->
set_err_d (-1.0 * boost::lexical_cast<double>(words[i][3]));
-
- 270 if (words[i].size() >= 5) {
-
- 272 std::vector<std::string> tokens;
- 273 boost::split(tokens, words[i][4], boost::is_any_of(
"[]," ));
- 274 if (tokens.size() == 4) {
- 275 param->
set_range_d (boost::lexical_cast<double>(tokens[1]));
- 276 param->
set_range_u (boost::lexical_cast<double>(tokens[2]));
-
-
-
-
-
-
- 283 if (start_nuisance_scan && words[i].size() >= 5 &&
- 284 boost::iequals(words[i][1],
"rateParam" )) {
- 285 if (verbosity_ > 1) {
- 286 FNLOG (log()) <<
"Processing rateParam line:\n" ;
- 287 for (
auto const & str : words[i]) {
- 288 log() << str <<
"\t" ;
-
-
-
-
- 293 bool has_range = words[i].size() == 6 && words[i][5][0] ==
'[' ;
- 294 std::string param_name = words[i][0];
-
-
-
- 298 if (words[i].size() == 5 || has_range) {
-
- 300 param_name, boost::lexical_cast<double>(words[i][4]));
-
-
-
- 304 std::vector<std::string> tokens;
- 305 boost::split(tokens, words[i][5], boost::is_any_of(
"[]," ));
- 306 if (tokens.size() == 4) {
- 307 param->
set_range_d (boost::lexical_cast<double>(tokens[1]));
- 308 param->
set_range_u (boost::lexical_cast<double>(tokens[2]));
- 309 FNLOGC (log(), verbosity_ > 1) <<
"Setting parameter range to " << words[i][5];
-
-
- 312 }
else if (words[i].size() == 6 && !has_range) {
- 313 SetupRateParamFunc(param_name, words[i][4], words[i][5]);
-
- 315 for (
unsigned p = 1; p < words[r].size(); ++p) {
- 316 bool matches_bin =
false ;
- 317 bool matches_proc =
false ;
-
-
- 320 std::string
bin = words[r-3][p];
-
-
- 323 process_id = boost::lexical_cast<
int >(words[r-2][p]);
- 324 process = words[r-1][p];
- 325 }
catch (boost::bad_lexical_cast &) {
- 326 process_id = boost::lexical_cast<
int >(words[r-1][p]);
- 327 process = words[r-2][p];
-
- 329 if (words[i][2] ==
"*" || words[i][2] == bin) {
-
-
- 332 if (words[i][3] ==
"*" || words[i][3] == process) {
-
-
- 335 if (!matches_bin || !matches_proc)
continue ;
- 336 auto sys = std::make_shared<Systematic>();
-
- 338 sys->set_signal(process_id <= 0);
- 339 sys->set_process(process);
- 340 sys->set_name(param_name);
- 341 sys->set_type(
"rateParam" );
- 342 sys->set_analysis(analysis);
-
- 344 sys->set_channel(channel);
- 345 sys->set_bin_id(bin_id);
-
- 347 systs_.push_back(sys);
-
-
-
-
- 352 if (start_nuisance_scan && words[i].size() >= 4 &&
- 353 boost::iequals(words[i][1],
"group" )) {
- 354 if (!groups.count(words[i][0])) {
- 355 groups[words[i][0]] = std::set<std::string>();
-
- 357 for (
unsigned ig = 3; ig < words[i].size(); ++ig) {
- 358 groups[words[i][0]].insert(words[i][ig]);
-
-
-
-
- 363 if (start_nuisance_scan && words[i].size()-1 == words[r].size()) {
- 364 for (
unsigned p = 2; p < words[i].size(); ++p) {
- 365 if (words[i][p] ==
"-" )
continue ;
- 366 auto sys = std::make_shared<Systematic>();
- 367 sys->set_bin(words[r-3][p-1]);
-
- 369 int process_id = boost::lexical_cast<
int >(words[r-2][p-1]);
- 370 sys->set_signal(process_id <= 0);
- 371 sys->set_process(words[r-1][p-1]);
- 372 }
catch (boost::bad_lexical_cast &) {
- 373 int process_id = boost::lexical_cast<
int >(words[r-1][p-1]);
- 374 sys->set_signal(process_id <= 0);
- 375 sys->set_process(words[r-2][p-1]);
-
- 377 sys->set_name(words[i][0]);
- 378 std::string type = words[i][1];
- 379 if (!
contains (std::vector<std::string>{
"shape" ,
"shape?" ,
"shapeN2" ,
"shapeU" ,
"lnN" ,
"lnU" },
-
- 381 throw std::runtime_error(
- 382 FNERROR (
"Systematic type " + type +
" not supported" ));
-
- 384 sys->set_type(words[i][1]);
- 385 sys->set_analysis(analysis);
-
- 387 sys->set_channel(channel);
- 388 sys->set_bin_id(bin_id);
-
-
- 391 std::size_t slash_pos = words[i][p].find(
"/" );
- 392 if (slash_pos != words[i][p].npos) {
-
-
- 395 boost::lexical_cast<double>(words[i][p].substr(0, slash_pos)));
-
- 397 boost::lexical_cast<double>(words[i][p].substr(slash_pos+1)));
- 398 sys->set_asymm(
true );
-
- 400 sys->set_value_u(boost::lexical_cast<double>(words[i][p]));
- 401 sys->set_asymm(
false );
-
- 403 if (sys->type() ==
"shape" || sys->type() ==
"shapeN2" ||
- 404 sys->type() ==
"shapeU" ) {
- 405 sys->set_scale(boost::lexical_cast<double>(words[i][p]));
- 406 LoadShapes(sys.get(), hist_mapping);
- 407 }
else if (sys->type() ==
"shape?" ) {
-
-
- 410 LoadShapes(sys.get(), hist_mapping);
- 411 }
catch (std::exception & e) {
- 412 LOGLINE (log(),
"Systematic with shape? did not resolve to a shape" );
- 413 if (verbosity_ > 0) log() << e.what();
-
- 415 if (!sys->shape_u() || !sys->shape_d()) {
- 416 sys->set_type(
"lnN" );
-
- 418 sys->set_type(
"shape" );
- 419 sys->set_scale(boost::lexical_cast<double>(words[i][p]));
-
-
- 422 if (sys->type() ==
"shape" || sys->type() ==
"shapeN2" ||
- 423 sys->type() ==
"shapeU" )
- 424 sys->set_asymm(
true );
-
-
- 427 if (sys->type() ==
"lnU" || sys->type() ==
"shapeU" ) {
- 428 params_.at(sys->name())->set_err_d(0.);
- 429 params_.at(sys->name())->set_err_u(0.);
-
- 431 systs_.push_back(sys);
-
-
-
-
- 436 if (bin_names.size() == 1) {
- 437 single_obs->set_bin(*(bin_names.begin()));
- 438 LoadShapes(single_obs.get(), hist_mapping);
- 439 obs_.push_back(single_obs);
-
- 441 throw std::runtime_error(
FNERROR (
- 442 "Input card specifies a single observation entry without a bin, but "
- 443 "multiple bins defined elsewhere" ));
-
-
-
-
- 448 for (
auto const & grp : groups) {
-
-
-
-
-
-
- 455 std::string
const & root_file) {
- 456 TFile file(root_file.c_str(),
"RECREATE" );
-
-
-
-
-
-
-
-
-
-
- 467 void CombineHarvester::FillHistMappings(std::vector<HistMapping> & mappings) {
-
-
-
- 471 std::map<RooAbsData const*, RooWorkspace*> data_ws_map;
- 472 std::map<RooAbsPdf const*, RooWorkspace*> pdf_ws_map;
- 473 for (
auto const & iter : wspaces_) {
- 474 auto dat = iter.second->allData();
-
- 476 data_ws_map[d] = iter.second.get();
-
- 478 RooArgSet vars = iter.second->allPdfs();
- 479 auto v = vars.createIterator();
-
- 481 RooAbsPdf *y =
dynamic_cast< RooAbsPdf*
> (**v);
- 482 if (y) pdf_ws_map[iter.second->pdf(y->GetName())] = iter.second.get();
-
-
-
-
-
-
- 489 std::set<std::string> hist_bins;
-
- 491 for (
auto bin : bins) {
- 492 unsigned shape_count = std::count_if(procs_.begin(), procs_.end(),
- 493 [&](std::shared_ptr<ch::Process> p) {
- 494 return (p->bin() ==
bin && p->shape() && (!p->signal()));
-
- 496 shape_count += std::count_if(obs_.begin(), obs_.end(),
- 497 [&](std::shared_ptr<ch::Observation> p) {
- 498 return (p->bin() ==
bin && p->shape());
-
- 500 unsigned counting = std::count_if(
- 501 procs_.begin(), procs_.end(), [&](std::shared_ptr<ch::Process> p) {
- 502 return (p->bin() ==
bin && p->shape() ==
nullptr &&
- 503 p->pdf() ==
nullptr && p->
data () ==
nullptr );
-
- 505 counting += std::count_if(
- 506 obs_.begin(), obs_.end(), [&](std::shared_ptr<ch::Observation> p) {
- 507 return (p->bin() ==
bin && p->shape() ==
nullptr &&
- 508 p->
data () ==
nullptr );
-
-
- 511 if (shape_count > 0) {
- 512 mappings.emplace_back(
"*" ,
bin ,
bin +
"/$PROCESS" ,
- 513 bin +
"/$PROCESS_$SYSTEMATIC" );
- 514 hist_bins.insert(
bin );
- 515 }
else if (counting > 0) {
- 516 mappings.emplace_back(
"*" ,
bin ,
"" ,
"" );
- 517 mappings.back().is_fake =
true ;
-
-
-
-
-
-
- 524 for (
auto sig_proc : sig_proc_set) {
-
-
- 527 auto masses =
Set2Vec (ch_signals.cp()
-
-
- 530 if (masses.size() != 1) {
- 531 throw std::runtime_error(
FNERROR (
"Process " + sig_proc +
" in bin " +
-
- 533 " has multiple entries with multiple "
- 534 "mass values, this is not supported" ));
-
-
-
- 538 mappings.emplace_back(sig_proc,
bin ,
bin +
"/" + sig_proc +
"$MASS" ,
- 539 bin +
"/" + sig_proc +
"$MASS_$SYSTEMATIC" );
-
-
-
-
-
- 545 for (
auto bin : bins) {
-
- 547 for (
auto obs : ch_bin.obs_) {
- 548 if (!obs->data())
continue ;
- 549 std::string obj_name = std::string(data_ws_map[obs->data()]->GetName()) +
- 550 ":" + std::string(obs->data()->GetName());
- 551 mappings.emplace_back(
"data_obs" , obs->bin(), obj_name,
"" );
-
-
- 554 bool prototype_ok =
false ;
- 555 HistMapping prototype;
- 556 std::vector<HistMapping> full_list;
- 557 auto pmap = ch_bin.GenerateProcSystMap();
- 558 for (
unsigned i = 0; i < ch_bin.procs_.size(); ++i) {
-
- 560 if (!proc->
data () && !proc->
pdf ())
continue ;
- 561 std::string obj_name;
- 562 std::string obj_sys_name;
-
- 564 obj_name = std::string(data_ws_map[proc->
data ()]->GetName()) +
":" +
- 565 std::string(proc->
data ()->GetName());
-
-
- 568 obj_name = std::string(pdf_ws_map[proc->
pdf ()]->GetName()) +
- 569 ":" + std::string(proc->
pdf ()->GetName());
-
- 571 for (
unsigned j = 0; j < pmap[i].size(); ++j) {
-
-
- 574 obj_sys_name = std::string(data_ws_map[sys->
data_u ()]->GetName()) +
- 575 ":" + std::string(sys->
data_u ()->GetName());
- 576 boost::replace_all(obj_sys_name, sys->
name () +
"Up" ,
"$SYSTEMATIC" );
- 577 boost::replace_all(obj_sys_name, sys->
process (),
"$PROCESS" );
-
-
-
- 581 boost::replace_all(obj_name, proc->
process (),
"$PROCESS" );
-
-
-
- 585 if (prototype.pattern.size() && prototype.pattern != obj_name) {
- 586 prototype_ok =
false ;
+ 60 TH1::AddDirectory(kFALSE);
+
+
+
+
+
+
+ 67 std::vector<std::vector<std::string>> words;
+ 68 for (
unsigned i = 0; i < lines.size(); ++i) {
+ 69 boost::trim(lines[i]);
+ 70 if (lines[i].size() == 0)
continue ;
+ 71 if (lines[i].at(0) ==
'#' || lines[i].at(0) ==
'-' )
continue ;
+ 72 words.push_back(std::vector<std::string>());
+ 73 boost::split(words.back(), lines[i], boost::is_any_of(
"\t " ),
+ 74 boost::token_compress_on);
+
+
+ 77 std::vector<HistMapping> hist_mapping;
+
+ 79 std::map<std::string, std::shared_ptr<TFile>> file_store;
+ 80 std::map<std::string, std::shared_ptr<RooWorkspace>> ws_store;
+
+ 82 bool start_nuisance_scan =
false ;
+
+
+
+
+
+ 88 std::shared_ptr<ch::Observation> single_obs =
nullptr ;
+ 89 std::set<std::string> bin_names;
+
+
+ 92 std::map<std::string, std::set<std::string>> groups;
+
+
+
+ 96 for (
unsigned i = 0; i < words.size(); ++i) {
+
+ 98 if (words[i].size() <= 1)
continue ;
+
+
+
+ 102 if (boost::iequals(words[i][0],
"shapes" ) && words[i].size() >= 5) {
+
+
+
+
+
+
+
+ 110 std::size_t slash = filename.find_last_of(
'/' );
+ 111 if (slash != filename.npos) {
+ 112 dc_path = filename.substr(0, slash) +
"/" + words[i][3];
+
+ 114 dc_path = words[i][3];
+
+ 116 if (!file_store.count(dc_path))
+ 117 file_store[dc_path] = std::make_shared<TFile>(dc_path.c_str());
+ 118 mapping.
file = file_store.at(dc_path);
+
+ 120 if (words[i].size() > 5) mapping.
syst_pattern = words[i][5];
+
+ 122 if (mapping.
IsPdf ()) {
+ 123 std::string store_key =
+
+ 125 if (!ws_store.count(store_key)) {
+
+ 127 std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
+
+
+ 130 throw std::runtime_error(
FNERROR (
"Workspace not found in file" ));
+
+ 132 ws_store[store_key] = ptr;
+
+ 134 mapping.
ws = SetupWorkspace(*(ws_store[store_key]),
true );
+
+
+ 137 std::string store_key =
+
+ 139 if (!ws_store.count(store_key)) {
+
+ 141 std::shared_ptr<RooWorkspace> ptr(dynamic_cast<RooWorkspace*>(
+
+
+ 144 throw std::runtime_error(
FNERROR (
"Workspace not found in file" ));
+
+ 146 ws_store[store_key] = ptr;
+
+ 148 mapping.
sys_ws = SetupWorkspace(*(ws_store[store_key]),
true );
+
+
+
+
+
+ 154 if (boost::iequals(words[i][0],
"shapes" ) && words[i].size() == 4 &&
+ 155 boost::iequals(words[i][3],
"FAKE" )) {
+
+
+
+
+
+
+
+
+
+ 165 for (
unsigned i = 0; i < words.size(); ++i) {
+
+ 167 if (words[i].size() <= 1)
continue ;
+
+
+
+
+
+
+ 174 if ( boost::iequals(words[i][0],
"observation" ) &&
+ 175 boost::iequals(words[i-1][0],
"bin" ) &&
+ 176 words[i].size() == words[i-1].size()) {
+ 177 for (
unsigned p = 1; p < words[i].size(); ++p) {
+ 178 auto obs = std::make_shared<Observation>();
+ 179 obs->set_bin(words[i-1][p]);
+ 180 obs->set_rate(boost::lexical_cast<double>(words[i][p]));
+ 181 obs->set_analysis(analysis);
+
+ 183 obs->set_channel(channel);
+ 184 obs->set_bin_id(bin_id);
+
+
+ 187 LoadShapes(obs.get(), hist_mapping);
+
+
+
+
+
+
+ 194 if (boost::iequals(words[i][0],
"observation" ) &&
+ 195 !boost::iequals(words[i-1][0],
"bin" ) &&
+ 196 words[i].size() == 2 &&
+ 197 single_obs.get() ==
nullptr ) {
+ 198 for (
unsigned p = 1; p < words[i].size(); ++p) {
+ 199 single_obs = std::make_shared<Observation>();
+ 200 single_obs->set_bin(
"" );
+ 201 single_obs->set_rate(boost::lexical_cast<double>(words[i][p]));
+ 202 single_obs->set_analysis(analysis);
+ 203 single_obs->set_era(era);
+ 204 single_obs->set_channel(channel);
+ 205 single_obs->set_bin_id(bin_id);
+ 206 single_obs->set_mass(mass);
+
+
+
+
+
+
+
+
+
+
+ 217 if ( boost::iequals(words[i][0],
"rate" ) &&
+ 218 boost::iequals(words[i-1][0],
"process" ) &&
+ 219 boost::iequals(words[i-2][0],
"process" ) &&
+ 220 boost::iequals(words[i-3][0],
"bin" ) &&
+ 221 words[i].size() == words[i-1].size() &&
+ 222 words[i].size() == words[i-2].size() &&
+ 223 words[i].size() == words[i-3].size()) {
+ 224 for (
unsigned p = 1; p < words[i].size(); ++p) {
+ 225 auto proc = std::make_shared<Process>();
+ 226 proc->set_bin(words[i-3][p]);
+ 227 bin_names.insert(words[i-3][p]);
+
+ 229 int process_id = boost::lexical_cast<
int >(words[i-2][p]);
+ 230 proc->set_signal(process_id <= 0);
+ 231 proc->set_process(words[i-1][p]);
+ 232 }
catch (boost::bad_lexical_cast &) {
+ 233 int process_id = boost::lexical_cast<
int >(words[i-1][p]);
+ 234 proc->set_signal(process_id <= 0);
+ 235 proc->set_process(words[i-2][p]);
+
+ 237 proc->set_rate(boost::lexical_cast<double>(words[i][p]));
+ 238 proc->set_analysis(analysis);
+
+ 240 proc->set_channel(channel);
+ 241 proc->set_bin_id(bin_id);
+ 242 proc->set_mass(mass);
+
+ 244 LoadShapes(proc.get(), hist_mapping);
+
+ 246 procs_.push_back(proc);
+
+
+ 249 start_nuisance_scan =
true ;
+
+
+
+ 253 if (start_nuisance_scan && words[i].size() >= 4) {
+ 254 if (boost::iequals(words[i][1],
"param" )) {
+ 255 std::string param_name = words[i][0];
+ 256 if (!params_.count(param_name))
+ 257 params_[param_name] = std::make_shared<Parameter>(
Parameter ());
+ 258 Parameter * param = params_.at(param_name).get();
+
+ 260 param->
set_val (boost::lexical_cast<double>(words[i][2]));
+ 261 std::size_t slash_pos = words[i][3].find(
"/" );
+ 262 if (slash_pos != words[i][3].npos) {
+
+ 264 boost::lexical_cast<double>(words[i][3].substr(0, slash_pos)));
+
+ 266 boost::lexical_cast<double>(words[i][3].substr(slash_pos+1)));
+
+ 268 param->
set_err_u (+1.0 * boost::lexical_cast<double>(words[i][3]));
+ 269 param->
set_err_d (-1.0 * boost::lexical_cast<double>(words[i][3]));
+
+ 271 if (words[i].size() >= 5) {
+
+ 273 std::vector<std::string> tokens;
+ 274 boost::split(tokens, words[i][4], boost::is_any_of(
"[]," ));
+ 275 if (tokens.size() == 4) {
+ 276 param->
set_range_d (boost::lexical_cast<double>(tokens[1]));
+ 277 param->
set_range_u (boost::lexical_cast<double>(tokens[2]));
+
+
+
+
+
+
+ 284 if (start_nuisance_scan && words[i].size() >= 5 &&
+ 285 boost::iequals(words[i][1],
"rateParam" )) {
+ 286 if (verbosity_ > 1) {
+ 287 FNLOG (log()) <<
"Processing rateParam line:\n" ;
+ 288 for (
auto const & str : words[i]) {
+ 289 log() << str <<
"\t" ;
+
+
+
+
+ 294 bool has_range = words[i].size() == 6 && words[i][5][0] ==
'[' ;
+ 295 std::string param_name = words[i][0];
+
+
+
+ 299 if (words[i].size() == 5 || has_range) {
+
+ 301 param_name, boost::lexical_cast<double>(words[i][4]));
+
+
+
+ 305 std::vector<std::string> tokens;
+ 306 boost::split(tokens, words[i][5], boost::is_any_of(
"[]," ));
+ 307 if (tokens.size() == 4) {
+ 308 param->
set_range_d (boost::lexical_cast<double>(tokens[1]));
+ 309 param->
set_range_u (boost::lexical_cast<double>(tokens[2]));
+ 310 FNLOGC (log(), verbosity_ > 1) <<
"Setting parameter range to " << words[i][5];
+
+
+ 313 }
else if (words[i].size() == 6 && !has_range) {
+ 314 SetupRateParamFunc(param_name, words[i][4], words[i][5]);
+
+ 316 for (
unsigned p = 1; p < words[r].size(); ++p) {
+ 317 bool matches_bin =
false ;
+ 318 bool matches_proc =
false ;
+
+
+ 321 std::string
bin = words[r-3][p];
+
+
+ 324 process_id = boost::lexical_cast<
int >(words[r-2][p]);
+ 325 process = words[r-1][p];
+ 326 }
catch (boost::bad_lexical_cast &) {
+ 327 process_id = boost::lexical_cast<
int >(words[r-1][p]);
+ 328 process = words[r-2][p];
+
+ 330 if (words[i][2] ==
"*" || words[i][2] == bin) {
+
+
+ 333 if (words[i][3] ==
"*" || words[i][3] == process) {
+
+
+ 336 if (!matches_bin || !matches_proc)
continue ;
+ 337 auto sys = std::make_shared<Systematic>();
+
+ 339 sys->set_signal(process_id <= 0);
+ 340 sys->set_process(process);
+ 341 sys->set_name(param_name);
+ 342 sys->set_type(
"rateParam" );
+ 343 sys->set_analysis(analysis);
+
+ 345 sys->set_channel(channel);
+ 346 sys->set_bin_id(bin_id);
+
+ 348 systs_.push_back(sys);
+
+
+
+
+ 353 if (start_nuisance_scan && words[i].size() >= 4 &&
+ 354 boost::iequals(words[i][1],
"group" )) {
+ 355 if (!groups.count(words[i][0])) {
+ 356 groups[words[i][0]] = std::set<std::string>();
+
+ 358 for (
unsigned ig = 3; ig < words[i].size(); ++ig) {
+ 359 groups[words[i][0]].insert(words[i][ig]);
+
+
+
+
+ 364 if (start_nuisance_scan && words[i].size()-1 == words[r].size()) {
+ 365 for (
unsigned p = 2; p < words[i].size(); ++p) {
+ 366 if (words[i][p] ==
"-" )
continue ;
+ 367 auto sys = std::make_shared<Systematic>();
+ 368 sys->set_bin(words[r-3][p-1]);
+
+ 370 int process_id = boost::lexical_cast<
int >(words[r-2][p-1]);
+ 371 sys->set_signal(process_id <= 0);
+ 372 sys->set_process(words[r-1][p-1]);
+ 373 }
catch (boost::bad_lexical_cast &) {
+ 374 int process_id = boost::lexical_cast<
int >(words[r-1][p-1]);
+ 375 sys->set_signal(process_id <= 0);
+ 376 sys->set_process(words[r-2][p-1]);
+
+ 378 sys->set_name(words[i][0]);
+ 379 std::string type = words[i][1];
+ 380 if (!
contains (std::vector<std::string>{
"shape" ,
"shape?" ,
"shapeN2" ,
"shapeU" ,
"lnN" ,
"lnU" },
+
+ 382 throw std::runtime_error(
+ 383 FNERROR (
"Systematic type " + type +
" not supported" ));
+
+ 385 sys->set_type(words[i][1]);
+ 386 sys->set_analysis(analysis);
+
+ 388 sys->set_channel(channel);
+ 389 sys->set_bin_id(bin_id);
+
+
+ 392 std::size_t slash_pos = words[i][p].find(
"/" );
+ 393 if (slash_pos != words[i][p].npos) {
+
+
+ 396 boost::lexical_cast<double>(words[i][p].substr(0, slash_pos)));
+
+ 398 boost::lexical_cast<double>(words[i][p].substr(slash_pos+1)));
+ 399 sys->set_asymm(
true );
+
+ 401 sys->set_value_u(boost::lexical_cast<double>(words[i][p]));
+ 402 sys->set_asymm(
false );
+
+ 404 if (sys->type() ==
"shape" || sys->type() ==
"shapeN2" ||
+ 405 sys->type() ==
"shapeU" ) {
+ 406 sys->set_scale(boost::lexical_cast<double>(words[i][p]));
+ 407 LoadShapes(sys.get(), hist_mapping);
+ 408 }
else if (sys->type() ==
"shape?" ) {
+
+
+ 411 LoadShapes(sys.get(), hist_mapping);
+ 412 }
catch (std::exception & e) {
+ 413 LOGLINE (log(),
"Systematic with shape? did not resolve to a shape" );
+ 414 if (verbosity_ > 0) log() << e.what();
+
+ 416 if (!sys->shape_u() || !sys->shape_d()) {
+ 417 sys->set_type(
"lnN" );
+
+ 419 sys->set_type(
"shape" );
+ 420 sys->set_scale(boost::lexical_cast<double>(words[i][p]));
+
+
+ 423 if (sys->type() ==
"shape" || sys->type() ==
"shapeN2" ||
+ 424 sys->type() ==
"shapeU" )
+ 425 sys->set_asymm(
true );
+
+
+ 428 if (sys->type() ==
"lnU" || sys->type() ==
"shapeU" ) {
+ 429 params_.at(sys->name())->set_err_d(0.);
+ 430 params_.at(sys->name())->set_err_u(0.);
+
+ 432 systs_.push_back(sys);
+
+
+
+
+ 437 if (bin_names.size() == 1) {
+ 438 single_obs->set_bin(*(bin_names.begin()));
+ 439 LoadShapes(single_obs.get(), hist_mapping);
+ 440 obs_.push_back(single_obs);
+
+ 442 throw std::runtime_error(
FNERROR (
+ 443 "Input card specifies a single observation entry without a bin, but "
+ 444 "multiple bins defined elsewhere" ));
+
+
+
+
+ 449 for (
auto const & grp : groups) {
+
+
+
+
+
+
+ 456 std::string
const & root_file) {
+ 457 TFile file(root_file.c_str(),
"RECREATE" );
+
+
+
+
+
+
+
+
+
+
+ 468 void CombineHarvester::FillHistMappings(std::vector<HistMapping> & mappings) {
+
+
+
+ 472 std::map<RooAbsData const*, RooWorkspace*> data_ws_map;
+ 473 std::map<RooAbsReal const*, RooWorkspace*> pdf_ws_map;
+ 474 for (
auto const & iter : wspaces_) {
+ 475 auto dat = iter.second->allData();
+
+ 477 data_ws_map[d] = iter.second.get();
+
+ 479 RooArgSet vars = iter.second->allPdfs();
+ 480 auto v = vars.createIterator();
+
+ 482 RooAbsReal *y =
dynamic_cast< RooAbsReal*
> (**v);
+ 483 if (y) pdf_ws_map[iter.second->pdf(y->GetName())] = iter.second.get();
+
+ 485 RooArgSet fvars = iter.second->allFunctions();
+ 486 auto fv = fvars.createIterator();
+
+ 488 RooAbsReal *y =
dynamic_cast< RooAbsReal*
> (**fv);
+ 489 if (y) pdf_ws_map[iter.second->function(y->GetName())] = iter.second.get();
+ 490 }
while (fv->Next());
+
+
+
+
+
+ 496 std::set<std::string> hist_bins;
+
+ 498 for (
auto bin : bins) {
+ 499 unsigned shape_count = std::count_if(procs_.begin(), procs_.end(),
+ 500 [&](std::shared_ptr<ch::Process> p) {
+ 501 return (p->bin() ==
bin && p->shape() && (!p->signal()));
+
+ 503 shape_count += std::count_if(obs_.begin(), obs_.end(),
+ 504 [&](std::shared_ptr<ch::Observation> p) {
+ 505 return (p->bin() ==
bin && p->shape());
+
+ 507 unsigned counting = std::count_if(
+ 508 procs_.begin(), procs_.end(), [&](std::shared_ptr<ch::Process> p) {
+ 509 return (p->bin() ==
bin && p->shape() ==
nullptr &&
+ 510 p->pdf() ==
nullptr && p->
data () ==
nullptr );
+
+ 512 counting += std::count_if(
+ 513 obs_.begin(), obs_.end(), [&](std::shared_ptr<ch::Observation> p) {
+ 514 return (p->bin() ==
bin && p->shape() ==
nullptr &&
+ 515 p->
data () ==
nullptr );
+
+
+ 518 if (shape_count > 0) {
+ 519 mappings.emplace_back(
"*" ,
bin ,
bin +
"/$PROCESS" ,
+ 520 bin +
"/$PROCESS_$SYSTEMATIC" );
+ 521 hist_bins.insert(
bin );
+ 522 }
else if (counting > 0) {
+ 523 mappings.emplace_back(
"*" ,
bin ,
"" ,
"" );
+ 524 mappings.back().is_fake =
true ;
+
+
+
+
+
+
+ 531 for (
auto sig_proc : sig_proc_set) {
+
+
+ 534 auto masses =
Set2Vec (ch_signals.cp()
+
+
+ 537 if (masses.size() != 1) {
+ 538 throw std::runtime_error(
FNERROR (
"Process " + sig_proc +
" in bin " +
+
+ 540 " has multiple entries with multiple "
+ 541 "mass values, this is not supported" ));
+
+
+
+ 545 mappings.emplace_back(sig_proc,
bin ,
bin +
"/" + sig_proc +
"$MASS" ,
+ 546 bin +
"/" + sig_proc +
"$MASS_$SYSTEMATIC" );
+
+
+
+
+
+ 552 for (
auto bin : bins) {
+
+ 554 for (
auto obs : ch_bin.obs_) {
+ 555 if (!obs->data())
continue ;
+ 556 std::string obj_name = std::string(data_ws_map[obs->data()]->GetName()) +
+ 557 ":" + std::string(obs->data()->GetName());
+ 558 mappings.emplace_back(
"data_obs" , obs->bin(), obj_name,
"" );
+
+
+ 561 bool prototype_ok =
false ;
+ 562 HistMapping prototype;
+ 563 std::vector<HistMapping> full_list;
+ 564 auto pmap = ch_bin.GenerateProcSystMap();
+ 565 for (
unsigned i = 0; i < ch_bin.procs_.size(); ++i) {
+
+ 567 if (!proc->
data () && !proc->
pdf ())
continue ;
+ 568 std::string obj_name;
+ 569 std::string obj_sys_name;
+
+ 571 obj_name = std::string(data_ws_map[proc->
data ()]->GetName()) +
":" +
+ 572 std::string(proc->
data ()->GetName());
+
+
+ 575 obj_name = std::string(pdf_ws_map[proc->
pdf ()]->GetName()) +
+ 576 ":" + std::string(proc->
pdf ()->GetName());
+
+ 578 for (
unsigned j = 0; j < pmap[i].size(); ++j) {
+
+
+ 581 obj_sys_name = std::string(data_ws_map[sys->
data_u ()]->GetName()) +
+ 582 ":" + std::string(sys->
data_u ()->GetName());
+ 583 boost::replace_all(obj_sys_name, sys->
name () +
"Up" ,
"$SYSTEMATIC" );
+ 584 boost::replace_all(obj_sys_name, sys->
process (),
"$PROCESS" );
+
+
-
- 589 if (prototype.syst_pattern.size() && obj_sys_name.size() &&
- 590 prototype.syst_pattern != obj_sys_name) {
- 591 prototype_ok =
false ;
-
-
- 594 if (!prototype.pattern.size()) {
-
-
- 597 prototype.category =
bin ;
- 598 prototype.pattern = obj_name;
+ 588 boost::replace_all(obj_name, proc->
process (),
"$PROCESS" );
+
+
+
+ 592 if (prototype.pattern.size() && prototype.pattern != obj_name) {
+ 593 prototype_ok =
false ;
+
+
+ 596 if (prototype.syst_pattern.size() && obj_sys_name.size() &&
+ 597 prototype.syst_pattern != obj_sys_name) {
+ 598 prototype_ok =
false ;
- 600 if (!prototype.syst_pattern.size()) {
- 601 prototype.syst_pattern = obj_sys_name;
-
-
- 604 full_list.emplace_back(proc->
process (), proc->
bin (), obj_name,
-
-
-
-
-
-
- 611 if (!prototype_ok || hist_bins.count(
bin )) {
- 612 for (
auto m : full_list) {
- 613 mappings.push_back(m);
-
-
- 616 mappings.push_back(prototype);
-
-
-
-
-
-
-
-
-
-
- 627 bool is_counting =
true ;
-
- 629 if (obs->
shape () !=
nullptr || obs->
data () !=
nullptr ) {
-
-
-
-
-
- 635 if (proc->
shape () !=
nullptr || proc->
data () !=
nullptr ||
- 636 proc->
pdf () !=
nullptr ) {
-
-
-
-
-
-
- 643 if (!root_file.IsOpen() && !is_counting) {
- 644 throw std::runtime_error(
FNERROR (
- 645 std::string(
"Output ROOT file is not open: " ) + root_file.GetName()));
-
- 647 std::ofstream txt_file;
-
- 649 if (!txt_file.is_open()) {
- 650 throw std::runtime_error(
FNERROR (
"Unable to create file: " + name));
-
-
- 653 txt_file <<
"# Datacard produced by CombineHarvester with git status: "
- 654 << ch::GitVersion() <<
"\n" ;
-
- 656 std::string dashes(80,
'-' );
-
-
-
- 660 std::set<std::string> sys_set;
- 661 std::set<std::string> rateparam_set;
-
- 663 if (sys->
type () ==
"rateParam" ) {
- 664 rateparam_set.insert(sys->
name ());
-
- 666 sys_set.insert(sys->
name ());
-
-
- 669 txt_file <<
"imax " <<
bin_set .size()
- 670 <<
" number of bins\n" ;
- 671 txt_file <<
"jmax " << proc_set.size() - 1
- 672 <<
" number of processes minus 1\n" ;
- 673 txt_file <<
"kmax " <<
"*" <<
" number of nuisance parameters\n" ;
- 674 txt_file << dashes <<
"\n" ;
-
-
- 677 std::vector<HistMapping> mappings;
- 678 FillHistMappings(mappings);
-
-
-
- 682 auto proc_sys_map = this->GenerateProcSystMap();
+
+ 601 if (!prototype.pattern.size()) {
+
+
+ 604 prototype.category =
bin ;
+ 605 prototype.pattern = obj_name;
+
+ 607 if (!prototype.syst_pattern.size()) {
+ 608 prototype.syst_pattern = obj_sys_name;
+
+
+ 611 full_list.emplace_back(proc->
process (), proc->
bin (), obj_name,
+
+
+
+
+
+
+ 618 if (!prototype_ok || hist_bins.count(
bin )) {
+ 619 for (
auto m : full_list) {
+ 620 mappings.push_back(m);
+
+
+ 623 mappings.push_back(prototype);
+
+
+
+
+
+
+
+
+
+
+ 634 bool is_counting =
true ;
+
+ 636 if (obs->
shape () !=
nullptr || obs->
data () !=
nullptr ) {
+
+
+
+
+
+ 642 if (proc->
shape () !=
nullptr || proc->
data () !=
nullptr ||
+ 643 proc->
pdf () !=
nullptr ) {
+
+
+
+
+
+
+ 650 if (!root_file.IsOpen() && !is_counting) {
+ 651 throw std::runtime_error(
FNERROR (
+ 652 std::string(
"Output ROOT file is not open: " ) + root_file.GetName()));
+
+ 654 std::ofstream txt_file;
+
+ 656 if (!txt_file.is_open()) {
+ 657 throw std::runtime_error(
FNERROR (
"Unable to create file: " + name));
+
+
+ 660 txt_file <<
"# Datacard produced by CombineHarvester with git status: "
+ 661 << ch::GitVersion() <<
"\n" ;
+
+ 663 std::string dashes(80,
'-' );
+
+
+
+ 667 std::set<std::string> sys_set;
+ 668 std::set<std::string> rateparam_set;
+
+ 670 if (sys->
type () ==
"rateParam" ) {
+ 671 rateparam_set.insert(sys->
name ());
+
+ 673 sys_set.insert(sys->
name ());
+
+
+ 676 txt_file <<
"imax " <<
bin_set .size()
+ 677 <<
" number of bins\n" ;
+ 678 txt_file <<
"jmax " << proc_set.size() - 1
+ 679 <<
" number of processes minus 1\n" ;
+ 680 txt_file <<
"kmax " <<
"*" <<
" number of nuisance parameters\n" ;
+ 681 txt_file << dashes <<
"\n" ;
+
- 684 std::set<std::string> all_dependents_pars;
- 685 std::set<std::string> multipdf_cats;
- 686 for (
auto proc : procs_) {
- 687 if (!proc->
pdf ())
continue ;
-
- 692 RooAbsData
const * data_obj = FindMatchingData(proc.get());
-
- 694 RooArgSet norm_par_list;
-
-
-
-
-
-
-
- 702 RooRealVar mx(
"CMS_th1x" ,
"CMS_th1x" , 0, 1);
- 703 RooArgSet tmp_set(mx);
-
+ 684 std::vector<HistMapping> mappings;
+ 685 FillHistMappings(mappings);
+
+
+
+ 689 auto proc_sys_map = this->GenerateProcSystMap();
+
+ 691 std::set<std::string> all_dependents_pars;
+ 692 std::set<std::string> multipdf_cats;
+ 693 for (
auto proc : procs_) {
+ 694 if (!proc->
pdf ())
continue ;
+
+ 699 RooAbsData
const * data_obj = FindMatchingData(proc.get());
+
+ 701 RooArgSet norm_par_list;
+
+
+
-
+
-
- 709 RooFIter par_list_it = par_list.fwdIterator();
- 710 RooAbsArg *par_list_var =
nullptr ;
- 711 while ((par_list_var = par_list_it.next())) {
- 712 if (dynamic_cast<RooRealVar*>(par_list_var)) {
- 713 all_dependents_pars.insert(par_list_var->GetName());
+
+ 709 RooRealVar mx(
"CMS_th1x" ,
"CMS_th1x" , 0, 1);
+ 710 RooArgSet tmp_set(mx);
+
+
+
-
-
-
-
-
- 720 if (dynamic_cast<RooCategory*>(par_list_var) &&
- 721 proc->
pdf ()->InheritsFrom(
"RooMultiPdf" )) {
- 722 multipdf_cats.insert(par_list_var->GetName());
-
-
-
- 726 RooFIter nm_list_it = norm_par_list.fwdIterator();
- 727 RooAbsArg *nm_list_var =
nullptr ;
- 728 while ((nm_list_var = nm_list_it.next())) {
- 729 if (dynamic_cast<RooRealVar*>(nm_list_var)) {
- 730 all_dependents_pars.insert(nm_list_var->GetName());
-
-
-
-
-
-
- 737 std::string file_name = root_file.GetName();
-
-
-
- 741 boost::filesystem::path root_file_path =
- 742 boost::filesystem::absolute(file_name);
-
- 744 boost::filesystem::path txt_file_path =
- 745 boost::filesystem::absolute(name).parent_path();
-
- 747 file_name =
make_relative (txt_file_path, root_file_path).string();
-
-
-
- 751 std::set<std::string> used_wsps;
-
- 753 for (
auto const & mapping : mappings) {
- 754 if (!mapping.is_fake) {
- 755 txt_file << format(
"shapes %s %s %s %s %s\n" )
-
-
-
-
- 760 % mapping.syst_pattern;
- 761 if (mapping.IsPdf() || mapping.IsData()) {
- 762 used_wsps.insert(mapping.WorkspaceName());
-
-
- 765 txt_file << format(
"shapes %s %s %s\n" )
-
-
-
-
-
- 771 txt_file << dashes <<
"\n" ;
-
-
- 774 for (
auto ws_it : wspaces_) {
- 775 if (ws_it.first ==
"_rateParams" )
continue ;
-
- 777 if (!used_wsps.count(ws_it.second->GetName()))
continue ;
-
-
-
-
-
- 783 if (obs_.size() > 0) {
-
- 785 for (
auto const & obs : obs_) {
- 786 txt_file << format(
"%-15s " ) % obs->
bin ();
-
- 788 bool add_dir = TH1::AddDirectoryStatus();
- 789 TH1::AddDirectory(
false );
- 790 std::unique_ptr<TH1> h((TH1*)(obs->
shape ()->Clone()));
- 791 h->Scale(obs->
rate ());
- 792 WriteHistToFile(h.get(), &root_file, mappings, obs->
bin (),
"data_obs" ,
-
- 794 TH1::AddDirectory(add_dir);
-
-
-
- 798 txt_file <<
"observation " ;
-
-
-
-
- 803 std::string obs_fmt_int =
"%-15.1f " ;
- 804 std::string obs_fmt_flt =
"%-15.4f " ;
- 805 for (
auto const & obs : obs_) {
-
- 807 std::fabs(obs->
rate () - std::round(obs->
rate ())) > 1E-4;
- 808 txt_file << format(is_float ? obs_fmt_flt : obs_fmt_int)
-
-
-
- 812 txt_file << dashes <<
"\n" ;
-
-
- 815 unsigned sys_str_len = 14;
- 816 for (
auto const & sys : sys_set) {
- 817 if (sys.length() > sys_str_len) sys_str_len = sys.length();
-
- 819 for (
auto const & sys : all_dependents_pars) {
- 820 if (sys.length() > sys_str_len) sys_str_len = sys.length();
-
- 822 std::string sys_str_short = boost::lexical_cast<std::string>(sys_str_len);
- 823 std::string sys_str_long = boost::lexical_cast<std::string>(sys_str_len+9);
-
- 825 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"bin" ;
- 826 for (
auto const & proc : procs_) {
-
- 828 bool add_dir = TH1::AddDirectoryStatus();
- 829 TH1::AddDirectory(
false );
-
- 831 WriteHistToFile(h.get(), &root_file, mappings, proc->
bin (),
-
- 833 TH1::AddDirectory(add_dir);
-
- 835 txt_file << format(
"%-15s " ) % proc->
bin ();
-
-
-
- 839 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"process" ;
-
- 841 for (
auto const & proc : procs_) {
- 842 txt_file << format(
"%-15s " ) % proc->
process ();
+
+ 716 RooFIter par_list_it = par_list.fwdIterator();
+ 717 RooAbsArg *par_list_var =
nullptr ;
+ 718 while ((par_list_var = par_list_it.next())) {
+ 719 if (dynamic_cast<RooRealVar*>(par_list_var)) {
+ 720 all_dependents_pars.insert(par_list_var->GetName());
+
+
+
+
+
+
+ 727 if (dynamic_cast<RooCategory*>(par_list_var) &&
+ 728 proc->
pdf ()->InheritsFrom(
"RooMultiPdf" )) {
+ 729 multipdf_cats.insert(par_list_var->GetName());
+
+
+
+ 733 RooFIter nm_list_it = norm_par_list.fwdIterator();
+ 734 RooAbsArg *nm_list_var =
nullptr ;
+ 735 while ((nm_list_var = nm_list_it.next())) {
+ 736 if (dynamic_cast<RooRealVar*>(nm_list_var)) {
+ 737 all_dependents_pars.insert(nm_list_var->GetName());
+
+
+
+
+
+
+ 744 std::string file_name = root_file.GetName();
+
+
+
+ 748 boost::filesystem::path root_file_path =
+ 749 boost::filesystem::absolute(file_name);
+
+ 751 boost::filesystem::path txt_file_path =
+ 752 boost::filesystem::absolute(name).parent_path();
+
+ 754 file_name =
make_relative (txt_file_path, root_file_path).string();
+
+
+
+ 758 std::set<std::string> used_wsps;
+
+ 760 for (
auto const & mapping : mappings) {
+ 761 if (!mapping.is_fake) {
+ 762 txt_file << format(
"shapes %s %s %s %s %s\n" )
+
+
+
+
+ 767 % mapping.syst_pattern;
+ 768 if (mapping.IsPdf() || mapping.IsData()) {
+ 769 used_wsps.insert(mapping.WorkspaceName());
+
+
+ 772 txt_file << format(
"shapes %s %s %s\n" )
+
+
+
+
+
+ 778 txt_file << dashes <<
"\n" ;
+
+
+ 781 for (
auto ws_it : wspaces_) {
+ 782 if (ws_it.first ==
"_rateParams" )
continue ;
+
+ 784 if (!used_wsps.count(ws_it.second->GetName()))
continue ;
+
+
+
+
+
+ 790 if (obs_.size() > 0) {
+
+ 792 for (
auto const & obs : obs_) {
+ 793 txt_file << format(
"%-15s " ) % obs->
bin ();
+
+ 795 bool add_dir = TH1::AddDirectoryStatus();
+ 796 TH1::AddDirectory(
false );
+ 797 std::unique_ptr<TH1> h((TH1*)(obs->
shape ()->Clone()));
+ 798 h->Scale(obs->
rate ());
+ 799 WriteHistToFile(h.get(), &root_file, mappings, obs->
bin (),
"data_obs" ,
+
+ 801 TH1::AddDirectory(add_dir);
+
+
+
+ 805 txt_file <<
"observation " ;
+
+
+
+
+ 810 std::string obs_fmt_int =
"%-15.1f " ;
+ 811 std::string obs_fmt_flt =
"%-15.4f " ;
+ 812 for (
auto const & obs : obs_) {
+
+ 814 std::fabs(obs->
rate () - std::round(obs->
rate ())) > 1E-4;
+ 815 txt_file << format(is_float ? obs_fmt_flt : obs_fmt_int)
+
+
+
+ 819 txt_file << dashes <<
"\n" ;
+
+
+ 822 unsigned sys_str_len = 14;
+ 823 for (
auto const & sys : sys_set) {
+ 824 if (sys.length() > sys_str_len) sys_str_len = sys.length();
+
+ 826 for (
auto const & sys : all_dependents_pars) {
+ 827 if (sys.length() > sys_str_len) sys_str_len = sys.length();
+
+ 829 std::string sys_str_short = boost::lexical_cast<std::string>(sys_str_len);
+ 830 std::string sys_str_long = boost::lexical_cast<std::string>(sys_str_len+9);
+
+ 832 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"bin" ;
+ 833 for (
auto const & proc : procs_) {
+
+ 835 bool add_dir = TH1::AddDirectoryStatus();
+ 836 TH1::AddDirectory(
false );
+
+ 838 WriteHistToFile(h.get(), &root_file, mappings, proc->
bin (),
+
+ 840 TH1::AddDirectory(add_dir);
+
+ 842 txt_file << format(
"%-15s " ) % proc->
bin ();
846 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"process" ;
-
- 849 std::map<std::string, int> p_ids;
-
-
- 852 for (
unsigned p = 0; p < procs_.size(); ++p) {
- 853 if (!procs_[p]->signal()) {
- 854 if (p_ids.count(procs_[p]->process()) == 0) {
- 855 p_ids[procs_[p]->process()] = bkg_id;
-
-
-
-
- 860 if (p_ids[procs_[p]->
process ()] <= 0)
throw std::runtime_error(
FNERROR (
"Ambiguous definition of process (" + procs_[p]->
process () +
") as both signal and background" ));
-
-
- 863 unsigned q = procs_.size() - (p + 1);
- 864 if (procs_[q]->signal()) {
- 865 if (p_ids.count(procs_[q]->process()) == 0) {
- 866 p_ids[procs_[q]->process()] = sig_id;
-
+ 848 for (
auto const & proc : procs_) {
+ 849 txt_file << format(
"%-15s " ) % proc->
process ();
+
+
+
+ 853 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"process" ;
+
+
+ 856 std::map<std::string, int> p_ids;
+
+
+ 859 for (
unsigned p = 0; p < procs_.size(); ++p) {
+ 860 if (!procs_[p]->signal()) {
+ 861 if (p_ids.count(procs_[p]->process()) == 0) {
+ 862 p_ids[procs_[p]->process()] = bkg_id;
+
+
+
+
+ 867 if (p_ids[procs_[p]->
process ()] <= 0)
throw std::runtime_error(
FNERROR (
"Ambiguous definition of process (" + procs_[p]->
process () +
") as both signal and background" ));
-
-
- 871 if (p_ids[procs_[q]->
process ()] > 0)
throw std::runtime_error(
FNERROR (
"Ambiguous definition of process (" + procs_[q]->
process () +
") as both signal and background" ));
-
-
-
- 875 for (
auto const & proc : procs_) {
- 876 txt_file << format(
"%-15s " ) % p_ids[proc->
process ()];
-
-
-
-
- 881 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"rate" ;
+
+ 870 unsigned q = procs_.size() - (p + 1);
+ 871 if (procs_[q]->signal()) {
+ 872 if (p_ids.count(procs_[q]->process()) == 0) {
+ 873 p_ids[procs_[q]->process()] = sig_id;
+
+
+
+
+ 878 if (p_ids[procs_[q]->
process ()] > 0)
throw std::runtime_error(
FNERROR (
"Ambiguous definition of process (" + procs_[q]->
process () +
") as both signal and background" ));
+
+
+
882 for (
auto const & proc : procs_) {
-
+ 883 txt_file << format(
"%-15s " ) % p_ids[proc->
process ()];
- 886 txt_file << dashes <<
"\n" ;
+
-
-
- 890 for (
auto par : params_) {
-
-
- 893 all_dependents_pars.count(p->
name ()) && sys_set.count(p->
name ())) {
- 894 txt_file << format((format(
"%%-%is param %%g %%g" ) % sys_str_len).str()) %
-
- 896 if (p->
range_d () != std::numeric_limits<double>::lowest() &&
- 897 p->
range_u () != std::numeric_limits<double>::max()) {
-
-
-
-
-
-
- 904 for (
auto const & sys : sys_set) {
- 905 std::vector<std::string> line(procs_.size() + 2);
-
- 907 bool seen_lnN =
false ;
- 908 bool seen_lnU =
false ;
- 909 bool seen_shape =
false ;
- 910 bool seen_shapeN2 =
false ;
- 911 bool seen_shapeU =
false ;
- 912 for (
unsigned p = 0; p < procs_.size(); ++p) {
-
- 914 for (
unsigned n = 0; n < proc_sys_map[p].size(); ++n) {
-
-
- 917 if (ptr->
name () != sys)
continue ;
- 918 std::string tp = ptr->
type ();
- 919 if (tp ==
"lnN" || tp ==
"lnU" ) {
- 920 if (tp ==
"lnN" ) seen_lnN =
true ;
- 921 if (tp ==
"lnU" ) seen_lnU =
true ;
-
-
-
- 925 : (format(
"%g" ) % ptr->
value_u ()).str();
-
-
- 928 if (tp ==
"shape" || tp ==
"shapeN2" || tp ==
"shapeU" ) {
- 929 if (tp ==
"shape" ) seen_shape =
true ;
- 930 if (tp ==
"shapeN2" ) seen_shapeN2 =
true ;
- 931 if (tp ==
"shapeU" ) seen_shapeU =
true ;
- 932 line[p + 2] = (format(
"%g" ) % ptr->
scale ()).str();
-
- 934 bool add_dir = TH1::AddDirectoryStatus();
- 935 TH1::AddDirectory(
false );
-
- 937 h_d->Scale(procs_[p]->rate() * ptr->
value_d ());
- 938 WriteHistToFile(h_d.get(), &root_file, mappings, ptr->
bin (),
-
-
- 941 h_u->Scale(procs_[p]->rate() * ptr->
value_u ());
- 942 WriteHistToFile(h_u.get(), &root_file, mappings, ptr->
bin (),
-
- 944 TH1::AddDirectory(add_dir);
-
-
-
- 948 if (!flags_.at(
"allow-missing-shapes" )) {
- 949 std::stringstream err;
- 950 err <<
"Trying to write shape uncertainty with missing "
-
-
- 953 throw std::runtime_error(
FNERROR (err.str()));
-
-
-
-
-
-
-
- 961 }
else if (seen_shapeU) {
-
- 963 }
else if (seen_lnU) {
-
- 965 }
else if (seen_lnN && !seen_shape) {
-
- 967 }
else if (!seen_lnN && seen_shape) {
-
- 969 }
else if (seen_lnN && seen_shape) {
-
-
- 972 throw std::runtime_error(
FNERROR (
"Systematic type could not be deduced" ));
-
- 974 txt_file << format(
"%-" + sys_str_short +
"s %-7s " ) % line[0] % line[1];
- 975 for (
unsigned p = 0; p < procs_.size(); ++p) {
- 976 txt_file << format(
"%-15s " ) % line[p + 2];
-
-
-
-
-
-
-
-
- 985 std::vector<std::vector<std::string> > floating_params;
- 986 for (
auto const & sys : rateparam_set) {
- 987 FNLOGC (log(), verbosity_ > 1) <<
"Doing rateParam: " << sys <<
"\n" ;
-
-
- 990 FNLOGC (log(), verbosity_ > 1) <<
"Procs for this rateParam: \n" ;
- 991 for (
auto const & proc : procs_rp) {
- 992 FNLOGC (log(), verbosity_ > 1) <<
" - " << proc <<
"\n" ;
-
-
-
-
- 997 if (bins_rp.size() > 0 && bins_rp.size() == bins_all.size()) {
- 998 floating_params.push_back({sys,
"*" , proc});
-
- 1000 for (
auto const &
bin : bins_rp) {
- 1001 floating_params.push_back({sys,
bin , proc});
-
-
- 1004 FNLOGC (log(), verbosity_ > 1)
- 1005 << bins_rp.size() <<
"/" << bins_all.size()
- 1006 <<
" bins with this process have a rateParam\n" ;
-
-
- 1009 for (
auto const & rp : floating_params) {
- 1010 if (params_.count(rp[0])) {
-
- 1012 txt_file << format(
"%-" + sys_str_short +
"s %-10s %-10s %-10s %g" ) %
- 1013 rp[0] %
"rateParam" % rp[1] % rp[2] % par->
val ();
-
-
- 1016 if (par->
range_d () != std::numeric_limits<double>::lowest() &&
- 1017 par->
range_u () != std::numeric_limits<double>::max()) {
- 1018 txt_file << format(
" [%.4g,%.4g]" ) % par->
range_d () % par->
range_u ();
-
-
-
-
- 1023 for (
auto const & rp : floating_params) {
- 1024 if (!params_.count(rp[0])) {
-
-
- 1027 RooWorkspace *rp_ws = wspaces_.at(
"_rateParams" ).get();
- 1028 RooFormulaVar* form =
- 1029 dynamic_cast< RooFormulaVar*
> (rp_ws->function(rp[0].c_str()));
-
-
- 1032 std::stringstream ss;
- 1033 form->printMetaArgs(ss);
- 1034 std::string form_str = ss.str();
-
-
- 1037 std::size_t first = form_str.find_first_of(
'"' );
- 1038 std::size_t last = form_str.find_last_of(
'"' );
- 1039 form_str = form_str.substr(first + 1, last - first - 1);
-
-
- 1042 std::unique_ptr<RooArgSet>(form->getParameters(RooArgList()))->getSize();
- 1043 std::string args =
"" ;
- 1044 for (
unsigned i = 0; i < npars; ++i) {
- 1045 args += std::string(form->getParameter(i)->GetName());
- 1046 if (i < (npars-1)) {
-
-
-
- 1050 txt_file << format(
"%-" + sys_str_short +
- 1051 "s %-10s %-10s %-10s %-20s %s\n" ) %
- 1052 rp[0] %
"rateParam" % rp[1] % rp[2] % form_str % args;
-
-
-
- 1056 std::set<std::string> ws_vars;
- 1057 for (
auto iter : wspaces_) {
- 1058 RooArgSet vars = iter.second->allVars();
- 1059 auto v = vars.createIterator();
-
- 1061 RooRealVar *y =
dynamic_cast< RooRealVar*
> (**v);
-
- 1063 ws_vars.insert(y->GetName());
-
- 1065 }
while (v->Next());
-
-
-
-
-
-
-
-
-
- 1075 for (
auto par : params_) {
-
- 1077 if (p->
err_d () != 0.0 && p->
err_u () != 0.0 &&
- 1078 all_dependents_pars.count(p->
name ()) && !sys_set.count(p->
name ())) {
- 1079 txt_file << format((format(
"%%-%is param %%g %%g" ) % sys_str_len).str()) %
-
- 1081 if (p->
range_d () != std::numeric_limits<double>::lowest() &&
- 1082 p->
range_u () != std::numeric_limits<double>::max()) {
- 1083 txt_file << format(
" [%.4g,%.4g]" ) % p->
range_d () % p->
range_u ();
-
-
-
-
-
- 1089 for (
auto par : multipdf_cats) {
- 1090 txt_file << format((format(
"%%-%is discrete\n" ) % sys_str_len).str()) % par;
-
-
-
-
-
-
- 1097 std::map<std::string, std::set<std::string>> groups;
- 1098 for (
auto const & par : params_) {
-
- 1100 if (!all_dependents_pars.count(p->
name ()) && !sys_set.count(p->
name ())) {
-
-
- 1103 if (p->
err_d () == 0.0 && p->
err_u () == 0.0)
continue ;
- 1104 for (
auto const & str : p->
groups ()) {
- 1105 if (!groups.count(str)) {
- 1106 groups[str] = std::set<std::string>();
-
- 1108 groups[str].insert(p->
name ());
+ 888 txt_file << format(
"%-" +sys_str_long+
"s" ) %
"rate" ;
+ 889 for (
auto const & proc : procs_) {
+
+
+
+ 893 txt_file << dashes <<
"\n" ;
+
+
+
+ 897 for (
auto par : params_) {
+
+
+ 900 all_dependents_pars.count(p->
name ()) && sys_set.count(p->
name ())) {
+ 901 txt_file << format((format(
"%%-%is param %%g %%g" ) % sys_str_len).str()) %
+
+ 903 if (p->
range_d () != std::numeric_limits<double>::lowest() &&
+ 904 p->
range_u () != std::numeric_limits<double>::max()) {
+
+
+
+
+
+
+ 911 for (
auto const & sys : sys_set) {
+ 912 std::vector<std::string> line(procs_.size() + 2);
+
+ 914 bool seen_lnN =
false ;
+ 915 bool seen_lnU =
false ;
+ 916 bool seen_shape =
false ;
+ 917 bool seen_shapeN2 =
false ;
+ 918 bool seen_shapeU =
false ;
+ 919 for (
unsigned p = 0; p < procs_.size(); ++p) {
+
+ 921 for (
unsigned n = 0; n < proc_sys_map[p].size(); ++n) {
+
+
+ 924 if (ptr->
name () != sys)
continue ;
+ 925 std::string tp = ptr->
type ();
+ 926 if (tp ==
"lnN" || tp ==
"lnU" ) {
+ 927 if (tp ==
"lnN" ) seen_lnN =
true ;
+ 928 if (tp ==
"lnU" ) seen_lnU =
true ;
+
+
+
+ 932 : (format(
"%g" ) % ptr->
value_u ()).str();
+
+
+ 935 if (tp ==
"shape" || tp ==
"shapeN2" || tp ==
"shapeU" ) {
+ 936 if (tp ==
"shape" ) seen_shape =
true ;
+ 937 if (tp ==
"shapeN2" ) seen_shapeN2 =
true ;
+ 938 if (tp ==
"shapeU" ) seen_shapeU =
true ;
+ 939 line[p + 2] = (format(
"%g" ) % ptr->
scale ()).str();
+
+ 941 bool add_dir = TH1::AddDirectoryStatus();
+ 942 TH1::AddDirectory(
false );
+
+ 944 h_d->Scale(procs_[p]->rate() * ptr->
value_d ());
+ 945 WriteHistToFile(h_d.get(), &root_file, mappings, ptr->
bin (),
+
+
+ 948 h_u->Scale(procs_[p]->rate() * ptr->
value_u ());
+ 949 WriteHistToFile(h_u.get(), &root_file, mappings, ptr->
bin (),
+
+ 951 TH1::AddDirectory(add_dir);
+
+
+
+ 955 if (!flags_.at(
"allow-missing-shapes" )) {
+ 956 std::stringstream err;
+ 957 err <<
"Trying to write shape uncertainty with missing "
+
+
+ 960 throw std::runtime_error(
FNERROR (err.str()));
+
+
+
+
+
+
+
+ 968 }
else if (seen_shapeU) {
+
+ 970 }
else if (seen_lnU) {
+
+ 972 }
else if (seen_lnN && !seen_shape) {
+
+ 974 }
else if (!seen_lnN && seen_shape) {
+
+ 976 }
else if (seen_lnN && seen_shape) {
+
+
+ 979 throw std::runtime_error(
FNERROR (
"Systematic type could not be deduced" ));
+
+ 981 txt_file << format(
"%-" + sys_str_short +
"s %-7s " ) % line[0] % line[1];
+ 982 for (
unsigned p = 0; p < procs_.size(); ++p) {
+ 983 txt_file << format(
"%-15s " ) % line[p + 2];
+
+
+
+
+
+
+
+
+ 992 std::vector<std::vector<std::string> > floating_params;
+ 993 for (
auto const & sys : rateparam_set) {
+ 994 FNLOGC (log(), verbosity_ > 1) <<
"Doing rateParam: " << sys <<
"\n" ;
+
+
+ 997 FNLOGC (log(), verbosity_ > 1) <<
"Procs for this rateParam: \n" ;
+ 998 for (
auto const & proc : procs_rp) {
+ 999 FNLOGC (log(), verbosity_ > 1) <<
" - " << proc <<
"\n" ;
+
+
+
+
+ 1004 if (bins_rp.size() > 0 && bins_rp.size() == bins_all.size()) {
+ 1005 floating_params.push_back({sys,
"*" , proc});
+
+ 1007 for (
auto const &
bin : bins_rp) {
+ 1008 floating_params.push_back({sys,
bin , proc});
+
+
+ 1011 FNLOGC (log(), verbosity_ > 1)
+ 1012 << bins_rp.size() <<
"/" << bins_all.size()
+ 1013 <<
" bins with this process have a rateParam\n" ;
+
+
+ 1016 for (
auto const & rp : floating_params) {
+ 1017 if (params_.count(rp[0])) {
+
+ 1019 txt_file << format(
"%-" + sys_str_short +
"s %-10s %-10s %-10s %g" ) %
+ 1020 rp[0] %
"rateParam" % rp[1] % rp[2] % par->
val ();
+
+
+ 1023 if (par->
range_d () != std::numeric_limits<double>::lowest() &&
+ 1024 par->
range_u () != std::numeric_limits<double>::max()) {
+ 1025 txt_file << format(
" [%.4g,%.4g]" ) % par->
range_d () % par->
range_u ();
+
+
+
+
+ 1030 for (
auto const & rp : floating_params) {
+ 1031 if (!params_.count(rp[0])) {
+
+
+ 1034 RooWorkspace *rp_ws = wspaces_.at(
"_rateParams" ).get();
+ 1035 RooFormulaVar* form =
+ 1036 dynamic_cast< RooFormulaVar*
> (rp_ws->function(rp[0].c_str()));
+
+
+ 1039 std::stringstream ss;
+ 1040 form->printMetaArgs(ss);
+ 1041 std::string form_str = ss.str();
+
+
+ 1044 std::size_t first = form_str.find_first_of(
'"' );
+ 1045 std::size_t last = form_str.find_last_of(
'"' );
+ 1046 form_str = form_str.substr(first + 1, last - first - 1);
+
+
+ 1049 std::unique_ptr<RooArgSet>(form->getParameters(RooArgList()))->getSize();
+ 1050 std::string args =
"" ;
+ 1051 for (
unsigned i = 0; i < npars; ++i) {
+ 1052 args += std::string(form->getParameter(i)->GetName());
+ 1053 if (i < (npars-1)) {
+
+
+
+ 1057 txt_file << format(
"%-" + sys_str_short +
+ 1058 "s %-10s %-10s %-10s %-20s %s\n" ) %
+ 1059 rp[0] %
"rateParam" % rp[1] % rp[2] % form_str % args;
+
+
+
+ 1063 std::set<std::string> ws_vars;
+ 1064 for (
auto iter : wspaces_) {
+ 1065 RooArgSet vars = iter.second->allVars();
+ 1066 auto v = vars.createIterator();
+
+ 1068 RooRealVar *y =
dynamic_cast< RooRealVar*
> (**v);
+
+ 1070 ws_vars.insert(y->GetName());
+
+ 1072 }
while (v->Next());
+
+
+
+
+
+
+
+
+
+ 1082 for (
auto par : params_) {
+
+ 1084 if (p->
err_d () != 0.0 && p->
err_u () != 0.0 &&
+ 1085 all_dependents_pars.count(p->
name ()) && !sys_set.count(p->
name ())) {
+ 1086 txt_file << format((format(
"%%-%is param %%g %%g" ) % sys_str_len).str()) %
+
+ 1088 if (p->
range_d () != std::numeric_limits<double>::lowest() &&
+ 1089 p->
range_u () != std::numeric_limits<double>::max()) {
+ 1090 txt_file << format(
" [%.4g,%.4g]" ) % p->
range_d () % p->
range_u ();
+
+
+
+
+
+ 1096 for (
auto par : multipdf_cats) {
+ 1097 txt_file << format((format(
"%%-%is discrete\n" ) % sys_str_len).str()) % par;
+
+
+
+
+
+
+ 1104 std::map<std::string, std::set<std::string>> groups;
+ 1105 for (
auto const & par : params_) {
+
+ 1107 if (!all_dependents_pars.count(p->
name ()) && !sys_set.count(p->
name ())) {
+
-
- 1111 for (
auto const & gr : groups) {
- 1112 txt_file << format(
"%s group =" ) % gr.first;
- 1113 for (
auto const & np : gr.second) {
- 1114 txt_file <<
" " << np;
-
-
+ 1110 if (p->
err_d () == 0.0 && p->
err_u () == 0.0)
continue ;
+ 1111 for (
auto const & str : p->
groups ()) {
+ 1112 if (!groups.count(str)) {
+ 1113 groups[str] = std::set<std::string>();
+
+ 1115 groups[str].insert(p->
name ());
+
-
-
-
-
- 1122 void CombineHarvester::WriteHistToFile(
-
-
- 1125 std::vector<HistMapping>
const & mappings,
- 1126 std::string
const & bin,
-
- 1128 std::string
const & mass,
- 1129 std::string
const & nuisance,
-
- 1131 StrPairVec attempts = this->GenerateShapeMapAttempts(process, bin);
- 1132 for (
unsigned a = 0; a < attempts.size(); ++a) {
- 1133 for (
unsigned m = 0; m < mappings.size(); ++m) {
- 1134 if ((attempts[a].first == mappings[m].process) &&
- 1135 (attempts[a].second == mappings[m].category)) {
- 1136 std::string p = (type == 0 ?
- 1137 mappings[m].pattern : mappings[m].syst_pattern);
- 1138 boost::replace_all(p,
"$CHANNEL" , bin);
- 1139 boost::replace_all(p,
"$PROCESS" , process);
- 1140 boost::replace_all(p,
"$MASS" , mass);
- 1141 if (type == 1) boost::replace_all(p,
"$SYSTEMATIC" , nuisance+
"Down" );
- 1142 if (type == 2) boost::replace_all(p,
"$SYSTEMATIC" , nuisance+
"Up" );
-
-
-
-
-
-
-
+ 1118 for (
auto const & gr : groups) {
+ 1119 txt_file << format(
"%s group =" ) % gr.first;
+ 1120 for (
auto const & np : gr.second) {
+ 1121 txt_file <<
" " << np;
+
+
+
+
+ 1126 for (
auto const & postl : post_lines_) {
+ 1127 txt_file << postl <<
"\n" ;
+
+
+
+
+
+ 1133 void CombineHarvester::WriteHistToFile(
+
+
+ 1136 std::vector<HistMapping>
const & mappings,
+ 1137 std::string
const & bin,
+
+ 1139 std::string
const & mass,
+ 1140 std::string
const & nuisance,
+
+ 1142 StrPairVec attempts = this->GenerateShapeMapAttempts(process, bin);
+ 1143 for (
unsigned a = 0; a < attempts.size(); ++a) {
+ 1144 for (
unsigned m = 0; m < mappings.size(); ++m) {
+ 1145 if ((attempts[a].first == mappings[m].process) &&
+ 1146 (attempts[a].second == mappings[m].category)) {
+ 1147 std::string p = (type == 0 ?
+ 1148 mappings[m].pattern : mappings[m].syst_pattern);
+ 1149 boost::replace_all(p,
"$CHANNEL" , bin);
+ 1150 boost::replace_all(p,
"$PROCESS" , process);
+ 1151 boost::replace_all(p,
"$MASS" , mass);
+ 1152 if (type == 1) boost::replace_all(p,
"$SYSTEMATIC" , nuisance+
"Down" );
+ 1153 if (type == 2) boost::replace_all(p,
"$SYSTEMATIC" , nuisance+
"Up" );
+
+
+
+
+
+
+
std::unique_ptr< TH1 > ClonedShapeU() const
CombineHarvester & data()
void CreateParameterIfEmpty(std::string const &name)
@@ -1254,25 +1265,26 @@
RooDataHist const * data_u() const
RooDataHist const * data_d() const
-void WriteDatacard(std::string const &name, std::string const &root_file)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+void WriteDatacard(std::string const &name, std::string const &root_file)
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
TH1 const * shape() const
std::string WorkspaceName() const
-RooAbsReal const * norm() const
+RooAbsReal const * norm() const
-RooAbsData const * data() const
+RooAbsData const * data() const
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
void set_val(double const &val)
std::string const & type() const
int ParseDatacard(std::string const &filename, std::string const &analysis, std::string const &era, std::string const &channel, int bin_id, std::string const &mass)
-double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
-std::unique_ptr< TH1 > ClonedScaledShape() const
+double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
+std::unique_ptr< TH1 > ClonedScaledShape() const
std::set< std::string > bin_set()
void set_name(std::string const &name)
std::string SystWorkspaceName() const
+RooAbsReal const * pdf() const
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
@@ -1281,7 +1293,7 @@
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
virtual std::string const & process() const
@@ -1291,20 +1303,20 @@
virtual std::string const & mass() const
-bool is_float(std::string const &str)
-std::vector< std::string > ParseFileLines(std::string const &file_name)
+bool is_float(std::string const &str)
+std::vector< std::string > ParseFileLines(std::string const &file_name)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
-void ForEachProc(Function func)
+void ForEachProc(Function func)
-TH1 const * shape() const
+TH1 const * shape() const
std::string const & name() const
RooAbsData const * data() const
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
bool contains(const Range &r, T p)
std::set< std::string > & groups()
@@ -1313,9 +1325,8 @@
void set_range_d(double const &range_d)
virtual std::string const & bin() const
-std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
-RooAbsPdf const * pdf() const
std::unique_ptr< TH1 > ClonedShapeD() const
@@ -1323,17 +1334,17 @@
static std::ostream & PrintHeader(std::ostream &out)
-void ForEachSyst(Function func)
-void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+void ForEachSyst(Function func)
+void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
std::shared_ptr< RooWorkspace > sys_ws
-void ForEachObs(Function func)
-
+void ForEachObs(Function func)
+
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
CombineHarvester & signals()
-std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
-boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
+std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
std::string const & name() const
diff --git a/_combine_harvester___evaluate_8cc_source.html b/_combine_harvester___evaluate_8cc_source.html
index e14566626da..5d9f7e391ae 100644
--- a/_combine_harvester___evaluate_8cc_source.html
+++ b/_combine_harvester___evaluate_8cc_source.html
@@ -478,395 +478,411 @@
377 shape.Add(&proc_shape);
378 }
else if (procs_[i]->pdf()) {
- 379 RooAbsData
const * data_obj = FindMatchingData(procs_[i].
get ());
- 380 std::string var_name =
"CMS_th1x" ;
- 381 if (data_obj) var_name = data_obj->get()->first()->GetName();
- 382 TH1::AddDirectory(
false );
- 383 TH1F *tmp =
dynamic_cast< TH1F*
> (
- 384 procs_[i]->pdf()->createHistogram(var_name.c_str()));
- 385 TH1F proc_shape = *tmp;
-
- 387 if (!procs_[i]->pdf()->selfNormalized()) {
-
-
- 390 if (proc_shape.Integral() > 0.) {
- 391 proc_shape.Scale(1. / proc_shape.Integral());
-
-
- 394 for (
auto sys_it : lookup[i]) {
- 395 if (sys_it->type() ==
"rateParam" ) {
-
-
- 398 double x = params_[sys_it->name()]->val();
- 399 if (sys_it->asymm()) {
- 400 p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
-
-
- 403 p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
+ 379 if (!procs_[i]->observable()) {
+ 380 RooAbsData
const * data_obj = FindMatchingData(procs_[i].
get ());
+ 381 std::string var_name =
"CMS_th1x" ;
+ 382 if (data_obj) var_name = data_obj->get()->first()->GetName();
+ 383 procs_[i]->set_observable((RooRealVar *)procs_[i]->pdf()->findServer(var_name.c_str()));
+
+ 385 TH1::AddDirectory(
false );
+ 386 TH1F* tmp = (TH1F*)procs_[i]->observable()->createHistogram(
"" );
+ 387 for (
int b = 1; b <= tmp->GetNbinsX(); ++b) {
+ 388 procs_[i]->observable()->setVal(tmp->GetBinCenter(b));
+ 389 tmp->SetBinContent(b, tmp->GetBinWidth(b) * procs_[i]->pdf()->getVal());
+
+ 391 TH1F proc_shape = *tmp;
+
+ 393 RooAbsPdf
const * aspdf =
dynamic_cast< RooAbsPdf const*
> (procs_[i]->pdf());
+ 394 if ((aspdf && !aspdf->selfNormalized()) || (!aspdf)) {
+
+
+ 397 if (proc_shape.Integral() > 0.) {
+ 398 proc_shape.Scale(1. / proc_shape.Integral());
+
+
+ 401 for (
auto sys_it : lookup[i]) {
+ 402 if (sys_it->type() ==
"rateParam" ) {
+
-
- 406 proc_shape.Scale(p_rate);
-
- 408 proc_shape.Copy(shape);
-
-
-
- 412 shape.Add(&proc_shape);
-
-
-
-
-
-
-
- 420 for (
unsigned i = 0; i < obs_.size(); ++i) {
- 421 rate += obs_[i]->rate();
-
-
-
-
-
-
- 428 bool shape_init =
false ;
-
- 430 for (
unsigned i = 0; i < obs_.size(); ++i) {
-
- 432 double p_rate = obs_[i]->rate();
- 433 if (obs_[i]->shape()) {
- 434 proc_shape = obs_[i]->ShapeAsTH1F();
- 435 }
else if (obs_[i]->
data ()) {
- 436 std::string var_name = obs_[i]->data()->get()->first()->GetName();
- 437 TH1F *tmp =
dynamic_cast< TH1F*
> (obs_[i]->data()->createHistogram(
-
-
-
- 441 proc_shape.Scale(1. / proc_shape.Integral());
-
- 443 proc_shape.Scale(p_rate);
-
- 445 proc_shape.Copy(shape);
-
-
+ 405 double x = params_[sys_it->name()]->val();
+ 406 if (sys_it->asymm()) {
+ 407 p_rate *= logKappaForX(x * sys_it->scale(), sys_it->value_d(),
+
+
+ 410 p_rate *= std::pow(sys_it->value_u(), x * sys_it->scale());
+
+
+ 413 proc_shape.Scale(p_rate);
+
+ 415 proc_shape.Copy(shape);
+
+
+
+ 419 shape.Add(&proc_shape);
+
+
+
+
+
+
+
+ 427 for (
unsigned i = 0; i < obs_.size(); ++i) {
+ 428 rate += obs_[i]->rate();
+
+
+
+
+
+
+ 435 bool shape_init =
false ;
+
+ 437 for (
unsigned i = 0; i < obs_.size(); ++i) {
+
+ 439 double p_rate = obs_[i]->rate();
+ 440 if (obs_[i]->shape()) {
+ 441 proc_shape = obs_[i]->ShapeAsTH1F();
+ 442 }
else if (obs_[i]->
data ()) {
+ 443 TH1F* tmp =
dynamic_cast< TH1F*
> (obs_[i]->data()->createHistogram(
+ 444 "" , *(RooRealVar*)obs_[i]->
data ()->
get ()->first()));
+
+
+ 447 proc_shape.Scale(1. / proc_shape.Integral());
- 449 shape.Add(&proc_shape);
-
-
-
-
- 454 void CombineHarvester::ShapeDiff(
double x,
-
-
-
-
-
- 460 double fx = smoothStepFunc(x);
- 461 for (
int i = 1; i <= target->GetNbinsX(); ++i) {
- 462 float h = high->GetBinContent(i);
- 463 float l = low->GetBinContent(i);
- 464 float n = nom->GetBinContent(i);
-
- 466 float t = target->GetBinContent(i);
- 467 target->SetBinContent(i, t > 0. ? std::log(t) : -999.);
- 468 h = (h > 0. && n > 0.) ? std::log(h/n) : 0.;
- 469 l = (l > 0. && n > 0.) ? std::log(l/n) : 0.;
- 470 target->SetBinContent(i, target->GetBinContent(i) +
- 471 0.5 * x * ((h - l) + (h + l) * fx));
- 472 target->SetBinContent(i, std::exp(target->GetBinContent(i)));
-
- 474 target->SetBinContent(i, target->GetBinContent(i) +
- 475 0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
-
-
-
-
- 480 void CombineHarvester::ShapeDiff(
double x,
-
- 482 RooDataHist
const * nom,
- 483 RooDataHist
const * low,
- 484 RooDataHist
const * high) {
- 485 double fx = smoothStepFunc(x);
- 486 for (
int i = 1; i <= target->GetNbinsX(); ++i) {
-
-
-
-
-
- 492 float h = high->weight() / high->sumEntries();
- 493 float l = low->weight() / low->sumEntries();
- 494 float n = nom->weight() / nom->sumEntries();
- 495 target->SetBinContent(i, target->GetBinContent(i) +
- 496 0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
-
-
-
-
-
-
-
-
-
-
-
- 508 std::string
const & newname) {
- 509 auto it = params_.find(oldname);
- 510 if (it != params_.end()) {
- 511 params_[newname] = it->second;
- 512 params_[newname]->set_name(newname);
-
-
-
-
-
- 518 std::string
const & name)
const {
- 519 auto it = params_.find(name);
- 520 if (it != params_.end()) {
- 521 return it->second.get();
-
-
-
-
-
-
- 528 auto it = params_.find(name);
- 529 if (it != params_.end()) {
- 530 return it->second.get();
-
-
-
-
-
-
- 537 std::vector<ch::Parameter>
const & params) {
- 538 for (
unsigned i = 0; i < params.size(); ++i) {
- 539 auto it = params_.find(params[i].name());
- 540 if (it != params_.end()) {
- 541 it->second->set_val(params[i].val());
- 542 it->second->set_err_d(params[i].err_d());
- 543 it->second->set_err_u(params[i].err_u());
-
- 545 if (verbosity_ >= 1) {
- 546 LOGLINE (log(),
"Parameter " + params[i].name() +
" is not defined" );
-
-
-
-
-
-
- 553 for (
int i = 0; i < fit.floatParsFinal().getSize(); ++i) {
- 554 RooRealVar
const * var =
- 555 dynamic_cast< RooRealVar const*
> (fit.floatParsFinal().at(i));
-
- 557 auto it = params_.find(std::string(var->GetName()));
- 558 if (it != params_.end()) {
- 559 it->second->set_val(var->getVal());
- 560 it->second->set_err_d(var->getErrorLo());
- 561 it->second->set_err_u(var->getErrorHi());
-
- 563 if (verbosity_ >= 1) {
-
- 565 "Parameter " + std::string(var->GetName()) +
" is not defined" );
-
-
-
-
-
-
-
-
-
-
- 576 std::vector<ch::Parameter> params;
- 577 for (
auto const & it : params_) {
- 578 params.push_back(*(it.second));
-
-
-
-
-
-
-
-
-
-
-
- 590 std::vector<double> prev_proc_rates(procs_.size());
-
-
-
- 594 std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
-
- 596 for (
unsigned i = 0; i < procs_.size(); ++i) {
- 597 if (procs_[i]->shape()) {
-
- 599 std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
-
- 601 prev_proc_rates[i] = procs_[i]->no_norm_rate();
- 602 std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1,
"" , &(bins[0])));
-
- 604 procs_[i]->set_shape(std::move(copy2),
true );
- 605 scaled_procs[i] = procs_[i]->ClonedScaledShape();
-
-
- 608 for (
unsigned i = 0; i < obs_.size(); ++i) {
- 609 if (obs_[i]->shape()) {
- 610 std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
- 611 std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1,
"" , &(bins[0])));
- 612 obs_[i]->set_shape(std::move(copy2),
true );
-
-
- 615 for (
unsigned i = 0; i < systs_.size(); ++i) {
- 616 TH1
const * proc_hist =
nullptr ;
- 617 double prev_rate = 0.;
- 618 for (
unsigned j = 0; j < procs_.size(); ++j) {
-
- 620 proc_hist = scaled_procs[j].get();
- 621 prev_rate = prev_proc_rates[j];
-
-
- 624 if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
-
- 626 std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
- 627 std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
-
-
-
-
- 632 copy_u->Scale(systs_[i]->value_u() * prev_rate);
- 633 copy_d->Scale(systs_[i]->value_d() * prev_rate);
-
- 635 std::unique_ptr<TH1> copy2_u(
- 636 copy_u->Rebin(bins.size() - 1,
"" , &(bins[0])));
- 637 std::unique_ptr<TH1> copy2_d(
- 638 copy_d->Rebin(bins.size() - 1,
"" , &(bins[0])));
-
-
- 641 systs_[i]->set_shapes(std::move(copy2_u), std::move(copy2_d), proc_hist);
-
-
-
-
-
- 647 for (
unsigned i = 0; i < procs_.size(); ++i) {
- 648 std::set<std::string> binning_vars;
- 649 if (procs_[i]->pdf()) {
- 650 RooAbsData
const * data_obj = FindMatchingData(procs_[i].
get ());
- 651 std::string var_name =
"CMS_th1x" ;
- 652 if (data_obj) var_name = data_obj->get()->first()->GetName();
- 653 binning_vars.insert(var_name);
-
- 655 for (
auto & it : wspaces_) {
- 656 for (
auto & var : binning_vars) {
-
- 658 dynamic_cast< RooRealVar*
> (it.second->var(var.c_str()));
- 659 if (avar) avar->setBins(nbins);
-
-
-
-
-
-
-
- 667 double CombineHarvester::logKappaForX(
double x,
double k_low,
- 668 double k_high)
const {
- 669 if (k_high == 0. || k_low == 0.) {
- 670 if (verbosity_ >= 1) {
- 671 LOGLINE (log(),
"Have kappa=0.0 (scaling ill-defined), returning 1.0" );
-
-
-
-
- 676 return (x >= 0 ? std::pow(k_high, x) : std::pow(k_low, -1.0 * x));
-
-
-
-
-
-
-
-
- 685 double logKhi = std::log(k_high);
- 686 double logKlo = -std::log(k_low);
- 687 double avg = 0.5 * (logKhi + logKlo), halfdiff = 0.5 * (logKhi - logKlo);
- 688 double twox = x + x, twox2 = twox * twox;
- 689 double alpha = 0.125 * twox * (twox2 * (3 * twox2 - 10.) + 15.);
- 690 double ret = avg + alpha * halfdiff;
- 691 return std::exp(ret * x);
-
-
-
- 695 std::vector<std::string>
const & patterns) {
- 696 std::vector<boost::regex> rgx;
- 697 for (
auto const & pt : patterns) rgx.emplace_back(pt);
- 698 for (
auto it = params_.begin(); it != params_.end(); ++it) {
- 699 std::string par = it->first;
- 700 auto & groups = it->second->groups();
- 701 if (groups.count(name))
continue ;
-
-
-
-
-
-
-
- 709 std::vector<std::string>
const & patterns) {
- 710 std::vector<boost::regex> rgx;
- 711 for (
auto const & pt : patterns) rgx.emplace_back(pt);
- 712 for (
auto it = params_.begin(); it != params_.end(); ++it) {
- 713 std::string par = it->first;
- 714 auto & groups = it->second->groups();
- 715 if (!groups.count(name))
continue ;
-
-
-
-
-
-
-
- 723 std::string
const & newname) {
- 724 for (
auto it = params_.begin(); it != params_.end(); ++it) {
- 725 auto & groups = it->second->groups();
- 726 if (groups.count(oldname)) {
- 727 groups.erase(oldname);
- 728 groups.insert(newname);
-
-
-
-
+ 449 proc_shape.Scale(p_rate);
+
+ 451 proc_shape.Copy(shape);
+
+
+
+ 455 shape.Add(&proc_shape);
+
+
+
+
+ 460 void CombineHarvester::ShapeDiff(
double x,
+
+
+
+
+
+ 466 double fx = smoothStepFunc(x);
+ 467 for (
int i = 1; i <= target->GetNbinsX(); ++i) {
+ 468 float h = high->GetBinContent(i);
+ 469 float l = low->GetBinContent(i);
+ 470 float n = nom->GetBinContent(i);
+
+ 472 float t = target->GetBinContent(i);
+ 473 target->SetBinContent(i, t > 0. ? std::log(t) : -999.);
+ 474 h = (h > 0. && n > 0.) ? std::log(h/n) : 0.;
+ 475 l = (l > 0. && n > 0.) ? std::log(l/n) : 0.;
+ 476 target->SetBinContent(i, target->GetBinContent(i) +
+ 477 0.5 * x * ((h - l) + (h + l) * fx));
+ 478 target->SetBinContent(i, std::exp(target->GetBinContent(i)));
+
+ 480 target->SetBinContent(i, target->GetBinContent(i) +
+ 481 0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
+
+
+
+
+ 486 void CombineHarvester::ShapeDiff(
double x,
+
+ 488 RooDataHist
const * nom,
+ 489 RooDataHist
const * low,
+ 490 RooDataHist
const * high) {
+ 491 double fx = smoothStepFunc(x);
+ 492 for (
int i = 1; i <= target->GetNbinsX(); ++i) {
+
+
+
+
+
+ 498 float h = high->weight() / high->sumEntries();
+ 499 float l = low->weight() / low->sumEntries();
+ 500 float n = nom->weight() / nom->sumEntries();
+ 501 target->SetBinContent(i, target->GetBinContent(i) +
+ 502 0.5 * x * ((h - l) + (h + l - 2. * n) * fx));
+
+
+
+
+
+
+
+
+
+
+
+ 514 std::string
const & newname) {
+ 515 auto it = params_.find(oldname);
+ 516 if (it != params_.end()) {
+ 517 params_[newname] = it->second;
+ 518 params_[newname]->set_name(newname);
+
+
+
+
+
+ 524 std::string
const & name)
const {
+ 525 auto it = params_.find(name);
+ 526 if (it != params_.end()) {
+ 527 return it->second.get();
+
+
+
+
+
+
+ 534 auto it = params_.find(name);
+ 535 if (it != params_.end()) {
+ 536 return it->second.get();
+
+
+
+
+
+
+ 543 std::vector<ch::Parameter>
const & params) {
+ 544 for (
unsigned i = 0; i < params.size(); ++i) {
+ 545 auto it = params_.find(params[i].name());
+ 546 if (it != params_.end()) {
+ 547 it->second->set_val(params[i].val());
+ 548 it->second->set_err_d(params[i].err_d());
+ 549 it->second->set_err_u(params[i].err_u());
+
+ 551 if (verbosity_ >= 1) {
+ 552 LOGLINE (log(),
"Parameter " + params[i].name() +
" is not defined" );
+
+
+
+
+
+
+ 559 for (
int i = 0; i < fit.floatParsFinal().getSize(); ++i) {
+ 560 RooRealVar
const * var =
+ 561 dynamic_cast< RooRealVar const*
> (fit.floatParsFinal().at(i));
+
+ 563 auto it = params_.find(std::string(var->GetName()));
+ 564 if (it != params_.end()) {
+ 565 it->second->set_val(var->getVal());
+ 566 it->second->set_err_d(var->getErrorLo());
+ 567 it->second->set_err_u(var->getErrorHi());
+
+ 569 if (verbosity_ >= 1) {
+
+ 571 "Parameter " + std::string(var->GetName()) +
" is not defined" );
+
+
+
+
+
+
+
+
+
+
+ 582 std::vector<ch::Parameter> params;
+ 583 for (
auto const & it : params_) {
+ 584 params.push_back(*(it.second));
+
+
+
+
+
+
+
+
+
+
+
+ 596 std::vector<double> prev_proc_rates(procs_.size());
+
+
+
+ 600 std::vector<std::unique_ptr<TH1>> scaled_procs(procs_.size());
+
+ 602 for (
unsigned i = 0; i < procs_.size(); ++i) {
+ 603 if (procs_[i]->shape()) {
+
+ 605 std::unique_ptr<TH1> copy(procs_[i]->ClonedScaledShape());
+
+ 607 prev_proc_rates[i] = procs_[i]->no_norm_rate();
+ 608 std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1,
"" , &(bins[0])));
+
+ 610 procs_[i]->set_shape(std::move(copy2),
true );
+ 611 scaled_procs[i] = procs_[i]->ClonedScaledShape();
+
+
+ 614 for (
unsigned i = 0; i < obs_.size(); ++i) {
+ 615 if (obs_[i]->shape()) {
+ 616 std::unique_ptr<TH1> copy(obs_[i]->ClonedScaledShape());
+ 617 std::unique_ptr<TH1> copy2(copy->Rebin(bins.size()-1,
"" , &(bins[0])));
+ 618 obs_[i]->set_shape(std::move(copy2),
true );
+
+
+ 621 for (
unsigned i = 0; i < systs_.size(); ++i) {
+ 622 TH1
const * proc_hist =
nullptr ;
+ 623 double prev_rate = 0.;
+ 624 for (
unsigned j = 0; j < procs_.size(); ++j) {
+
+ 626 proc_hist = scaled_procs[j].get();
+ 627 prev_rate = prev_proc_rates[j];
+
+
+ 630 if (systs_[i]->shape_u() && systs_[i]->shape_d()) {
+
+ 632 std::unique_ptr<TH1> copy_u(systs_[i]->ClonedShapeU());
+ 633 std::unique_ptr<TH1> copy_d(systs_[i]->ClonedShapeD());
+
+
+
+
+ 638 copy_u->Scale(systs_[i]->value_u() * prev_rate);
+ 639 copy_d->Scale(systs_[i]->value_d() * prev_rate);
+
+ 641 std::unique_ptr<TH1> copy2_u(
+ 642 copy_u->Rebin(bins.size() - 1,
"" , &(bins[0])));
+ 643 std::unique_ptr<TH1> copy2_d(
+ 644 copy_d->Rebin(bins.size() - 1,
"" , &(bins[0])));
+
+
+ 647 systs_[i]->set_shapes(std::move(copy2_u), std::move(copy2_d), proc_hist);
+
+
+
+
+
+ 653 for (
unsigned i = 0; i < procs_.size(); ++i) {
+ 654 std::set<std::string> binning_vars;
+ 655 if (procs_[i]->pdf()) {
+ 656 RooAbsData
const * data_obj = FindMatchingData(procs_[i].
get ());
+ 657 std::string var_name =
"CMS_th1x" ;
+ 658 if (data_obj) var_name = data_obj->get()->first()->GetName();
+ 659 binning_vars.insert(var_name);
+
+ 661 for (
auto & it : wspaces_) {
+ 662 for (
auto & var : binning_vars) {
+
+ 664 dynamic_cast< RooRealVar*
> (it.second->var(var.c_str()));
+ 665 if (avar) avar->setBins(nbins);
+
+
+
+
+
+
+
+ 673 double CombineHarvester::logKappaForX(
double x,
double k_low,
+ 674 double k_high)
const {
+ 675 if (k_high == 0. || k_low == 0.) {
+ 676 if (verbosity_ >= 1) {
+ 677 LOGLINE (log(),
"Have kappa=0.0 (scaling ill-defined), returning 1.0" );
+
+
+
+
+ 682 return (x >= 0 ? std::pow(k_high, x) : std::pow(k_low, -1.0 * x));
+
+
+
+
+
+
+
+
+ 691 double logKhi = std::log(k_high);
+ 692 double logKlo = -std::log(k_low);
+ 693 double avg = 0.5 * (logKhi + logKlo), halfdiff = 0.5 * (logKhi - logKlo);
+ 694 double twox = x + x, twox2 = twox * twox;
+ 695 double alpha = 0.125 * twox * (twox2 * (3 * twox2 - 10.) + 15.);
+ 696 double ret = avg + alpha * halfdiff;
+ 697 return std::exp(ret * x);
+
+
+
+ 701 std::vector<std::string>
const & patterns) {
+ 702 std::vector<boost::regex> rgx;
+ 703 for (
auto const & pt : patterns) rgx.emplace_back(pt);
+ 704 for (
auto it = params_.begin(); it != params_.end(); ++it) {
+ 705 std::string par = it->first;
+ 706 auto & groups = it->second->groups();
+ 707 if (groups.count(name))
continue ;
+
+
+
+
+
+
+
+ 715 std::vector<std::string>
const & patterns) {
+ 716 std::vector<boost::regex> rgx;
+ 717 for (
auto const & pt : patterns) rgx.emplace_back(pt);
+ 718 for (
auto it = params_.begin(); it != params_.end(); ++it) {
+ 719 std::string par = it->first;
+ 720 auto & groups = it->second->groups();
+ 721 if (!groups.count(name))
continue ;
+
+
+
+
+
+
+
+ 729 std::string
const & newname) {
+ 730 for (
auto it = params_.begin(); it != params_.end(); ++it) {
+ 731 auto & groups = it->second->groups();
+ 732 if (groups.count(oldname)) {
+ 733 groups.erase(oldname);
+ 734 groups.insert(newname);
+
+
+
+
+
+ 740 post_lines_.push_back(line);
+
+
+
+
+
+
+void ClearDatacardLinesAtEnd()
Clear all added datacard lines.
CombineHarvester & data()
bool contains_rgx(const std::vector< boost::regex > &r, T p)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
TH2F GetRateCovariance(RooFitResult const &fit, unsigned n_samples)
-void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
+void RenameGroup(std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group.
std::set< std::string > bin_set()
-
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
+void RemoveGroup(std::string const &name, std::vector< std::string > const &patterns)
Remove parameters to a given group.
bool MatchingProcess(T const &first, U const &second)
-ch::Parameter const * GetParameter(std::string const &name) const
+ch::Parameter const * GetParameter(std::string const &name) const
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-
+
TH1F GetShapeWithUncertainty()
-void RenameParameter(std::string const &oldname, std::string const &newname)
+void RenameParameter(std::string const &oldname, std::string const &newname)
-void VariableRebin(std::vector< double > bins)
+void VariableRebin(std::vector< double > bins)
+void AddDatacardLineAtEnd(std::string const &line)
Add a line of text at the end of all datacards.
-void SetPdfBins(unsigned nbins)
+void SetPdfBins(unsigned nbins)
-void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
-void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
+void SetGroup(std::string const &name, std::vector< std::string > const &patterns)
Add parameters to a given group.
+void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
TH2F GetRateCorrelation(RooFitResult const &fit, unsigned n_samples)
-std::vector< ch::Parameter > GetParameters() const
+std::vector< ch::Parameter > GetParameters() const
bool any_of(const Range &r, Predicate p)
std::string const & name() const
diff --git a/_combine_harvester___filters_8cc_source.html b/_combine_harvester___filters_8cc_source.html
index bf33c364b08..c7bbc75cf33 100644
--- a/_combine_harvester___filters_8cc_source.html
+++ b/_combine_harvester___filters_8cc_source.html
@@ -399,7 +399,7 @@
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
std::set< std::string > channel_set()
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
CombineHarvester & bin_id(std::vector< int > const &vec, bool cond=true)
std::set< int > bin_id_set()
@@ -412,22 +412,22 @@
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
void FilterContainingRgx(Input &in, Filter const &filter, Converter fn, bool cond)
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
-virtual std::string const attribute(std::string const &attr_label) const
+virtual std::string const attribute(std::string const &attr_label) const
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & attr(std::vector< std::string > const &vec, std::string attr_label, bool cond=true)
CombineHarvester & histograms()
virtual std::string const & bin() const
std::set< std::string > era_set()
virtual std::string const & era() const
-std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
+std::set< R > SetFromObs(T func)
Fill an std::set using only the Observation entries.
std::set< std::string > syst_type_set()
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
-bool GetFlag(std::string const &flag) const
+bool GetFlag(std::string const &flag) const
CombineHarvester & pdfs()
CombineHarvester & analysis(std::vector< std::string > const &vec, bool cond=true)
CombineHarvester & signals()
-std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
+std::set< R > SetFromSysts(T func)
Fill an std::set using only the Systematic entries.
std::string const & name() const
void erase_if(Range &r, Predicate p)
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
diff --git a/_combine_harvester___python_8cc_source.html b/_combine_harvester___python_8cc_source.html
index cef06897d30..95580dcb74d 100644
--- a/_combine_harvester___python_8cc_source.html
+++ b/_combine_harvester___python_8cc_source.html
@@ -404,168 +404,169 @@
302 .def(
"SetPdfBins" , &CombineHarvester::SetPdfBins)
303 .def(
"SetGroup" , &CombineHarvester::SetGroup)
304 .def(
"RemoveGroup" , &CombineHarvester::RemoveGroup)
- 305 .def(
"RenameGroup" , &CombineHarvester::RenameGroup)
-
- 307 .def(
"GetRate" , &CombineHarvester::GetRate)
- 308 .def(
"GetObservedRate" , &CombineHarvester::GetObservedRate)
-
-
- 311 .def(
"GetShape" , &CombineHarvester::GetShape)
-
-
- 314 .def(
"GetRateCovariance" , &CombineHarvester::GetRateCovariance)
- 315 .def(
"GetRateCorrelation" , &CombineHarvester::GetRateCorrelation)
- 316 .def(
"GetObservedShape" , &CombineHarvester::GetObservedShape)
-
- 318 .def(
"__AddObservations__" , &CombineHarvester::AddObservations)
- 319 .def(
"__AddProcesses__" , &CombineHarvester::AddProcesses)
- 320 .def(
"AddSystFromProc" , &CombineHarvester::AddSystFromProc)
- 321 .def(
"ExtractShapes" , &CombineHarvester::ExtractShapes)
-
- 323 .def(
"MergeBinErrors" , &CombineHarvester::MergeBinErrors)
- 324 .def(
"InsertObservation" , &CombineHarvester::InsertObservation)
- 325 .def(
"InsertProcess" , &CombineHarvester::InsertProcess)
- 326 .def(
"InsertSystematic" , &CombineHarvester::InsertSystematic)
- 327 .def(
"AddWorkspace" , &CombineHarvester::AddWorkspace)
- 328 .def(
"ExtractPdfs" , &CombineHarvester::ExtractPdfs)
-
-
- 331 py::class_<Object>(
"Object" )
- 332 .def(
"set_bin" , &Object::set_bin)
- 333 .def(
"bin" , &Object::bin,
- 334 py::return_value_policy<py::copy_const_reference>())
- 335 .def(
"set_process" , &Object::set_process)
- 336 .def(
"process" ,&Object::process,
- 337 py::return_value_policy<py::copy_const_reference>())
- 338 .def(
"set_analysis" , &Object::set_analysis)
- 339 .def(
"analysis" , &Object::analysis,
- 340 py::return_value_policy<py::copy_const_reference>())
- 341 .def(
"set_era" , &Object::set_era)
- 342 .def(
"era" , &Object::era,
- 343 py::return_value_policy<py::copy_const_reference>())
- 344 .def(
"set_channel" , &Object::set_channel)
- 345 .def(
"channel" , &Object::channel,
- 346 py::return_value_policy<py::copy_const_reference>())
- 347 .def(
"set_bin_id" , &Object::set_bin_id)
- 348 .def(
"bin_id" , &Object::bin_id)
- 349 .def(
"set_mass" , &Object::set_mass)
- 350 .def(
"mass" , &Object::mass,
- 351 py::return_value_policy<py::copy_const_reference>())
-
-
- 354 py::class_<Observation, py::bases<Object>>(
"Observation" )
- 355 .def(
"set_rate" , &Observation::set_rate)
- 356 .def(
"rate" , &Observation::rate)
-
- 358 .def(
"ShapeAsTH1F" , &Observation::ShapeAsTH1F)
- 359 .def(py::self_ns::str(py::self_ns::self))
-
-
- 362 py::class_<Process, py::bases<Object>>(
"Process" )
- 363 .def(
"set_rate" , &Process::set_rate)
- 364 .def(
"rate" , &Process::rate)
- 365 .def(
"no_norm_rate" , &Process::no_norm_rate)
-
- 367 .def(
"set_signal" , &Process::set_signal)
- 368 .def(
"signal" , &Process::signal)
- 369 .def(
"ShapeAsTH1F" , &Process::ShapeAsTH1F)
- 370 .def(py::self_ns::str(py::self_ns::self))
-
-
- 373 py::class_<Systematic, py::bases<Object>>(
"Systematic" )
- 374 .def(
"set_signal" , &Systematic::set_signal)
- 375 .def(
"signal" , &Systematic::signal)
- 376 .def(
"set_name" , &Systematic::set_name)
- 377 .def(
"name" , &Systematic::name,
- 378 py::return_value_policy<py::copy_const_reference>())
- 379 .def(
"set_type" , &Systematic::set_type)
- 380 .def(
"type" , &Systematic::type,
- 381 py::return_value_policy<py::copy_const_reference>())
- 382 .def(
"set_value_u" , &Systematic::set_value_u)
- 383 .def(
"value_u" , &Systematic::value_u)
- 384 .def(
"set_value_d" , &Systematic::set_value_d)
- 385 .def(
"value_d" , &Systematic::value_d)
- 386 .def(
"set_scale" , &Systematic::set_scale)
- 387 .def(
"scale" , &Systematic::scale)
- 388 .def(
"set_asymm" , &Systematic::set_asymm)
- 389 .def(
"asymm" , &Systematic::asymm)
-
- 391 .def(py::self_ns::str(py::self_ns::self))
-
-
- 394 py::class_<Parameter>(
"Parameter" )
-
- 396 .def(
"name" , &Parameter::name,
- 397 py::return_value_policy<py::copy_const_reference>())
- 398 .def(
"set_val" , &Parameter::set_val)
- 399 .def(
"val" , &Parameter::val)
- 400 .def(
"set_err_u" , &Parameter::set_err_u)
- 401 .def(
"err_u" , &Parameter::err_u)
- 402 .def(
"set_err_d" , &Parameter::set_err_d)
- 403 .def(
"err_d" , &Parameter::err_d)
- 404 .def(
"set_range_u" , &Parameter::set_range_u)
- 405 .def(
"range_u" , &Parameter::range_u)
- 406 .def(
"set_range_d" , &Parameter::set_range_d)
- 407 .def(
"set_range" , &Parameter::set_range)
- 408 .def(
"range_d" , &Parameter::range_d)
- 409 .def(
"set_frozen" , &Parameter::set_frozen)
- 410 .def(
"frozen" , &Parameter::frozen)
-
-
- 413 py::class_<CardWriter>(
"CardWriter" , py::init<std::string, std::string>())
- 414 .def(
"WriteCards" , &CardWriter::WriteCards)
- 415 .def(
"SetVerbosity" , &CardWriter::SetVerbosity,
- 416 py::return_internal_reference<>())
- 417 .def(
"CreateDirectories" , &CardWriter::CreateDirectories,
- 418 py::return_internal_reference<>())
- 419 .def(
"SetWildcardMasses" , &CardWriter::SetWildcardMasses,
- 420 py::return_internal_reference<>())
-
-
-
-
-
-
-
-
- 429 py::class_<BinByBinFactory>(
"BinByBinFactory" )
- 430 .def(
"MergeBinErrors" , &BinByBinFactory::MergeBinErrors)
- 431 .def(
"AddBinByBin" , &BinByBinFactory::AddBinByBin)
- 432 .def(
"MergeAndAdd" , &BinByBinFactory::MergeAndAdd)
- 433 .def(
"SetVerbosity" , &BinByBinFactory::SetVerbosity,
- 434 py::return_internal_reference<>())
- 435 .def(
"SetAddThreshold" , &BinByBinFactory::SetAddThreshold,
- 436 py::return_internal_reference<>())
- 437 .def(
"SetMergeThreshold" , &BinByBinFactory::SetMergeThreshold,
- 438 py::return_internal_reference<>())
- 439 .def(
"SetPattern" , &BinByBinFactory::SetPattern,
- 440 py::return_internal_reference<>())
- 441 .def(
"SetFixNorm" , &BinByBinFactory::SetFixNorm,
- 442 py::return_internal_reference<>())
- 443 .def(
"SetPoissonErrors" , &BinByBinFactory::SetPoissonErrors,
- 444 py::return_internal_reference<>())
-
-
- 447 py::class_<AutoRebin>(
"AutoRebin" )
- 448 .def(
"Rebin" , &AutoRebin::Rebin)
- 449 .def(
"SetVerbosity" , &AutoRebin::SetVerbosity,
- 450 py::return_internal_reference<>())
- 451 .def(
"SetBinThreshold" , &AutoRebin::SetBinThreshold,
- 452 py::return_internal_reference<>())
- 453 .def(
"SetBinUncertFraction" , &AutoRebin::SetBinUncertFraction,
- 454 py::return_internal_reference<>())
- 455 .def(
"SetPerformRebin" , &AutoRebin::SetPerformRebin,
- 456 py::return_internal_reference<>())
- 457 .def(
"SetRebinMode" , &AutoRebin::SetRebinMode,
- 458 py::return_internal_reference<>())
-
-
-
-
-
-
-
-
+ 305 .def(
"AddDatacardLineAtEnd" , &CombineHarvester::AddDatacardLineAtEnd)
+ 306 .def(
"ClearDatacardLinesAtEnd" , &CombineHarvester::ClearDatacardLinesAtEnd)
+
+ 308 .def(
"GetRate" , &CombineHarvester::GetRate)
+ 309 .def(
"GetObservedRate" , &CombineHarvester::GetObservedRate)
+
+
+ 312 .def(
"GetShape" , &CombineHarvester::GetShape)
+
+
+ 315 .def(
"GetRateCovariance" , &CombineHarvester::GetRateCovariance)
+ 316 .def(
"GetRateCorrelation" , &CombineHarvester::GetRateCorrelation)
+ 317 .def(
"GetObservedShape" , &CombineHarvester::GetObservedShape)
+
+ 319 .def(
"__AddObservations__" , &CombineHarvester::AddObservations)
+ 320 .def(
"__AddProcesses__" , &CombineHarvester::AddProcesses)
+ 321 .def(
"AddSystFromProc" , &CombineHarvester::AddSystFromProc)
+ 322 .def(
"ExtractShapes" , &CombineHarvester::ExtractShapes)
+
+ 324 .def(
"MergeBinErrors" , &CombineHarvester::MergeBinErrors)
+ 325 .def(
"InsertObservation" , &CombineHarvester::InsertObservation)
+ 326 .def(
"InsertProcess" , &CombineHarvester::InsertProcess)
+ 327 .def(
"InsertSystematic" , &CombineHarvester::InsertSystematic)
+ 328 .def(
"AddWorkspace" , &CombineHarvester::AddWorkspace)
+ 329 .def(
"ExtractPdfs" , &CombineHarvester::ExtractPdfs)
+
+
+ 332 py::class_<Object>(
"Object" )
+ 333 .def(
"set_bin" , &Object::set_bin)
+ 334 .def(
"bin" , &Object::bin,
+ 335 py::return_value_policy<py::copy_const_reference>())
+ 336 .def(
"set_process" , &Object::set_process)
+ 337 .def(
"process" ,&Object::process,
+ 338 py::return_value_policy<py::copy_const_reference>())
+ 339 .def(
"set_analysis" , &Object::set_analysis)
+ 340 .def(
"analysis" , &Object::analysis,
+ 341 py::return_value_policy<py::copy_const_reference>())
+ 342 .def(
"set_era" , &Object::set_era)
+ 343 .def(
"era" , &Object::era,
+ 344 py::return_value_policy<py::copy_const_reference>())
+ 345 .def(
"set_channel" , &Object::set_channel)
+ 346 .def(
"channel" , &Object::channel,
+ 347 py::return_value_policy<py::copy_const_reference>())
+ 348 .def(
"set_bin_id" , &Object::set_bin_id)
+ 349 .def(
"bin_id" , &Object::bin_id)
+ 350 .def(
"set_mass" , &Object::set_mass)
+ 351 .def(
"mass" , &Object::mass,
+ 352 py::return_value_policy<py::copy_const_reference>())
+
+
+ 355 py::class_<Observation, py::bases<Object>>(
"Observation" )
+ 356 .def(
"set_rate" , &Observation::set_rate)
+ 357 .def(
"rate" , &Observation::rate)
+
+ 359 .def(
"ShapeAsTH1F" , &Observation::ShapeAsTH1F)
+ 360 .def(py::self_ns::str(py::self_ns::self))
+
+
+ 363 py::class_<Process, py::bases<Object>>(
"Process" )
+ 364 .def(
"set_rate" , &Process::set_rate)
+ 365 .def(
"rate" , &Process::rate)
+ 366 .def(
"no_norm_rate" , &Process::no_norm_rate)
+
+ 368 .def(
"set_signal" , &Process::set_signal)
+ 369 .def(
"signal" , &Process::signal)
+ 370 .def(
"ShapeAsTH1F" , &Process::ShapeAsTH1F)
+ 371 .def(py::self_ns::str(py::self_ns::self))
+
+
+ 374 py::class_<Systematic, py::bases<Object>>(
"Systematic" )
+ 375 .def(
"set_signal" , &Systematic::set_signal)
+ 376 .def(
"signal" , &Systematic::signal)
+ 377 .def(
"set_name" , &Systematic::set_name)
+ 378 .def(
"name" , &Systematic::name,
+ 379 py::return_value_policy<py::copy_const_reference>())
+ 380 .def(
"set_type" , &Systematic::set_type)
+ 381 .def(
"type" , &Systematic::type,
+ 382 py::return_value_policy<py::copy_const_reference>())
+ 383 .def(
"set_value_u" , &Systematic::set_value_u)
+ 384 .def(
"value_u" , &Systematic::value_u)
+ 385 .def(
"set_value_d" , &Systematic::set_value_d)
+ 386 .def(
"value_d" , &Systematic::value_d)
+ 387 .def(
"set_scale" , &Systematic::set_scale)
+ 388 .def(
"scale" , &Systematic::scale)
+ 389 .def(
"set_asymm" , &Systematic::set_asymm)
+ 390 .def(
"asymm" , &Systematic::asymm)
+
+ 392 .def(py::self_ns::str(py::self_ns::self))
+
+
+ 395 py::class_<Parameter>(
"Parameter" )
+
+ 397 .def(
"name" , &Parameter::name,
+ 398 py::return_value_policy<py::copy_const_reference>())
+ 399 .def(
"set_val" , &Parameter::set_val)
+ 400 .def(
"val" , &Parameter::val)
+ 401 .def(
"set_err_u" , &Parameter::set_err_u)
+ 402 .def(
"err_u" , &Parameter::err_u)
+ 403 .def(
"set_err_d" , &Parameter::set_err_d)
+ 404 .def(
"err_d" , &Parameter::err_d)
+ 405 .def(
"set_range_u" , &Parameter::set_range_u)
+ 406 .def(
"range_u" , &Parameter::range_u)
+ 407 .def(
"set_range_d" , &Parameter::set_range_d)
+ 408 .def(
"set_range" , &Parameter::set_range)
+ 409 .def(
"range_d" , &Parameter::range_d)
+ 410 .def(
"set_frozen" , &Parameter::set_frozen)
+ 411 .def(
"frozen" , &Parameter::frozen)
+
+
+ 414 py::class_<CardWriter>(
"CardWriter" , py::init<std::string, std::string>())
+ 415 .def(
"WriteCards" , &CardWriter::WriteCards)
+ 416 .def(
"SetVerbosity" , &CardWriter::SetVerbosity,
+ 417 py::return_internal_reference<>())
+ 418 .def(
"CreateDirectories" , &CardWriter::CreateDirectories,
+ 419 py::return_internal_reference<>())
+ 420 .def(
"SetWildcardMasses" , &CardWriter::SetWildcardMasses,
+ 421 py::return_internal_reference<>())
+
+
+
+
+
+
+
+
+ 430 py::class_<BinByBinFactory>(
"BinByBinFactory" )
+ 431 .def(
"MergeBinErrors" , &BinByBinFactory::MergeBinErrors)
+ 432 .def(
"AddBinByBin" , &BinByBinFactory::AddBinByBin)
+ 433 .def(
"MergeAndAdd" , &BinByBinFactory::MergeAndAdd)
+ 434 .def(
"SetVerbosity" , &BinByBinFactory::SetVerbosity,
+ 435 py::return_internal_reference<>())
+ 436 .def(
"SetAddThreshold" , &BinByBinFactory::SetAddThreshold,
+ 437 py::return_internal_reference<>())
+ 438 .def(
"SetMergeThreshold" , &BinByBinFactory::SetMergeThreshold,
+ 439 py::return_internal_reference<>())
+ 440 .def(
"SetPattern" , &BinByBinFactory::SetPattern,
+ 441 py::return_internal_reference<>())
+ 442 .def(
"SetFixNorm" , &BinByBinFactory::SetFixNorm,
+ 443 py::return_internal_reference<>())
+ 444 .def(
"SetPoissonErrors" , &BinByBinFactory::SetPoissonErrors,
+ 445 py::return_internal_reference<>())
+
+
+ 448 py::class_<AutoRebin>(
"AutoRebin" )
+ 449 .def(
"Rebin" , &AutoRebin::Rebin)
+ 450 .def(
"SetVerbosity" , &AutoRebin::SetVerbosity,
+ 451 py::return_internal_reference<>())
+ 452 .def(
"SetBinThreshold" , &AutoRebin::SetBinThreshold,
+ 453 py::return_internal_reference<>())
+ 454 .def(
"SetBinUncertFraction" , &AutoRebin::SetBinUncertFraction,
+ 455 py::return_internal_reference<>())
+ 456 .def(
"SetPerformRebin" , &AutoRebin::SetPerformRebin,
+ 457 py::return_internal_reference<>())
+ 458 .def(
"SetRebinMode" , &AutoRebin::SetRebinMode,
+ 459 py::return_internal_reference<>())
+
+
+
+
+
+
+
+
void FilterObsPy(ch::CombineHarvester &cb, boost::python::object func)
void(Systematic::* Overload_Syst_set_shapes)(TH1 const &, TH1 const &, TH1 const &)
void CloneProcsAndSystsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func)
@@ -579,7 +580,7 @@
void SplitSyst(ch::CombineHarvester &cb, std::string const &syst_in, std::string const &split1, std::string const &split2, double val1, double val2)
Replace all instances of an existing systematic with two copies having modified values.
void ForEachSystPy(ch::CombineHarvester &cb, boost::python::object func)
void CloneSysts(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate Systematic objects in one instance, which are then modified by a user-supplied function...
-void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
TH1F(CombineHarvester::* Overload1_GetShapeWithUncertainty)(void)
Convert a C++ map to a python dict.
Convert a C++ set to a python list.
@@ -589,9 +590,9 @@
Covert a C++ ROOT type to a PyROOT type.
-CombineHarvester & FilterProcs(Function func)
+CombineHarvester & FilterProcs(Function func)
Automates the writing of datacards into directory structures.
-std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
+std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
@@ -603,16 +604,16 @@
void FilterAllPy(ch::CombineHarvester &cb, boost::python::object func)
void(Process::* Overload_Proc_set_shape)(TH1 const &, bool)
void ForEachObsPy(ch::CombineHarvester &cb, boost::python::object func)
-void ForEachProc(Function func)
+void ForEachProc(Function func)
void(CombineHarvester::* Overload2_WriteDatacard)(std::string const &)
-CombineHarvester & FilterAll(Function func)
+CombineHarvester & FilterAll(Function func)
-std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
+std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
void CloneProcsAndSysts(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate the Process and Systematic objects in one instance, which are then modified by a user-suppl...
-CombineHarvester & FilterObs(Function func)
+CombineHarvester & FilterObs(Function func)
TH1F(CombineHarvester::* Overload2_GetShapeWithUncertainty)(RooFitResult const &, unsigned)
void ForEachProcPy(ch::CombineHarvester &cb, boost::python::object func)
int(CombineHarvester::* Overload2_ParseDatacard)(std::string const &, std::string)
@@ -624,15 +625,15 @@
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
double(CombineHarvester::* Overload2_GetUncertainty)(RooFitResult const &, unsigned)
-void ForEachObj(Function func)
-void ForEachSyst(Function func)
+void ForEachObj(Function func)
+void ForEachSyst(Function func)
void CloneObsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func)
void ForEachObjPy(ch::CombineHarvester &cb, boost::python::object func)
-CombineHarvester & FilterSysts(Function func)
-void ForEachObs(Function func)
+CombineHarvester & FilterSysts(Function func)
+void ForEachObs(Function func)
ch::Parameter *(CombineHarvester::* Overload1_GetParameter)(std::string const &name)
-
+
void(Observation::* Overload_Obs_set_shape)(TH1 const &, bool)
void(CombineHarvester::* Overload1_UpdateParameters)(RooFitResult const &)
diff --git a/_copy_tools_8cc_source.html b/_copy_tools_8cc_source.html
index 36dcb285230..3d15abd6fa3 100644
--- a/_copy_tools_8cc_source.html
+++ b/_copy_tools_8cc_source.html
@@ -124,7 +124,7 @@
void set_name(std::string const &name)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
void SplitSyst(ch::CombineHarvester &cb, std::string const &syst_in, std::string const &split1, std::string const &split2, double val1, double val2)
Replace all instances of an existing systematic with two copies having modified values.
void CloneSysts(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate Systematic objects in one instance, which are then modified by a user-supplied function...
diff --git a/_copy_tools_8h_source.html b/_copy_tools_8h_source.html
index 92ce4b54483..d8652c08138 100644
--- a/_copy_tools_8h_source.html
+++ b/_copy_tools_8h_source.html
@@ -162,15 +162,15 @@
void InsertProcess(ch::Process const &proc)
-void ForEachProc(Function func)
+void ForEachProc(Function func)
void InsertObservation(ch::Observation const &obs)
void CloneProcsAndSysts(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate the Process and Systematic objects in one instance, which are then modified by a user-suppl...
void CloneProcs(ch::CombineHarvester &src, ch::CombineHarvester &dest, Function func)
Duplicate Process objects in one instance, which are then modified by a user-supplied function...
-void ForEachSyst(Function func)
-void ForEachObs(Function func)
-
+void ForEachSyst(Function func)
+void ForEachObs(Function func)
+
diff --git a/_hhh_systematics_8cc_source.html b/_hhh_systematics_8cc_source.html
index 5cce725b663..6524229bf0d 100644
--- a/_hhh_systematics_8cc_source.html
+++ b/_hhh_systematics_8cc_source.html
@@ -412,7 +412,7 @@
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
@@ -423,7 +423,7 @@
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
CombineHarvester & signals()
void AddSystematics_hhh_tt(CombineHarvester &cb, CombineHarvester src)
@@ -431,7 +431,7 @@
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
void AddSystematics_hhh_et_mt(CombineHarvester &cb, CombineHarvester src)
diff --git a/_htt_systematics___m_s_s_m_legacy_8cc_source.html b/_htt_systematics___m_s_s_m_legacy_8cc_source.html
index 91b1c029a75..e8e05328e91 100644
--- a/_htt_systematics___m_s_s_m_legacy_8cc_source.html
+++ b/_htt_systematics___m_s_s_m_legacy_8cc_source.html
@@ -267,25 +267,25 @@
void AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
virtual std::string const & process() const
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
CombineHarvester & signals()
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
diff --git a/_htt_systematics___m_s_s_m_update_8cc_source.html b/_htt_systematics___m_s_s_m_update_8cc_source.html
index ec99f88b5d3..f55511317e0 100644
--- a/_htt_systematics___m_s_s_m_update_8cc_source.html
+++ b/_htt_systematics___m_s_s_m_update_8cc_source.html
@@ -835,7 +835,7 @@
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
@@ -843,21 +843,21 @@
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
void AddMSSMUpdateSystematics_mm(CombineHarvester &cb, CombineHarvester src)
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
void AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)
virtual std::string const & process() const
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
void AddMSSMUpdateSystematics_tt(CombineHarvester &cb, CombineHarvester src)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
CombineHarvester & signals()
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
void AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)
diff --git a/_htt_systematics___s_m_legacy_8cc_source.html b/_htt_systematics___s_m_legacy_8cc_source.html
index 7fe169207dc..6cdcac8e0ef 100644
--- a/_htt_systematics___s_m_legacy_8cc_source.html
+++ b/_htt_systematics___s_m_legacy_8cc_source.html
@@ -1091,7 +1091,7 @@
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
void AddSystematics_tt(CombineHarvester &cb)
@@ -1107,7 +1107,7 @@
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
void AddSystematics_ee_mm(CombineHarvester &cb)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
void AddSystematics_em(CombineHarvester &cb)
CombineHarvester & process_rgx(std::vector< std::string > const &vec, bool cond=true)
@@ -1116,7 +1116,7 @@
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
-void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
+void AddSyst(CombineHarvester &target, std::string const &name, std::string const &type, Map const &valmap)
diff --git a/_m_s_s_m_yield_table_8cpp_source.html b/_m_s_s_m_yield_table_8cpp_source.html
index 62bc1c15b6b..2e560375db7 100644
--- a/_m_s_s_m_yield_table_8cpp_source.html
+++ b/_m_s_s_m_yield_table_8cpp_source.html
@@ -411,7 +411,7 @@
int main(int argc, char *argv[])
BkgInfo(string const &l, vector< string > const &p)
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
int ParseDatacard(std::string const &filename, std::string const &analysis, std::string const &era, std::string const &channel, int bin_id, std::string const &mass)
@@ -422,19 +422,19 @@
vector< string > cats_str
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-void set_rate(double const &rate)
+void set_rate(double const &rate)
-
-void ForEachProc(Function func)
+
+void ForEachProc(Function func)
-void ForEachObj(Function func)
+void ForEachObj(Function func)
-void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
-
+void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
+
-
+
CombineHarvester & signals()
CombineHarvester & channel(std::vector< std::string > const &vec, bool cond=true)
diff --git a/_morph_functions_8cc_source.html b/_morph_functions_8cc_source.html
index cd483cdc280..21dc53d25d1 100644
--- a/_morph_functions_8cc_source.html
+++ b/_morph_functions_8cc_source.html
@@ -776,16 +776,16 @@
void BuildRooMorphing(RooWorkspace &ws, CombineHarvester &cb, std::string const &bin, std::string const &process, RooAbsReal &mass_var, std::string norm_postfix, bool allow_morph, bool verbose, bool force_template_limit=false, TFile *file=nullptr)
[part1]
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
void MakeMorphDebugPlots(RooMorphingPdf *pdf, RooAbsReal *mass, std::vector< double > const &masses, TFile *f, TH1 *ref_bins=nullptr)
virtual void set_mass(std::string const &mass)
CombineHarvester & syst_type(std::vector< std::string > const &vec, bool cond=true)
std::string const & type() const
-
+
-std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
-void set_rate(double const &rate)
-CombineHarvester & FilterProcs(Function func)
+std::set< R > SetFromProcs(T func)
Fill an std::set using only the Process entries.
+void set_rate(double const &rate)
+CombineHarvester & FilterProcs(Function func)
virtual std::string const & process() const
@@ -794,20 +794,20 @@
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
TH1F RebinHist(TH1F const &hist)
-void ForEachProc(Function func)
+void ForEachProc(Function func)
CombineHarvester & mass(std::vector< std::string > const &vec, bool cond=true)
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< T > Set2Vec(std::set< T > const &in)
virtual std::string const & bin() const
-void ForEachSyst(Function func)
-CombineHarvester & FilterSysts(Function func)
-
+void ForEachSyst(Function func)
+CombineHarvester & FilterSysts(Function func)
+
std::string const & name() const
-void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
+void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
diff --git a/_object_8h_source.html b/_object_8h_source.html
index 56af09e0f71..127991e8c2f 100644
--- a/_object_8h_source.html
+++ b/_object_8h_source.html
@@ -141,26 +141,28 @@
40 virtual void set_attribute (std::string
const & attr_label, std::string
const & attr_value);
41 virtual void delete_attribute (std::string
const & attr_label) { attributes_.erase(attr_label); }
- 42 virtual std::map<std::string,std::string>
const &
all_attributes ()
const {
return attributes_;}
- 43 virtual std::string
const attribute (std::string
const & attr_label)
const {
return attributes_.count(attr_label) >0 ? attributes_.at(attr_label) :
"" ; }
-
-
-
-
-
- 49 std::string analysis_;
-
-
-
-
- 54 std::map<std::string,std::string> attributes_;
-
-
-
-
-
+ 42 virtual void set_all_attributes (std::map<std::string,std::string>
const & attrs_) { attributes_ = attrs_;}
+ 43 virtual std::map<std::string,std::string>
const &
all_attributes ()
const {
return attributes_;}
+ 44 virtual std::string
const attribute (std::string
const & attr_label)
const {
return attributes_.count(attr_label) >0 ? attributes_.at(attr_label) :
"" ; }
+
+
+
+
+
+ 50 std::string analysis_;
+
+
+
+
+ 55 std::map<std::string,std::string> attributes_;
+
+
+
+
+
virtual std::string const & analysis() const
friend void swap(Object &first, Object &second)
+virtual void set_all_attributes(std::map< std::string, std::string > const &attrs_)
void set_signal(bool const &signal)
virtual void set_bin_id(int const &bin_id)
virtual void set_process(std::string const &process)
@@ -175,14 +177,14 @@
Object & operator=(Object other)
virtual std::string const & mass() const
virtual void set_bin(std::string const &bin)
-virtual std::string const attribute(std::string const &attr_label) const
+virtual std::string const attribute(std::string const &attr_label) const
virtual std::string const & bin() const
virtual std::string const & era() const
virtual void delete_attribute(std::string const &attr_label)
-virtual std::map< std::string, std::string > const & all_attributes() const
+virtual std::map< std::string, std::string > const & all_attributes() const
virtual void set_era(std::string const &era)
diff --git a/_parse_combine_workspace_8cc.html b/_parse_combine_workspace_8cc.html
index 1185ea1779d..d0d57af2f90 100644
--- a/_parse_combine_workspace_8cc.html
+++ b/_parse_combine_workspace_8cc.html
@@ -104,6 +104,7 @@
#include "CombineHarvester/CombineTools/interface/ParseCombineWorkspace.h "
+
#include "HiggsAnalysis/CombinedLimit/interface/CMSHistErrorPropagator.h"
#include <iostream>
#include <string>
#include <vector>
@@ -112,6 +113,7 @@
#include "RooCategory.h"
#include "RooAddPdf.h"
#include "RooProdPdf.h"
+
#include "RooRealSumPdf.h"
#include "RooStats/ModelConfig.h"
#include "CombineHarvester/CombineTools/interface/Logging.h "
@@ -128,8 +130,8 @@
void ch::ParseCombineWorkspace (CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-
RooAddPdf * ch::FindAddPdf (RooAbsPdf *input)
-
+
RooAbsReal * ch::FindAddPdf (RooAbsReal *input)
+
diff --git a/_parse_combine_workspace_8cc.js b/_parse_combine_workspace_8cc.js
index d1941a2c7f9..de62b68c6f1 100644
--- a/_parse_combine_workspace_8cc.js
+++ b/_parse_combine_workspace_8cc.js
@@ -2,5 +2,5 @@ var _parse_combine_workspace_8cc =
[
[ "ParseCombineWorkspacePy", "_parse_combine_workspace_8cc.html#af7bcceb32c2f4a82fe1de32a93d0dfa3", null ],
[ "ParseCombineWorkspace", "_parse_combine_workspace_8cc.html#a5ae8a88e9e0d2120deec06e553a525f6", null ],
- [ "FindAddPdf", "_parse_combine_workspace_8cc.html#a0d8871a3c13b62ac6fefeb9a87b5e44a", null ]
+ [ "FindAddPdf", "_parse_combine_workspace_8cc.html#a5a4aae941cd175bf6764ad6789b4df8c", null ]
];
\ No newline at end of file
diff --git a/_parse_combine_workspace_8cc_source.html b/_parse_combine_workspace_8cc_source.html
index fc992c93ada..bf7739e811e 100644
--- a/_parse_combine_workspace_8cc_source.html
+++ b/_parse_combine_workspace_8cc_source.html
@@ -101,131 +101,163 @@
Go to the documentation of this file.
-
-
-
-
5 #include "RooWorkspace.h"
-
6 #include "RooSimultaneous.h"
-
7 #include "RooCategory.h"
-
-
9 #include "RooProdPdf.h"
-
10 #include "RooStats/ModelConfig.h"
-
-
-
-
-
15 std::string
const & modelcfg,
-
16 std::string
const & data,
bool verbose) {
-
-
-
-
-
21 std::string
const & modelcfg_name,
-
22 std::string
const & data_name,
bool verbose) {
-
-
-
25 RooStats::ModelConfig* cfg =
-
26 dynamic_cast< RooStats::ModelConfig*
> (ws.genobj(modelcfg_name.c_str()));
-
-
28 throw std::runtime_error(
-
29 FNERROR (
"Could not get ModelConfig from workspace" ));
-
-
31 RooSimultaneous* pdf =
dynamic_cast< RooSimultaneous*
> (cfg->GetPdf());
-
-
33 throw std::runtime_error(
FNERROR (
"PDF is not a RooSimultaneous" ));
-
-
-
36 std::vector<std::string> cats;
+
2 #include "HiggsAnalysis/CombinedLimit/interface/CMSHistErrorPropagator.h"
+
+
+
+
6 #include "RooWorkspace.h"
+
7 #include "RooSimultaneous.h"
+
8 #include "RooCategory.h"
+
+
10 #include "RooProdPdf.h"
+
11 #include "RooRealSumPdf.h"
+
12 #include "RooStats/ModelConfig.h"
+
+
+
+
+
17 std::string
const & modelcfg,
+
18 std::string
const & data,
bool verbose) {
+
+
+
+
+
23 std::string
const & modelcfg_name,
+
24 std::string
const & data_name,
bool verbose) {
+
+
+
27 RooStats::ModelConfig* cfg =
+
28 dynamic_cast< RooStats::ModelConfig*
> (ws.genobj(modelcfg_name.c_str()));
+
+
30 throw std::runtime_error(
+
31 FNERROR (
"Could not get ModelConfig from workspace" ));
+
+
33 RooSimultaneous* pdf =
dynamic_cast< RooSimultaneous*
> (cfg->GetPdf());
+
+
35 throw std::runtime_error(
FNERROR (
"PDF is not a RooSimultaneous" ));
+
-
-
-
-
-
-
-
44 std::map<std::string, std::vector<ProcInfo>> proc_infos;
-
-
46 RooAbsData *data = ws.data(data_name.c_str());
-
-
48 std::unique_ptr<TList> split(data->split(RooCategory(
"CMS_channel" ,
"" )));
-
49 for (
int i = 0; i < split->GetSize(); ++i) {
-
50 RooAbsData *idat =
dynamic_cast< RooAbsData*
> (split->At(i));
-
51 cats.push_back(idat->GetName());
-
52 FNLOGC (std::cout, v) <<
"Found data for category: " << cats.back() <<
"\n" ;
-
-
-
-
-
-
-
59 RooAddPdf *ipdf =
FindAddPdf (pdf->getPdf(cats.back().c_str()));
-
-
61 FNLOGC (std::cout, v) <<
"Found RooAddPdf: " << ipdf->GetName() <<
"\n" ;
-
62 RooArgList
const & coeffs = ipdf->coefList();
-
63 RooArgList
const & pdfs = ipdf->pdfList();
-
64 if (coeffs.getSize() != pdfs.getSize()) {
-
65 throw std::runtime_error(
FNERROR (
"This RooAddPdf is not extended!" ));
-
-
67 for (
int j = 0; j < coeffs.getSize(); ++j) {
-
68 RooAbsReal *jcoeff =
dynamic_cast< RooAbsReal*
> (coeffs.at(j));
-
69 RooAbsPdf *jpdf =
dynamic_cast< RooAbsPdf*
> (pdfs.at(j));
-
70 FNLOGC (std::cout, v) <<
"Component " << j <<
"\t" << jcoeff->GetName()
-
71 <<
"\t" << jpdf->GetName() <<
"\n" ;
-
-
-
-
-
76 proc.
set_process (jpdf->getStringAttribute(
"combine.process" ));
-
-
78 proc.
set_signal (jpdf->getAttribute(
"combine.signal" ));
-
79 proc_infos[proc.
bin ()].push_back(
-
80 {proc.
bin (), proc.
process (), jpdf->GetName(), jcoeff->GetName()});
-
-
-
-
-
-
-
-
-
-
-
91 auto cb_bin = cb.
cp ().
bin ({b});
-
92 for (
auto const & pinfo: proc_infos[b]) {
-
93 cb_bin.
cp ().
process ({pinfo.proc}).ExtractPdfs(
-
94 cb, ws.GetName(), pinfo.pdf, pinfo.norm);
-
-
-
-
-
-
100 RooAddPdf *as_add =
dynamic_cast< RooAddPdf*
> (input);
-
101 if (as_add)
return as_add;
-
102 RooProdPdf *as_prod =
dynamic_cast< RooProdPdf*
> (input);
-
-
104 RooArgList
const & comps = as_prod->pdfList();
-
105 for (
int i = 0; i < comps.getSize(); ++i) {
-
106 RooAddPdf* try_add =
FindAddPdf (dynamic_cast<RooAbsPdf*>(comps.at(i)));
-
107 if (try_add)
return try_add;
-
-
-
-
-
+
38 std::vector<std::string> cats;
+
+
+
+
+
+
+
+
46 std::map<std::string, std::vector<ProcInfo>> proc_infos;
+
+
48 RooAbsData *data = ws.data(data_name.c_str());
+
+
50 std::unique_ptr<TList> split(data->split(RooCategory(
"CMS_channel" ,
"" )));
+
51 for (
int i = 0; i < split->GetSize(); ++i) {
+
52 RooAbsData *idat =
dynamic_cast< RooAbsData*
> (split->At(i));
+
53 cats.push_back(idat->GetName());
+
54 FNLOGC (std::cout, v) <<
"Found data for category: " << cats.back() <<
"\n" ;
+
+
+
+
+
+
60 bool delete_pdfs =
false ;
+
+
62 RooAbsReal *ipdf =
FindAddPdf (pdf->getPdf(cats.back().c_str()));
+
+
64 std::unique_ptr<RooArgSet> pdf_obs(ipdf->getObservables(data->get()));
+
65 idat = idat->reduce(*pdf_obs);
+
+
67 RooAddPdf *ipdf_add =
dynamic_cast< RooAddPdf*
> (ipdf);
+
68 RooRealSumPdf *ipdf_sum =
dynamic_cast< RooRealSumPdf*
> (ipdf);
+
69 RooArgList
const * coeffs =
nullptr ;
+
70 RooArgList
const * pdfs =
nullptr ;
+
+
72 FNLOGC (std::cout, v) <<
"Found RooAddPdf: " << ipdf_add->GetName() <<
"\n" ;
+
73 coeffs = &(ipdf_add->coefList());
+
74 pdfs = &(ipdf_add->pdfList());
+
75 if (coeffs->getSize() != pdfs->getSize()) {
+
76 throw std::runtime_error(
FNERROR (
"This RooAddPdf is not extended!" ));
+
+
+
+
80 FNLOGC (std::cout, v) <<
"Found RooRealSumPdf: " << ipdf_sum->GetName() <<
"\n" ;
+
81 coeffs = &(ipdf_sum->coefList());
+
82 pdfs = &(ipdf_sum->funcList());
+
83 if (coeffs->getSize() != pdfs->getSize()) {
+
84 throw std::runtime_error(
FNERROR (
"This RooRealSumPdf is not extended!" ));
+
+
86 if (pdfs->getSize() == 1) {
+
87 CMSHistErrorPropagator *err =
dynamic_cast< CMSHistErrorPropagator*
> (pdfs->at(0));
+
+
89 coeffs = &(err->coefList());
+
90 pdfs =
new RooArgList(err->wrapperList());
+
+
+
+
+
95 for (
int j = 0; j < coeffs->getSize(); ++j) {
+
96 RooAbsReal *jcoeff =
dynamic_cast< RooAbsReal*
> (coeffs->at(j));
+
97 RooAbsReal *jpdf =
dynamic_cast< RooAbsReal*
> (pdfs->at(j));
+
98 FNLOGC (std::cout, v) <<
"Component " << j <<
"\t" << jcoeff->GetName()
+
99 <<
"\t" << jpdf->GetName() <<
"\n" ;
+
+
+
+
+
104 proc.
set_process (jpdf->getStringAttribute(
"combine.process" ));
+
+
106 proc.
set_signal (jpdf->getAttribute(
"combine.signal" ));
+
107 proc_infos[proc.
bin ()].push_back(
+
108 {proc.
bin (), proc.
process (), jpdf->GetName(), jcoeff->GetName()});
+
+
+
111 if (delete_pdfs)
delete pdfs;
+
+
+
+
+
+
+
+
+
120 auto cb_bin = cb.
cp ().
bin ({b});
+
121 for (
auto const & pinfo: proc_infos[b]) {
+
122 cb_bin.
cp ().
process ({pinfo.proc}).ExtractPdfs(
+
123 cb, ws.GetName(), pinfo.pdf, pinfo.norm);
+
+
+
+
+
+
129 RooAddPdf *as_add =
dynamic_cast< RooAddPdf*
> (input);
+
130 RooRealSumPdf *as_sum =
dynamic_cast< RooRealSumPdf*
> (input);
+
131 if (as_add)
return as_add;
+
132 if (as_sum)
return as_sum;
+
133 RooProdPdf *as_prod =
dynamic_cast< RooProdPdf*
> (input);
+
+
135 RooArgList
const & comps = as_prod->pdfList();
+
136 for (
int i = 0; i < comps.getSize(); ++i) {
+
137 RooAbsReal* try_add =
FindAddPdf (dynamic_cast<RooAbsReal*>(comps.at(i)));
+
138 if (try_add)
return try_add;
+
+
+
+
+
void ExtractData(std::string const &ws_name, std::string const &rule)
void set_signal(bool const &signal)
virtual void set_process(std::string const &process)
-
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-
void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+
CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+
void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
std::set< std::string > bin_set()
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
void InsertProcess(ch::Process const &proc)
-
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-
void set_rate(double const &rate)
+
void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+
void set_rate(double const &rate)
void AddWorkspace(RooWorkspace const &ws, bool can_rename=false)
virtual std::string const & process() const
+
RooAbsReal * FindAddPdf(RooAbsReal *input)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
void InsertObservation(ch::Observation const &obs)
@@ -234,8 +266,7 @@
virtual std::string const & bin() const
-
RooAddPdf * FindAddPdf(RooAbsPdf *input)
-
+
diff --git a/_parse_combine_workspace_8h.html b/_parse_combine_workspace_8h.html
index 102c49a88ac..d90bb482458 100644
--- a/_parse_combine_workspace_8h.html
+++ b/_parse_combine_workspace_8h.html
@@ -120,8 +120,8 @@
void ch::ParseCombineWorkspacePy (CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-RooAddPdf * ch::FindAddPdf (RooAbsPdf *input)
-
+RooAbsReal * ch::FindAddPdf (RooAbsReal *input)
+
diff --git a/_parse_combine_workspace_8h.js b/_parse_combine_workspace_8h.js
index 6fbae6c3971..fd4b33742ab 100644
--- a/_parse_combine_workspace_8h.js
+++ b/_parse_combine_workspace_8h.js
@@ -2,5 +2,5 @@ var _parse_combine_workspace_8h =
[
[ "ParseCombineWorkspace", "_parse_combine_workspace_8h.html#a5ae8a88e9e0d2120deec06e553a525f6", null ],
[ "ParseCombineWorkspacePy", "_parse_combine_workspace_8h.html#af7bcceb32c2f4a82fe1de32a93d0dfa3", null ],
- [ "FindAddPdf", "_parse_combine_workspace_8h.html#a0d8871a3c13b62ac6fefeb9a87b5e44a", null ]
+ [ "FindAddPdf", "_parse_combine_workspace_8h.html#a5a4aae941cd175bf6764ad6789b4df8c", null ]
];
\ No newline at end of file
diff --git a/_parse_combine_workspace_8h_source.html b/_parse_combine_workspace_8h_source.html
index 4637d4ef8eb..8a49a1b4777 100644
--- a/_parse_combine_workspace_8h_source.html
+++ b/_parse_combine_workspace_8h_source.html
@@ -118,14 +118,14 @@
16 std::string
const & modelcfg,
17 std::string
const & data,
bool verbose =
false );
-
+
-void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+void ParseCombineWorkspacePy(CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+void ParseCombineWorkspace(CombineHarvester &cb, RooWorkspace &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
+RooAbsReal * FindAddPdf(RooAbsReal *input)
-RooAddPdf * FindAddPdf(RooAbsPdf *input)
diff --git a/_post_fit_shapes_8cpp_source.html b/_post_fit_shapes_8cpp_source.html
index 41bf4b2922f..7f876852738 100644
--- a/_post_fit_shapes_8cpp_source.html
+++ b/_post_fit_shapes_8cpp_source.html
@@ -202,7 +202,7 @@
- 103 bool no_shape = !proc->
shape () && !proc->
data () && !proc->
pdf ();
+ 103 bool no_shape = !proc->
shape () && !proc->
data () && !proc->
pdf ();
105 cout <<
"Filtering process with no shape:\n" ;
@@ -334,27 +334,27 @@
int main(int argc, char *argv[])
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
-RooAbsData const * data() const
+RooAbsData const * data() const
int ParseDatacard(std::string const &filename, std::string const &analysis, std::string const &era, std::string const &channel, int bin_id, std::string const &mass)
CombineHarvester & backgrounds()
std::set< std::string > bin_set()
std::set< std::string > process_set()
-
+RooAbsReal const * pdf() const
+
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
-CombineHarvester & FilterProcs(Function func)
+CombineHarvester & FilterProcs(Function func)
CombineHarvester & bin(std::vector< std::string > const &vec, bool cond=true)
-TH1 const * shape() const
+TH1 const * shape() const
TH1F GetShapeWithUncertainty()
-static std::ostream & PrintHeader(std::ostream &out)
-RooAbsPdf const * pdf() const
-void SetPdfBins(unsigned nbins)
+static std::ostream & PrintHeader(std::ostream &out)
+void SetPdfBins(unsigned nbins)
-void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
-
+void UpdateParameters(std::vector< ch::Parameter > const ¶ms)
+
CombineHarvester & signals()
void WriteToTFile(T *ptr, TFile *file, std::string const &path)
diff --git a/_process_8cc_source.html b/_process_8cc_source.html
index 664b3d2952a..520356a220a 100644
--- a/_process_8cc_source.html
+++ b/_process_8cc_source.html
@@ -114,177 +114,187 @@
-
-
-
-
+
+
+ 17 cached_int_(nullptr) {
+
-
-
- 22 swap (static_cast<Object&>(first), static_cast<Object&>(second));
- 23 swap (first.rate_, second.rate_);
- 24 swap (first.shape_, second.shape_);
- 25 swap (first.pdf_, second.pdf_);
- 26 swap (first.data_, second.data_);
- 27 swap (first.norm_, second.norm_);
-
-
-
-
-
-
-
-
-
-
- 38 h =
static_cast< TH1*
> (other.shape_->Clone());
-
-
- 41 shape_ = std::unique_ptr<TH1>(h);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 74 shape_ = std::move(shape);
-
- 76 shape_->SetDirectory(0);
-
-
-
- 80 if (shape_->Integral() > 0.) shape_->Scale(1. / shape_->Integral());
-
-
-
-
-
-
-
-
- 89 if (!shape_)
return std::unique_ptr<TH1>();
- 90 std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
-
-
-
-
-
- 96 if (!shape_)
return std::unique_ptr<TH1>();
-
-
-
-
-
-
- 103 if (!shape_ && !data_) {
- 104 throw std::runtime_error(
- 105 FNERROR (
"Process object does not contain a shape" ));
-
-
-
-
-
- 111 TH1F
const * test_f =
dynamic_cast< TH1F const*
> (this->
shape ());
- 112 TH1D
const * test_d =
dynamic_cast< TH1D const*
> (this->
shape ());
-
-
-
-
-
- 118 throw std::runtime_error(
FNERROR (
"TH1 shape is not a TH1F or a TH1D" ));
-
- 120 }
else if (this->
data ()) {
- 121 std::string var_name = this->
data ()->get()->first()->GetName();
- 122 TH1F *tmp =
dynamic_cast< TH1F*
> (this->
data ()->createHistogram(
-
-
-
- 126 if (res.Integral() > 0.) res.Scale(1. / res.Integral());
-
-
-
-
-
-
-
- 134 "%-6s %-9s %-6s %-8s %-28s %-3i %-16s %-4i %-10.5g %-5i" ) %
- 135 "mass" %
"analysis" %
"era" %
"channel" %
"bin" %
"id" %
"process" %
- 136 "sig" %
"rate" %
"shape" ).str();
- 137 std::string div(line.length(),
'-' );
- 138 out << div << std::endl;
- 139 out << line << std::endl;
- 140 out << div << std::endl;
-
-
-
-
- 145 out << boost::format(
- 146 "%-6s %-9s %-6s %-8s %-28s %-3i %-16s %-4i %-10.5g %-5i" ) %
-
-
-
- 150 (bool(val.
shape ()) ||
bool (val.
pdf ()) ||
bool (val.
data ()));
+
+ 21 if (cached_int_)
delete cached_int_;
+
+
+
+
+ 26 swap (static_cast<Object&>(first), static_cast<Object&>(second));
+ 27 swap (first.rate_, second.rate_);
+ 28 swap (first.shape_, second.shape_);
+ 29 swap (first.pdf_, second.pdf_);
+ 30 swap (first.data_, second.data_);
+ 31 swap (first.norm_, second.norm_);
+ 32 swap (first.cached_obs_, second.cached_obs_);
+ 33 swap (first.cached_int_, second.cached_int_);
+
+
+
+
+
+
+
+
+ 42 cached_obs_(other.cached_obs_),
+ 43 cached_int_(nullptr) {
+
+
+ 46 h =
static_cast< TH1*
> (other.shape_->Clone());
+
+
+ 49 shape_ = std::unique_ptr<TH1>(h);
+
+
+
+
+
+
+
+
+
+
+ 60 cached_int_(nullptr) {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 84 shape_ = std::move(shape);
+
+ 86 shape_->SetDirectory(0);
+
+
+
+ 90 if (shape_->Integral() > 0.) shape_->Scale(1. / shape_->Integral());
+
+
+
+
+
+
+
+
+ 99 if (!shape_)
return std::unique_ptr<TH1>();
+ 100 std::unique_ptr<TH1> res(static_cast<TH1 *>(shape_->Clone()));
+ 101 res->SetDirectory(0);
+
+
+
+
+ 106 if (!shape_)
return std::unique_ptr<TH1>();
+
+
+
+
+
+
+ 113 if (!shape_ && !data_) {
+ 114 throw std::runtime_error(
+ 115 FNERROR (
"Process object does not contain a shape" ));
+
+
+
+
+
+ 121 TH1F
const * test_f =
dynamic_cast< TH1F const*
> (this->
shape ());
+ 122 TH1D
const * test_d =
dynamic_cast< TH1D const*
> (this->
shape ());
+
+
+
+
+
+ 128 throw std::runtime_error(
FNERROR (
"TH1 shape is not a TH1F or a TH1D" ));
+
+ 130 }
else if (this->
data ()) {
+ 131 std::string var_name = this->
data ()->get()->first()->GetName();
+ 132 TH1F *tmp =
dynamic_cast< TH1F*
> (this->
data ()->createHistogram(
+
+
+
+ 136 if (res.Integral() > 0.) res.Scale(1. / res.Integral());
+
+
+
+
+
+
+
+ 144 "%-6s %-9s %-6s %-8s %-28s %-3i %-16s %-4i %-10.5g %-5i" ) %
+ 145 "mass" %
"analysis" %
"era" %
"channel" %
"bin" %
"id" %
"process" %
+ 146 "sig" %
"rate" %
"shape" ).str();
+ 147 std::string div(line.length(),
'-' );
+ 148 out << div << std::endl;
+ 149 out << line << std::endl;
+ 150 out << div << std::endl;
-
+
+
+ 155 out << boost::format(
+ 156 "%-6s %-9s %-6s %-8s %-28s %-3i %-16s %-4i %-10.5g %-5i" ) %
+
+
+
+ 160 (bool(val.
shape ()) ||
bool (val.
pdf ()) ||
bool (val.
data ()));
+
+
+
virtual std::string const & analysis() const
-std::unique_ptr< TH1 > ClonedShape() const
-RooAbsData const * data() const
+std::unique_ptr< TH1 > ClonedShape() const
+RooAbsData const * data() const
virtual int bin_id() const
-double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
-std::unique_ptr< TH1 > ClonedScaledShape() const
+double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
+std::unique_ptr< TH1 > ClonedScaledShape() const
void swap(CombineHarvester &first, CombineHarvester &second)
+RooAbsReal const * pdf() const
-void swap(Process &first, Process &second)
-void set_rate(double const &rate)
-
+void swap(Process &first, Process &second)
+void set_rate(double const &rate)
+
virtual std::string const & channel() const
virtual std::string const & process() const
-
+
virtual std::string const & mass() const
-TH1 const * shape() const
+TH1 const * shape() const
-static std::ostream & PrintHeader(std::ostream &out)
-friend void swap(Process &first, Process &second)
+static std::ostream & PrintHeader(std::ostream &out)
+friend void swap(Process &first, Process &second)
virtual std::string const & bin() const
virtual std::string const & era() const
-RooAbsPdf const * pdf() const
-Process & operator=(Process other)
+Process & operator=(Process other)
-
-
+
+
std::ostream & operator<<(std::ostream &out, HistMapping const &val)
-void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
+void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
diff --git a/_process_8h.html b/_process_8h.html
index acc024fd971..c4ba7652eb1 100644
--- a/_process_8h.html
+++ b/_process_8h.html
@@ -109,6 +109,7 @@
#include "RooAbsPdf.h"
#include "RooAbsReal.h"
#include "RooAbsData.h"
+#include "RooRealVar.h"
#include "CombineHarvester/CombineTools/interface/MakeUnique.h "
#include "CombineHarvester/CombineTools/interface/Object.h "
diff --git a/_process_8h_source.html b/_process_8h_source.html
index 1ee98ff702f..289c4f4798b 100644
--- a/_process_8h_source.html
+++ b/_process_8h_source.html
@@ -108,85 +108,102 @@
7 #include "RooAbsReal.h"
8 #include "RooAbsData.h"
-
-
-
-
-
-
-
-
-
-
-
-
-
+ 9 #include "RooRealVar.h"
+
+
+
+
+
+
+
+
+
+
+
+
-
- 24 double rate ()
const {
return norm_ ? norm_->getVal() * rate_ : rate_; }
-
-
-
-
-
-
-
- 42 TH1
const *
shape ()
const {
return shape_.get(); }
-
-
-
-
-
-
-
- 50 RooAbsPdf
const *
pdf ()
const {
return pdf_; }
+
+
+
+
+ 27 if (pdf_ && !dynamic_cast<RooAbsPdf*>(pdf_) && cached_obs_) {
+
+ 29 cached_int_ = pdf_->createIntegral(RooArgSet(*cached_obs_));
+
+ 31 base = cached_int_->getVal();
+
+ 33 return norm_ ? base * norm_->getVal() * rate_ : base * rate_;
+
+
+
+
+
+
+
-
- 53 RooAbsData
const *
data ()
const {
return data_; }
-
-
- 56 RooAbsReal
const *
norm ()
const {
return norm_; }
-
-
- 59 static std::ostream&
PrintHeader (std::ostream &out);
-
-
-
- 63 std::unique_ptr<TH1> shape_;
-
-
-
+ 52 TH1
const *
shape ()
const {
return shape_.get(); }
+
+
+
+
+
+
+
+ 60 RooAbsReal
const *
pdf ()
const {
return pdf_; }
+
+
+ 63 RooAbsData
const *
data ()
const {
return data_; }
+
+
+ 66 RooAbsReal
const *
norm ()
const {
return norm_; }
-
-
-
-
-
-friend std::ostream & operator<<(std::ostream &out, Process const &val)
-std::unique_ptr< TH1 > ClonedShape() const
-RooAbsReal const * norm() const
-RooAbsData const * data() const
-void set_data(RooAbsData *data)
-double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
-std::unique_ptr< TH1 > ClonedScaledShape() const
-void set_rate(double const &rate)
-
-void set_pdf(RooAbsPdf *pdf)
+
+
+
+
+ 72 static std::ostream&
PrintHeader (std::ostream &out);
+
+
+
+ 76 std::unique_ptr<TH1> shape_;
+
+
+
+ 80 RooRealVar* cached_obs_;
+ 81 mutable RooAbsReal* cached_int_;
+
+
+
+
+
+
+friend std::ostream & operator<<(std::ostream &out, Process const &val)
+std::unique_ptr< TH1 > ClonedShape() const
+void set_observable(RooRealVar *obs)
+RooAbsReal const * norm() const
+RooAbsData const * data() const
+void set_data(RooAbsData *data)
+double no_norm_rate() const
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's pres...
+std::unique_ptr< TH1 > ClonedScaledShape() const
+void set_pdf(RooAbsReal *pdf)
+RooAbsReal const * pdf() const
+void set_rate(double const &rate)
+
-
-void set_norm(RooAbsReal *norm)
-TH1 const * shape() const
+
+void set_norm(RooAbsReal *norm)
+RooRealVar * observable() const
+TH1 const * shape() const
-static std::ostream & PrintHeader(std::ostream &out)
-friend void swap(Process &first, Process &second)
-RooAbsPdf const * pdf() const
+static std::ostream & PrintHeader(std::ostream &out)
+friend void swap(Process &first, Process &second)
-Process & operator=(Process other)
+Process & operator=(Process other)
-
-
-void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
+
+
+void set_shape(std::unique_ptr< TH1 > shape, bool set_rate)
diff --git a/_s_m_legacy_example_8cpp_source.html b/_s_m_legacy_example_8cpp_source.html
index c3b0655b4a6..61649cde91b 100644
--- a/_s_m_legacy_example_8cpp_source.html
+++ b/_s_m_legacy_example_8cpp_source.html
@@ -368,7 +368,7 @@
274 cout <<
"\n>> Done!\n" ;
-CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
+CombineHarvester cp()
Creates and returns a shallow copy of the CombineHarvester instance.
BinByBinFactory & SetMergeThreshold(double val)
The threshold for the merging algorithm.
void AddSystematics_tt(CombineHarvester &cb)
@@ -380,8 +380,8 @@
CombineHarvester & process(std::vector< std::string > const &vec, bool cond=true)
std::set< std::string > channel_set()
-void set_rate(double const &rate)
-CombineHarvester & FilterProcs(Function func)
+void set_rate(double const &rate)
+CombineHarvester & FilterProcs(Function func)
void AddProcesses(std::vector< std::string > mass, std::vector< std::string > analysis, std::vector< std::string > era, std::vector< std::string > channel, std::vector< std::string > procs, ch::Categories bin, bool signal)
Automates the writing of datacards into directory structures.
BinByBinFactory & SetFixNorm(bool fix)
Whether or not the bin-by-bin systematics are allowed to vary the process normalisation.
@@ -389,18 +389,18 @@
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
virtual std::string const & mass() const
-std::vector< std::string > ParseFileLines(std::string const &file_name)
+std::vector< std::string > ParseFileLines(std::string const &file_name)
void AddSystematics_et_mt(CombineHarvester &cb)
CombineHarvester & syst_name(std::vector< std::string > const &vec, bool cond=true)
void AddSystematics_ee_mm(CombineHarvester &cb)
-std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
+std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
virtual std::string const & bin() const
Merges bin uncertainties and creates bin-by-bin statistical uncertainties.
void AddSystematics_em(CombineHarvester &cb)
-std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
-
-
+std::map< std::string, CombineHarvester > WriteCards(std::string const &tag, ch::CombineHarvester &cmb) const
Write datacards according to patterns, substituting $TAG for tag
+
+
std::vector< std::pair< int, std::string > > Categories
diff --git a/_systematics_8h_source.html b/_systematics_8h_source.html
index f327cb72ef0..23fbbe91312 100644
--- a/_systematics_8h_source.html
+++ b/_systematics_8h_source.html
@@ -412,7 +412,7 @@
std::string Formula(ch::Process *) const
-
+
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
auto GetTuple(ch::Process *p) const -> decltype(std::make_tuple(T::get(p)...))
diff --git a/_utilities_8cc_source.html b/_utilities_8cc_source.html
index 004aed53064..e7f983263bf 100644
--- a/_utilities_8cc_source.html
+++ b/_utilities_8cc_source.html
@@ -275,191 +275,192 @@
173 static_cast< float > (hist.GetNbinsX()));
174 for (
int i = 1; i <= hist.GetNbinsX(); ++i) {
175 shape.SetBinContent(i, hist.GetBinContent(i));
-
-
-
-
-
-
-
- 183 for (
int x = 1; x <= res.GetNbinsX(); ++x) {
- 184 res.SetBinContent(x, src.GetBinContent(x));
- 185 res.SetBinError(x, src.GetBinError(x));
-
-
-
-
-
- 191 std::vector<unsigned> vec) {
- 192 unsigned n = vec.size();
- 193 std::vector<unsigned> idx(n, 0);
- 194 std::vector<std::vector<unsigned>> result;
-
-
- 197 if (std::find(vec.begin(), vec.end(), 0) != vec.end()) {
-
-
- 200 result.push_back(idx);
- 201 bool exit_loop =
false ;
- 202 while (exit_loop ==
false ) {
-
- 204 for (
unsigned i = 0; i < n; ++i) {
- 205 if ((idx[i] + 1) == vec[i]) {
-
-
-
-
-
-
-
-
-
- 215 result.push_back(idx);
-
-
-
-
-
-
-
-
-
- 225 std::vector<std::string> files;
-
- 227 file.open(file_name.c_str());
- 228 if (!file.is_open()) {
- 229 throw std::runtime_error(
- 230 FNERROR (
"File " + file_name +
" could not be opened" ));
-
- 232 std::string line =
"" ;
- 233 while (std::getline(file, line)) {
- 234 files.push_back(line);
-
-
-
-
-
-
- 241 std::istringstream iss(str);
-
- 243 iss >> std::noskipws >> f;
-
- 245 return iss.eof() && !iss.fail();
-
-
-
- 249 std::string
const & fmt) {
- 250 std::set<double> mass_set;
- 251 std::vector<std::string> tokens;
- 252 boost::split(tokens, input, boost::is_any_of(
"," ));
- 253 for (
auto const & t : tokens) {
- 254 std::vector<std::string> sub_tokens;
- 255 boost::split(sub_tokens, t, boost::is_any_of(
"-:" ));
- 256 if (sub_tokens.size() == 1) {
- 257 double mass_val = boost::lexical_cast<
double >(sub_tokens[0]);
- 258 mass_set.insert(mass_val);
- 259 }
else if (sub_tokens.size() == 3) {
- 260 double lo = boost::lexical_cast<
double >(sub_tokens[0]);
- 261 double hi = boost::lexical_cast<
double >(sub_tokens[1]);
- 262 double step = boost::lexical_cast<
double >(sub_tokens[2]);
-
- 264 throw std::runtime_error(
- 265 "[MassesFromRange] High mass is smaller than low mass!" );
-
- 267 while (start < hi + 0.001) {
- 268 mass_set.insert(start);
-
-
-
-
- 273 std::vector<std::string> result;
- 274 for (
auto const & m : mass_set) {
- 275 result.push_back((boost::format(fmt) % m).str());
-
-
-
-
-
- 281 std::string
const & fmt) {
- 282 std::set<double> mass_set;
- 283 std::vector<std::string> tokens;
- 284 boost::split(tokens, input, boost::is_any_of(
"," ));
- 285 for (
auto const & t : tokens) {
- 286 std::vector<std::string> sub_tokens;
- 287 boost::split(sub_tokens, t, boost::is_any_of(
":|" ));
- 288 if (sub_tokens.size() == 1) {
- 289 double mass_val = boost::lexical_cast<
double >(sub_tokens[0]);
- 290 mass_set.insert(mass_val);
- 291 }
else if (sub_tokens.size() == 3) {
- 292 double lo = boost::lexical_cast<
double >(sub_tokens[0]);
- 293 double hi = boost::lexical_cast<
double >(sub_tokens[1]);
- 294 double step = boost::lexical_cast<
double >(sub_tokens[2]);
-
- 296 throw std::runtime_error(
- 297 "[ValsFromRange] High mass is smaller than low mass!" );
-
- 299 while (start < hi + 1E-4) {
- 300 mass_set.insert(start);
-
-
-
-
- 305 std::vector<std::string> result;
- 306 for (
auto const & m : mass_set) {
- 307 result.push_back((boost::format(fmt) % m).str());
-
-
-
-
-
- 313 boost::filesystem::path p_to) {
- 314 p_from = boost::filesystem::absolute(p_from);
- 315 p_to = boost::filesystem::absolute(p_to);
- 316 boost::filesystem::path ret;
- 317 boost::filesystem::path::const_iterator itrFrom(p_from.begin()),
-
-
- 320 for (boost::filesystem::path::const_iterator toEnd(p_to.end()),
- 321 fromEnd(p_from.end());
- 322 itrFrom != fromEnd && itrTo != toEnd && *itrFrom == *itrTo;
-
-
- 325 for (boost::filesystem::path::const_iterator fromEnd(p_from.end());
- 326 itrFrom != fromEnd; ++itrFrom) {
- 327 if ((*itrFrom) !=
"." ) ret /=
".." ;
-
-
-
- 331 for (boost::filesystem::path::const_iterator toEnd(p_to.end());
- 332 itrTo != toEnd; ++itrTo) {
-
-
-
-
-
-
- 339 bool has_negative =
false ;
- 340 for (
int i = 1; i <= h->GetNbinsX(); ++i) {
- 341 if (h->GetBinContent(i) < 0.) {
-
-
-
-
-
-
-
- 349 for (
int i = 1; i <= h->GetNbinsX(); ++i) {
- 350 if (h->GetBinContent(i) < 0.) {
- 351 h->SetBinContent(i, 0.);
-
-
-
+ 176 shape.SetBinError(i, hist.GetBinError(i));
+
+
+
+
+
+
+
+ 184 for (
int x = 1; x <= res.GetNbinsX(); ++x) {
+ 185 res.SetBinContent(x, src.GetBinContent(x));
+ 186 res.SetBinError(x, src.GetBinError(x));
+
+
+
+
+
+ 192 std::vector<unsigned> vec) {
+ 193 unsigned n = vec.size();
+ 194 std::vector<unsigned> idx(n, 0);
+ 195 std::vector<std::vector<unsigned>> result;
+
+
+ 198 if (std::find(vec.begin(), vec.end(), 0) != vec.end()) {
+
+
+ 201 result.push_back(idx);
+ 202 bool exit_loop =
false ;
+ 203 while (exit_loop ==
false ) {
+
+ 205 for (
unsigned i = 0; i < n; ++i) {
+ 206 if ((idx[i] + 1) == vec[i]) {
+
+
+
+
+
+
+
+
+
+ 216 result.push_back(idx);
+
+
+
+
+
+
+
+
+
+ 226 std::vector<std::string> files;
+
+ 228 file.open(file_name.c_str());
+ 229 if (!file.is_open()) {
+ 230 throw std::runtime_error(
+ 231 FNERROR (
"File " + file_name +
" could not be opened" ));
+
+ 233 std::string line =
"" ;
+ 234 while (std::getline(file, line)) {
+ 235 files.push_back(line);
+
+
+
+
+
+
+ 242 std::istringstream iss(str);
+
+ 244 iss >> std::noskipws >> f;
+
+ 246 return iss.eof() && !iss.fail();
+
+
+
+ 250 std::string
const & fmt) {
+ 251 std::set<double> mass_set;
+ 252 std::vector<std::string> tokens;
+ 253 boost::split(tokens, input, boost::is_any_of(
"," ));
+ 254 for (
auto const & t : tokens) {
+ 255 std::vector<std::string> sub_tokens;
+ 256 boost::split(sub_tokens, t, boost::is_any_of(
"-:" ));
+ 257 if (sub_tokens.size() == 1) {
+ 258 double mass_val = boost::lexical_cast<
double >(sub_tokens[0]);
+ 259 mass_set.insert(mass_val);
+ 260 }
else if (sub_tokens.size() == 3) {
+ 261 double lo = boost::lexical_cast<
double >(sub_tokens[0]);
+ 262 double hi = boost::lexical_cast<
double >(sub_tokens[1]);
+ 263 double step = boost::lexical_cast<
double >(sub_tokens[2]);
+
+ 265 throw std::runtime_error(
+ 266 "[MassesFromRange] High mass is smaller than low mass!" );
+
+ 268 while (start < hi + 0.001) {
+ 269 mass_set.insert(start);
+
+
+
+
+ 274 std::vector<std::string> result;
+ 275 for (
auto const & m : mass_set) {
+ 276 result.push_back((boost::format(fmt) % m).str());
+
+
+
+
+
+ 282 std::string
const & fmt) {
+ 283 std::set<double> mass_set;
+ 284 std::vector<std::string> tokens;
+ 285 boost::split(tokens, input, boost::is_any_of(
"," ));
+ 286 for (
auto const & t : tokens) {
+ 287 std::vector<std::string> sub_tokens;
+ 288 boost::split(sub_tokens, t, boost::is_any_of(
":|" ));
+ 289 if (sub_tokens.size() == 1) {
+ 290 double mass_val = boost::lexical_cast<
double >(sub_tokens[0]);
+ 291 mass_set.insert(mass_val);
+ 292 }
else if (sub_tokens.size() == 3) {
+ 293 double lo = boost::lexical_cast<
double >(sub_tokens[0]);
+ 294 double hi = boost::lexical_cast<
double >(sub_tokens[1]);
+ 295 double step = boost::lexical_cast<
double >(sub_tokens[2]);
+
+ 297 throw std::runtime_error(
+ 298 "[ValsFromRange] High mass is smaller than low mass!" );
+
+ 300 while (start < hi + 1E-4) {
+ 301 mass_set.insert(start);
+
+
+
+
+ 306 std::vector<std::string> result;
+ 307 for (
auto const & m : mass_set) {
+ 308 result.push_back((boost::format(fmt) % m).str());
+
+
+
+
+
+ 314 boost::filesystem::path p_to) {
+ 315 p_from = boost::filesystem::absolute(p_from);
+ 316 p_to = boost::filesystem::absolute(p_to);
+ 317 boost::filesystem::path ret;
+ 318 boost::filesystem::path::const_iterator itrFrom(p_from.begin()),
+
+
+ 321 for (boost::filesystem::path::const_iterator toEnd(p_to.end()),
+ 322 fromEnd(p_from.end());
+ 323 itrFrom != fromEnd && itrTo != toEnd && *itrFrom == *itrTo;
+
+
+ 326 for (boost::filesystem::path::const_iterator fromEnd(p_from.end());
+ 327 itrFrom != fromEnd; ++itrFrom) {
+ 328 if ((*itrFrom) !=
"." ) ret /=
".." ;
+
+
+
+ 332 for (boost::filesystem::path::const_iterator toEnd(p_to.end());
+ 333 itrTo != toEnd; ++itrTo) {
+
+
+
+
+
+
+ 340 bool has_negative =
false ;
+ 341 for (
int i = 1; i <= h->GetNbinsX(); ++i) {
+ 342 if (h->GetBinContent(i) < 0.) {
+
+
+
+
+
+
+
+ 350 for (
int i = 1; i <= h->GetNbinsX(); ++i) {
+ 351 if (h->GetBinContent(i) < 0.) {
+ 352 h->SetBinContent(i, 0.);
+
+
+
virtual std::string const & analysis() const
void SetFromBinName(ch::Object *input, std::string parse_rules)
-std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
+std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
-TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
+TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
virtual void set_bin_id(int const &bin_id)
virtual void set_mass(std::string const &mass)
@@ -467,32 +468,32 @@
virtual int bin_id() const
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
-void ZeroNegativeBins(TH1 *h)
+void ZeroNegativeBins(TH1 *h)
virtual void set_analysis(std::string const &analysis)
-std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
+std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
virtual std::string const & channel() const
virtual std::string const & process() const
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
-bool HasNegativeBins(TH1 const *h)
+bool HasNegativeBins(TH1 const *h)
virtual std::string const & mass() const
-bool is_float(std::string const &str)
-std::vector< std::string > ParseFileLines(std::string const &file_name)
+bool is_float(std::string const &str)
+std::vector< std::string > ParseFileLines(std::string const &file_name)
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
TH1F RebinHist(TH1F const &hist)
virtual void set_bin(std::string const &bin)
void SetStandardBinName(ch::Object *obj, std::string pattern)
-std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
+std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
virtual std::string const & bin() const
virtual std::string const & era() const
-void ForEachObj(Function func)
+void ForEachObj(Function func)
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
-boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
+boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
virtual void set_era(std::string const &era)
virtual void set_channel(std::string const &channel)
diff --git a/_utilities_8h_source.html b/_utilities_8h_source.html
index 8c0eb4962f2..5fd794e180e 100644
--- a/_utilities_8h_source.html
+++ b/_utilities_8h_source.html
@@ -167,150 +167,151 @@
65 first->set_channel(second->channel());
66 first->set_bin_id(second->bin_id());
67 first->set_mass(second->mass());
-
-
-
-
-
-
-
- 75 TGraph
TGraphFromTable (std::string filename, std::string
const & x_column,
- 76 std::string
const & y_column);
-
-
-
-
-
- 82 std::vector<T>
Join (std::vector<std::vector<T>>
const & in) {
-
- 84 for (
auto const & x : in) size += x.size();
- 85 std::vector<T> res(size);
-
- 87 for (
auto const & x : in) {
- 88 for (
auto const & y : x) {
-
-
-
-
-
-
-
- 96 std::vector<std::string>
JoinStr (
- 97 std::vector<std::vector<std::string>>
const & in);
-
-
- 100 std::vector<T>
Set2Vec (std::set<T>
const & in) {
- 101 return std::vector<T>(in.begin(), in.end());
-
-
- 104 RooDataHist
TH1F2Data (TH1F
const & hist, RooRealVar
const & x,
- 105 std::string
const & name);
-
-
-
-
-
+ 68 first->set_all_attributes(second->all_attributes());
+
+
+
+
+
+
+
+ 76 TGraph
TGraphFromTable (std::string filename, std::string
const & x_column,
+ 77 std::string
const & y_column);
+
+
+
+
+
+ 83 std::vector<T>
Join (std::vector<std::vector<T>>
const & in) {
+
+ 85 for (
auto const & x : in) size += x.size();
+ 86 std::vector<T> res(size);
+
+ 88 for (
auto const & x : in) {
+ 89 for (
auto const & y : x) {
+
+
+
+
+
+
+
+ 97 std::vector<std::string>
JoinStr (
+ 98 std::vector<std::vector<std::string>>
const & in);
+
+
+ 101 std::vector<T>
Set2Vec (std::set<T>
const & in) {
+ 102 return std::vector<T>(in.begin(), in.end());
+
+
+ 105 RooDataHist
TH1F2Data (TH1F
const & hist, RooRealVar
const & x,
+ 106 std::string
const & name);
+
+
+
+
-
- 113 std::vector<unsigned> vec);
-
- 115 std::vector<std::string>
ParseFileLines (std::string
const & file_name);
-
+
+
+ 114 std::vector<unsigned> vec);
+
+ 116 std::vector<std::string>
ParseFileLines (std::string
const & file_name);
- 118 bool is_float (std::string
const & str);
-
-
- 143 std::string
const & fmt =
"%.0f" );
-
- 163 std::vector<std::string>
ValsFromRange (std::string
const & input,
- 164 std::string
const & fmt =
"%.0f" );
-
-
-
-
-
-
-
-
-
-
- 175 namespace tupleprint {
-
-
- 178 template <
class Tuple, std::
size_t N>
-
- 180 static void print (
const Tuple &t, std::stringstream & str) {
-
- 182 str <<
", " << std::get<N - 1>(t);
-
-
-
- 186 template <
class Tuple>
-
- 188 static void print (
const Tuple & t, std::stringstream & str) {
- 189 str << std::get<0>(t);
-
-
-
-
-
- 195 template <
class Tuple>
-
- 197 static void print (
const Tuple & , std::stringstream & ) { }
-
-
-
- 212 template <
class ... Args>
-
- 214 std::stringstream str;
-
-
-
-
-
-
-
-
-
- 239 boost::filesystem::path
make_relative (boost::filesystem::path p_from,
- 240 boost::filesystem::path p_to);
-
-
-
+
+ 119 bool is_float (std::string
const & str);
+
+
+ 144 std::string
const & fmt =
"%.0f" );
+
+ 164 std::vector<std::string>
ValsFromRange (std::string
const & input,
+ 165 std::string
const & fmt =
"%.0f" );
+
+
+
+
+
+
+
+
+
+
+ 176 namespace tupleprint {
+
+
+ 179 template <
class Tuple, std::
size_t N>
+
+ 181 static void print (
const Tuple &t, std::stringstream & str) {
+
+ 183 str <<
", " << std::get<N - 1>(t);
+
+
+
+ 187 template <
class Tuple>
+
+ 189 static void print (
const Tuple & t, std::stringstream & str) {
+ 190 str << std::get<0>(t);
+
+
+
+
+
+ 196 template <
class Tuple>
+
+ 198 static void print (
const Tuple & , std::stringstream & ) { }
+
+
+
+ 213 template <
class ... Args>
+
+ 215 std::stringstream str;
+
+
+
+
+
+
+
+
+
+ 240 boost::filesystem::path
make_relative (boost::filesystem::path p_from,
+ 241 boost::filesystem::path p_to);
+
+
+
void SetFromBinName(ch::Object *input, std::string parse_rules)
-std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
+std::vector< std::vector< unsigned > > GenerateCombinations(std::vector< unsigned > vec)
std::vector< ch::Parameter > ExtractSampledFitParameters(RooFitResult const &res)
-TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
+TH1F RestoreBinning(TH1F const &src, TH1F const &ref)
std::vector< ch::Parameter > ExtractFitParameters(RooFitResult const &res)
RooDataHist TH1F2Data(TH1F const &hist, RooRealVar const &x, std::string const &name)
-static void print(const Tuple &t, std::stringstream &str)
-static void print(const Tuple &t, std::stringstream &str)
+static void print(const Tuple &t, std::stringstream &str)
+static void print(const Tuple &t, std::stringstream &str)
void SetStandardBinNames(CombineHarvester &cb, std::string const &pattern="$ANALYSIS_$CHANNEL_$BINID_$ERA")
-
-void ZeroNegativeBins(TH1 *h)
+
+void ZeroNegativeBins(TH1 *h)
void SetProperties(T *first, U const *second)
-std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
+std::vector< std::string > MassesFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of mass values using ranges and intervals specified in a string.
bool MatchingProcess(T const &first, U const &second)
-std::vector< T > Join(std::vector< std::vector< T >> const &in)
+std::vector< T > Join(std::vector< std::vector< T >> const &in)
TGraph TGraphFromTable(std::string filename, std::string const &x_column, std::string const &y_column)
-std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
+std::string Tuple2String(const std::tuple< Args... > &t)
Format any std::tuple as a string.
-bool HasNegativeBins(TH1 const *h)
-bool is_float(std::string const &str)
-std::vector< std::string > ParseFileLines(std::string const &file_name)
+bool HasNegativeBins(TH1 const *h)
+bool is_float(std::string const &str)
+std::vector< std::string > ParseFileLines(std::string const &file_name)
std::vector< std::string > JoinStr(std::vector< std::vector< std::string >> const &in)
TH1F RebinHist(TH1F const &hist)
void SetStandardBinName(ch::Object *obj, std::string pattern)
-std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
-std::vector< T > Set2Vec(std::set< T > const &in)
+std::vector< std::string > ValsFromRange(std::string const &input, std::string const &fmt="%.0f")
Generate a vector of values using ranges and intervals specified in a string.
+std::vector< T > Set2Vec(std::set< T > const &in)
RooArgSet ParametersByName(RooAbsReal const *pdf, RooArgSet const *dat_vars)
-boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
-static void print(const Tuple &, std::stringstream &)
+boost::filesystem::path make_relative(boost::filesystem::path p_from, boost::filesystem::path p_to)
Determine the relative path from one file to another.
+static void print(const Tuple &, std::stringstream &)
diff --git a/annotated.html b/annotated.html
index 3d9082b580e..f3c184ccf46 100644
--- a/annotated.html
+++ b/annotated.html
@@ -121,25 +121,26 @@
C AutoRebin Tests for any bins below a certain threshold and if they exist merges them with neighborouring bins
C BinByBinFactory Merges bin uncertainties and creates bin-by-bin statistical uncertainties
C CardWriter Automates the writing of datacards into directory structures
- C CombineHarvester
- ▼ C FnTimer Determine the total amount of time spent in a function
- C Token
- C HistMapping
- C Object
- C Observation
- C Parameter
- C Process
- C SOverBInfo
- C Systematic
- C BkgInfo
- C ColInfo
- C convert_cpp_map_to_py_dict Convert a C++ map to a python dict
- C convert_cpp_root_to_py_root Covert a C++ ROOT type to a PyROOT type
- C convert_cpp_set_to_py_list Convert a C++ set to a python list
- C convert_cpp_vector_to_py_list Convert a C++ vector to a python list
- C convert_py_root_to_cpp_root
- C convert_py_seq_to_cpp_vector
- C convert_py_tup_to_cpp_pair
+ C CMSHistFuncFactory
+ C CombineHarvester
+ ▼ C FnTimer Determine the total amount of time spent in a function
+ C Token
+ C HistMapping
+ C Object
+ C Observation
+ C Parameter
+ C Process
+ C SOverBInfo
+ C Systematic
+ C BkgInfo
+ C ColInfo
+ C convert_cpp_map_to_py_dict Convert a C++ map to a python dict
+ C convert_cpp_root_to_py_root Covert a C++ ROOT type to a PyROOT type
+ C convert_cpp_set_to_py_list Convert a C++ set to a python list
+ C convert_cpp_vector_to_py_list Convert a C++ vector to a python list
+ C convert_py_root_to_cpp_root
+ C convert_py_seq_to_cpp_vector
+ C convert_py_tup_to_cpp_pair
diff --git a/classch_1_1_c_m_s_hist_func_factory.html b/classch_1_1_c_m_s_hist_func_factory.html
new file mode 100644
index 00000000000..a8c02104493
--- /dev/null
+++ b/classch_1_1_c_m_s_hist_func_factory.html
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+CombineHarvester: ch::CMSHistFuncFactory Class Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CombineHarvester
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#include "CombineHarvester/CombinePdfs/interface/CMSHistFuncFactory.h "
+
+
+
+
Definition at line 21 of file CMSHistFuncFactory.h .
+
+
+
+
+
+
+ ch::CMSHistFuncFactory::CMSHistFuncFactory
+ (
+ )
+
+
+
+
+
+
+
+
+
+
+
+ void ch::CMSHistFuncFactory::Run
+ (
+ ch::CombineHarvester &
+ cb ,
+
+
+
+
+ RooWorkspace &
+ ws
+
+
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void ch::CMSHistFuncFactory::SetHorizontalMorphingVariable
+ (
+ std::map< std::string, RooAbsReal * > &
+ hvar )
+
+
+
+
+
+inline
+
+
+
+
+
The documentation for this class was generated from the following files:
+
+
+
+
+
+
diff --git a/classch_1_1_c_m_s_hist_func_factory.js b/classch_1_1_c_m_s_hist_func_factory.js
new file mode 100644
index 00000000000..aadd2540e26
--- /dev/null
+++ b/classch_1_1_c_m_s_hist_func_factory.js
@@ -0,0 +1,6 @@
+var classch_1_1_c_m_s_hist_func_factory =
+[
+ [ "CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7", null ],
+ [ "Run", "classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60", null ],
+ [ "SetHorizontalMorphingVariable", "classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3", null ]
+];
\ No newline at end of file
diff --git a/classch_1_1_card_writer.html b/classch_1_1_card_writer.html
index 12f97e01c1f..4ce104187c5 100644
--- a/classch_1_1_card_writer.html
+++ b/classch_1_1_card_writer.html
@@ -195,7 +195,7 @@
Write datacards according to patterns, substituting $TAG
for tag
-Definition at line 74 of file CardWriter.cc .
+Definition at line 96 of file CardWriter.cc .
diff --git a/classch_1_1_combine_harvester.html b/classch_1_1_combine_harvester.html
index 46be8ef509b..337456b5fb5 100644
--- a/classch_1_1_combine_harvester.html
+++ b/classch_1_1_combine_harvester.html
@@ -298,6 +298,12 @@
void RenameGroup (std::string const &oldname, std::string const &newname)
Rename a nuisance parameter group. More...
+void AddDatacardLineAtEnd (std::string const &line)
+ Add a line of text at the end of all datacards. More...
+
+void ClearDatacardLinesAtEnd ()
+ Clear all added datacard lines. More...
+
Methods to calculate total yields and shapes
All of these methods are greedy, meaning they will sum over all available objects and evaluate the effect of all uncertainties. They should be used at the end of a chain of filter methods to give the desired yield, shape or uncertainty.
@@ -436,7 +442,7 @@
Copy constructor (makes a shallow copy)
When copying a CombineHarvester instance it is important to remember that the stored Observation , Process , Systematic and Parameter objects themselves are not duplicated, rather their pointers are simply copied. This is called making a shallow-copy , and means modifying the contents of one of these objects in the copied CombineHarvester also modifies it for the original. However, filtering methods only affect the instance they are called from. For example, if all the signal Process entries are filtered from a copied CombineHarvester instance they will remain in the original instance.
-
Definition at line 47 of file CombineHarvester.cc .
+
Definition at line 48 of file CombineHarvester.cc .
@@ -454,7 +460,7 @@
@@ -473,7 +479,7 @@
@@ -504,7 +510,7 @@
Set a named flag value.
Creates the flag if it doesn't already
-Definition at line 61 of file CombineHarvester.cc .
+Definition at line 63 of file CombineHarvester.cc .
@@ -522,7 +528,7 @@
@@ -541,7 +547,7 @@
Creates and returns a shallow copy of the CombineHarvester instance.
-Definition at line 211 of file CombineHarvester.cc .
+Definition at line 216 of file CombineHarvester.cc .
@@ -561,7 +567,7 @@
Creates and retunrs a deep copy of the CombineHarvester instance.
Unlike the shallow copy, a deep copy will duplicate every internal object, including any attached RooWorkspaces. This makes it completely independent of the original instance.
-Definition at line 81 of file CombineHarvester.cc .
+Definition at line 83 of file CombineHarvester.cc .
@@ -578,7 +584,7 @@
@@ -595,7 +601,7 @@
@@ -612,7 +618,7 @@
@@ -629,7 +635,7 @@
@@ -646,7 +652,7 @@
@@ -805,7 +811,7 @@
@@ -833,7 +839,7 @@
@@ -851,7 +857,7 @@
@@ -1270,7 +1276,7 @@
@@ -1290,7 +1296,7 @@
@@ -1310,7 +1316,7 @@
@@ -1330,7 +1336,7 @@
@@ -1513,7 +1519,7 @@
-Definition at line 555 of file CombineHarvester.h .
+Definition at line 569 of file CombineHarvester.h .
@@ -1536,7 +1542,7 @@
Fill an std::set using only the Observation entries.
See also SetFromAll
-Definition at line 564 of file CombineHarvester.h .
+Definition at line 578 of file CombineHarvester.h .
@@ -1559,7 +1565,7 @@
Fill an std::set using only the Process entries.
See also SetFromAll
-Definition at line 571 of file CombineHarvester.h .
+Definition at line 585 of file CombineHarvester.h .
@@ -1582,7 +1588,7 @@
Fill an std::set using only the Systematic entries.
See also SetFromAll
-Definition at line 578 of file CombineHarvester.h .
+Definition at line 592 of file CombineHarvester.h .
@@ -1600,7 +1606,7 @@
@@ -1618,7 +1624,7 @@
@@ -1636,7 +1642,7 @@
@@ -1657,7 +1663,7 @@
Update the parameters to the post-fit values in a RooFitResult.
Deprecated: For consistency and compatibility with the python interface, please use the UpdateParameters(RooFitResult const&) version of this method instead - this method will be removed in an upcoming release
-Definition at line 571 of file CombineHarvester_Evaluate.cc .
+Definition at line 577 of file CombineHarvester_Evaluate.cc .
@@ -1675,7 +1681,7 @@
@@ -1692,7 +1698,7 @@
@@ -1720,7 +1726,7 @@
@@ -1740,7 +1746,7 @@
@@ -1760,7 +1766,7 @@
@@ -1780,7 +1786,7 @@
@@ -1800,7 +1806,7 @@
@@ -1818,7 +1824,7 @@
@@ -1836,7 +1842,7 @@
@@ -1874,7 +1880,7 @@
-Definition at line 694 of file CombineHarvester_Evaluate.cc .
+Definition at line 700 of file CombineHarvester_Evaluate.cc .
@@ -1912,7 +1918,7 @@
-Definition at line 708 of file CombineHarvester_Evaluate.cc .
+Definition at line 714 of file CombineHarvester_Evaluate.cc .
@@ -1949,7 +1955,52 @@
-Definition at line 722 of file CombineHarvester_Evaluate.cc .
+Definition at line 728 of file CombineHarvester_Evaluate.cc .
+
+
+
+
+
+
+
+
+ void ch::CombineHarvester::AddDatacardLineAtEnd
+ (
+ std::string const &
+ line )
+
+
+
+
+
+
Add a line of text at the end of all datacards.
+
Parameters
+
+ line Line of text to add
+
+
+
+
+
Definition at line 739 of file CombineHarvester_Evaluate.cc .
+
+
+
+
+
+
+
+
+ void ch::CombineHarvester::ClearDatacardLinesAtEnd
+ (
+ )
+
+
+
+
@@ -1983,7 +2034,7 @@
@@ -2169,7 +2220,7 @@
@@ -2435,7 +2486,7 @@
diff --git a/classch_1_1_combine_harvester.js b/classch_1_1_combine_harvester.js
index a4c426776ab..1ea9a793da3 100644
--- a/classch_1_1_combine_harvester.js
+++ b/classch_1_1_combine_harvester.js
@@ -70,6 +70,8 @@ var classch_1_1_combine_harvester =
[ "SetGroup", "classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5", null ],
[ "RemoveGroup", "classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810", null ],
[ "RenameGroup", "classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9", null ],
+ [ "AddDatacardLineAtEnd", "classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02", null ],
+ [ "ClearDatacardLinesAtEnd", "classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce", null ],
[ "GetRate", "classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689", null ],
[ "GetObservedRate", "classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f", null ],
[ "GetUncertainty", "classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5", null ],
diff --git a/classch_1_1_object.html b/classch_1_1_object.html
index 64538220008..5ea9c2af9c8 100644
--- a/classch_1_1_object.html
+++ b/classch_1_1_object.html
@@ -167,6 +167,8 @@
virtual void delete_attribute (std::string const &attr_label)
+virtual void set_all_attributes (std::map< std::string, std::string > const &attrs_)
+
virtual std::map< std::string, std::string > const & all_attributes () const
virtual std::string const attribute (std::string const &attr_label) const
@@ -746,6 +748,32 @@
Definition at line 41 of file Object.h .
+
+
+
+
+
+
+
+
+
+
+ virtual void ch::Object::set_all_attributes
+ (
+ std::map< std::string, std::string > const &
+ attrs_ )
+
+
+
+
+
+inline virtual
+
+
+
@@ -769,7 +797,7 @@
@@ -795,7 +823,7 @@
diff --git a/classch_1_1_object.js b/classch_1_1_object.js
index 563c7f96556..73c75fc6447 100644
--- a/classch_1_1_object.js
+++ b/classch_1_1_object.js
@@ -23,6 +23,7 @@ var classch_1_1_object =
[ "mass", "classch_1_1_object.html#a88dfb8797821405ddc943dd9b4a0b4ce", null ],
[ "set_attribute", "classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b", null ],
[ "delete_attribute", "classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556", null ],
+ [ "set_all_attributes", "classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f", null ],
[ "all_attributes", "classch_1_1_object.html#ac67ae0228db7343bdb8d408e11e19318", null ],
[ "attribute", "classch_1_1_object.html#a4c0ab9bc1a210c618008faa8dd72f65d", null ],
[ "swap", "classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603", null ]
diff --git a/classch_1_1_observation.html b/classch_1_1_observation.html
index d0a5f539243..15f3db846bc 100644
--- a/classch_1_1_observation.html
+++ b/classch_1_1_observation.html
@@ -197,6 +197,8 @@
virtual void delete_attribute (std::string const &attr_label)
+virtual void set_all_attributes (std::map< std::string, std::string > const &attrs_)
+
virtual std::map< std::string, std::string > const & all_attributes () const
virtual std::string const attribute (std::string const &attr_label) const
diff --git a/classch_1_1_process.html b/classch_1_1_process.html
index 43a07f3c290..473eab79c2b 100644
--- a/classch_1_1_process.html
+++ b/classch_1_1_process.html
@@ -149,10 +149,10 @@
TH1F ShapeAsTH1F () const
-void set_pdf (RooAbsPdf *pdf )
-
-RooAbsPdf const * pdf () const
-
+void set_pdf (RooAbsReal *pdf )
+
+RooAbsReal const * pdf () const
+
void set_data (RooAbsData *data )
RooAbsData const * data () const
@@ -161,6 +161,10 @@
RooAbsReal const * norm () const
+void set_observable (RooRealVar *obs)
+
+RooRealVar * observable () const
+
Object ()
@@ -208,6 +212,8 @@
virtual void delete_attribute (std::string const &attr_label)
+virtual void set_all_attributes (std::map< std::string, std::string > const &attrs_)
+
virtual std::map< std::string, std::string > const & all_attributes () const
virtual std::string const attribute (std::string const &attr_label) const
@@ -227,7 +233,7 @@
-
Definition at line 14 of file Process.h .
+
Definition at line 15 of file Process.h .
@@ -259,7 +265,7 @@
@@ -277,7 +283,7 @@
@@ -295,7 +301,7 @@
@@ -314,7 +320,7 @@
@@ -340,7 +346,7 @@
@@ -365,7 +371,7 @@
@@ -393,7 +399,7 @@
Get the process normalisation without multiplying by the RooAbsReal value (in the case that it's present)
Generally this isn't a very useful method, it just returns the value of the rate
class member without multipling by the RooAbsReal term. If the process has a RooAbsReal attached then this is often an (or the) important part of determining the total process normalisation. One place this is useful is writing the rate into the text datacard.
-Definition at line 36 of file Process.h .
+Definition at line 46 of file Process.h .
@@ -421,7 +427,7 @@
@@ -449,7 +455,7 @@
@@ -474,7 +480,7 @@
@@ -491,7 +497,7 @@
@@ -508,7 +514,7 @@
@@ -525,11 +531,11 @@
-
+
@@ -539,7 +545,7 @@
void ch::Process::set_pdf
(
- RooAbsPdf *
+ RooAbsReal *
pdf )
@@ -551,11 +557,11 @@
-
+
@@ -563,7 +569,7 @@
- RooAbsPdf const* ch::Process::pdf
+ RooAbsReal const* ch::Process::pdf
(
)
const
@@ -576,7 +582,7 @@
@@ -602,7 +608,7 @@
@@ -627,7 +633,7 @@
@@ -653,7 +659,7 @@
@@ -678,7 +684,58 @@
+
+
+
+
+
+
+
+
+
+ void ch::Process::set_observable
+ (
+ RooRealVar *
+ obs )
+
+
+
+
+
+inline
+
+
+
+
+
+
+
+
+
+
+
+
+ RooRealVar* ch::Process::observable
+ (
+ )
+ const
+
+
+
+
+inline
+
+
+
@@ -704,7 +761,7 @@
@@ -741,7 +798,7 @@
@@ -777,7 +834,7 @@
diff --git a/classch_1_1_process.js b/classch_1_1_process.js
index 6fce0a90c59..c65c760d005 100644
--- a/classch_1_1_process.js
+++ b/classch_1_1_process.js
@@ -14,12 +14,14 @@ var classch_1_1_process =
[ "ClonedShape", "classch_1_1_process.html#abd6b57dd2665b2e4edfb9d648e09b6f8", null ],
[ "ClonedScaledShape", "classch_1_1_process.html#a95f8396972318625650d3c8a773bb561", null ],
[ "ShapeAsTH1F", "classch_1_1_process.html#a75dddf259aac5a30b652a7f838fccc5d", null ],
- [ "set_pdf", "classch_1_1_process.html#a29daf76545fd7b93af93aa0b42af1790", null ],
- [ "pdf", "classch_1_1_process.html#afbce7b1c6d9fc6cfcebdf4b3c54e6bd3", null ],
+ [ "set_pdf", "classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae", null ],
+ [ "pdf", "classch_1_1_process.html#a40aab277133c48b1852d33e6fdb35ecf", null ],
[ "set_data", "classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c", null ],
[ "data", "classch_1_1_process.html#a2e2e290f4c554cf76456180913188b7b", null ],
[ "set_norm", "classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20", null ],
[ "norm", "classch_1_1_process.html#ab41c6e3bf638dbb480404166185ed0a1", null ],
+ [ "set_observable", "classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f", null ],
+ [ "observable", "classch_1_1_process.html#a25e01410aada0818fa20a95a30a96025", null ],
[ "operator<<", "classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29", null ],
[ "swap", "classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa", null ]
];
\ No newline at end of file
diff --git a/classch_1_1_systematic.html b/classch_1_1_systematic.html
index 43e543ea3df..454218d8d76 100644
--- a/classch_1_1_systematic.html
+++ b/classch_1_1_systematic.html
@@ -219,6 +219,8 @@
virtual void delete_attribute (std::string const &attr_label)
+virtual void set_all_attributes (std::map< std::string, std::string > const &attrs_)
+
virtual std::map< std::string, std::string > const & all_attributes () const
virtual std::string const attribute (std::string const &attr_label) const
diff --git a/classes.html b/classes.html
index 978eba71fe9..ad284aa71c4 100644
--- a/classes.html
+++ b/classes.html
@@ -103,32 +103,33 @@
diff --git a/dir_67357b0f7d17e3dc186f37df5b958e70.html b/dir_67357b0f7d17e3dc186f37df5b958e70.html
index fcd57d4b9ec..1e758701b01 100644
--- a/dir_67357b0f7d17e3dc186f37df5b958e70.html
+++ b/dir_67357b0f7d17e3dc186f37df5b958e70.html
@@ -103,6 +103,8 @@
+file CMSHistFuncFactory.h [code]
+
file MorphFunctions.h [code]
file Python.h [code]
diff --git a/dir_67357b0f7d17e3dc186f37df5b958e70.js b/dir_67357b0f7d17e3dc186f37df5b958e70.js
index a890c000640..1c601842a04 100644
--- a/dir_67357b0f7d17e3dc186f37df5b958e70.js
+++ b/dir_67357b0f7d17e3dc186f37df5b958e70.js
@@ -1,5 +1,8 @@
var dir_67357b0f7d17e3dc186f37df5b958e70 =
[
+ [ "CMSHistFuncFactory.h", "_c_m_s_hist_func_factory_8h.html", [
+ [ "CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html", "classch_1_1_c_m_s_hist_func_factory" ]
+ ] ],
[ "MorphFunctions.h", "_morph_functions_8h.html", "_morph_functions_8h" ],
[ "Python.h", "_python_8h.html", "_python_8h" ]
];
\ No newline at end of file
diff --git a/dir_a11d860a120a6ee231a0ac3c6fec920f.html b/dir_a11d860a120a6ee231a0ac3c6fec920f.html
index 87040324d3f..ac17d5aa086 100644
--- a/dir_a11d860a120a6ee231a0ac3c6fec920f.html
+++ b/dir_a11d860a120a6ee231a0ac3c6fec920f.html
@@ -103,6 +103,8 @@
+file CMSHistFuncFactory.cc [code]
+
file MorphFunctions.cc [code]
file Python.cc [code]
diff --git a/dir_a11d860a120a6ee231a0ac3c6fec920f.js b/dir_a11d860a120a6ee231a0ac3c6fec920f.js
index 1f4f1e614a0..eab960e431c 100644
--- a/dir_a11d860a120a6ee231a0ac3c6fec920f.js
+++ b/dir_a11d860a120a6ee231a0ac3c6fec920f.js
@@ -1,5 +1,6 @@
var dir_a11d860a120a6ee231a0ac3c6fec920f =
[
+ [ "CMSHistFuncFactory.cc", "_c_m_s_hist_func_factory_8cc.html", null ],
[ "MorphFunctions.cc", "_morph_functions_8cc.html", "_morph_functions_8cc" ],
[ "Python.cc", "_python_8cc.html", "_python_8cc" ]
];
\ No newline at end of file
diff --git a/files.html b/files.html
index e9cc8495259..f979d83a997 100644
--- a/files.html
+++ b/files.html
@@ -104,11 +104,13 @@
[detail level 1 2 3 ]
▼ CombinePdfs
▼ interface
- MorphFunctions.h
- Python.h
- ▼ src
- MorphFunctions.cc
- Python.cc
+ CMSHistFuncFactory.h
+ MorphFunctions.h
+ Python.h
+ ▼ src
+ CMSHistFuncFactory.cc
+ MorphFunctions.cc
+ Python.cc
▼ CombineTools
▼ bin
MSSMYieldTable.cpp
diff --git a/functions.html b/functions.html
index b37fd05cf19..5522369dbd7 100644
--- a/functions.html
+++ b/functions.html
@@ -103,6 +103,9 @@ - a -
: ch::BinByBinFactory
, ch::CombineHarvester
+AddDatacardLineAtEnd()
+: ch::CombineHarvester
+
AddObservations()
: ch::CombineHarvester
diff --git a/functions_c.html b/functions_c.html
index 74768918137..ab361fe8c02 100644
--- a/functions_c.html
+++ b/functions_c.html
@@ -118,6 +118,9 @@ - c -
channel_set()
: ch::CombineHarvester
+ClearDatacardLinesAtEnd()
+: ch::CombineHarvester
+
ClonedScaledShape()
: ch::Observation
, ch::Process
@@ -132,8 +135,11 @@ - c -
ClonedShapeU()
: ch::Systematic
+CMSHistFuncFactory()
+: ch::CMSHistFuncFactory
+
CombineHarvester()
-: ch::CombineHarvester
+: ch::CombineHarvester
construct()
: convert_py_root_to_cpp_root< T >
diff --git a/functions_func.html b/functions_func.html
index ebf8d6c9164..7ade9c05a25 100644
--- a/functions_func.html
+++ b/functions_func.html
@@ -103,6 +103,9 @@ - a -
+AddDatacardLineAtEnd()
+: ch::CombineHarvester
+
AddObservations()
: ch::CombineHarvester
diff --git a/functions_func_c.html b/functions_func_c.html
index 9904fe4e294..6a989851709 100644
--- a/functions_func_c.html
+++ b/functions_func_c.html
@@ -109,6 +109,9 @@ - c -
channel_set()
: ch::CombineHarvester
+ClearDatacardLinesAtEnd()
+: ch::CombineHarvester
+
ClonedScaledShape()
: ch::Observation
, ch::Process
@@ -123,6 +126,9 @@ - c -
ClonedShapeU()
: ch::Systematic
+CMSHistFuncFactory()
+: ch::CMSHistFuncFactory
+
CombineHarvester()
: ch::CombineHarvester
diff --git a/functions_func_o.html b/functions_func_o.html
index 675d00f3441..facb32654f6 100644
--- a/functions_func_o.html
+++ b/functions_func_o.html
@@ -102,6 +102,9 @@ - o -
Object()
: ch::Object
+observable()
+: ch::Process
+
Observation()
: ch::Observation
diff --git a/functions_func_p.html b/functions_func_p.html
index 56a53bdbafc..2dc72badf52 100644
--- a/functions_func_p.html
+++ b/functions_func_p.html
@@ -106,7 +106,7 @@ - p -
pdf()
-: ch::Process
+: ch::Process
pdfs()
: ch::CombineHarvester
diff --git a/functions_func_r.html b/functions_func_r.html
index 9f5b69e3ee3..9ecff0437cd 100644
--- a/functions_func_r.html
+++ b/functions_func_r.html
@@ -124,6 +124,9 @@ - r -
diff --git a/functions_func_s.html b/functions_func_s.html
index 38e16814964..e40bcbe45f3 100644
--- a/functions_func_s.html
+++ b/functions_func_s.html
@@ -102,6 +102,9 @@ - s -
scale()
: ch::Systematic
+set_all_attributes()
+: ch::Object
+
set_analysis()
: ch::Object
@@ -147,8 +150,11 @@ - s -
set_norm()
: ch::Process
+set_observable()
+: ch::Process
+
set_pdf()
-: ch::Process
+: ch::Process
set_process()
: ch::Object
@@ -171,10 +177,10 @@ - s -
set_shape()
: ch::Observation
-, ch::Process
+, ch::Process
set_shapes()
-: ch::Systematic
+: ch::Systematic
set_signal()
: ch::Object
@@ -221,6 +227,9 @@ - s -
SetGroup()
: ch::CombineHarvester
+SetHorizontalMorphingVariable()
+: ch::CMSHistFuncFactory
+
SetMergeSaturatedBins()
: ch::BinByBinFactory
diff --git a/functions_o.html b/functions_o.html
index d340a0004d7..19107fee4e6 100644
--- a/functions_o.html
+++ b/functions_o.html
@@ -102,6 +102,9 @@ - o -
Object()
: ch::Object
+observable()
+: ch::Process
+
Observation()
: ch::Observation
diff --git a/functions_p.html b/functions_p.html
index e6725fa09f6..a71ec9ff1d1 100644
--- a/functions_p.html
+++ b/functions_p.html
@@ -109,7 +109,7 @@ - p -
pdf()
-: ch::Process
+: ch::Process
pdfs()
: ch::CombineHarvester
diff --git a/functions_r.html b/functions_r.html
index 0b82303a13b..c72ebede349 100644
--- a/functions_r.html
+++ b/functions_r.html
@@ -124,6 +124,9 @@ - r -
diff --git a/functions_s.html b/functions_s.html
index 832c1e98275..db4f130972a 100644
--- a/functions_s.html
+++ b/functions_s.html
@@ -105,6 +105,9 @@ - s -
scale()
: ch::Systematic
+set_all_attributes()
+: ch::Object
+
set_analysis()
: ch::Object
@@ -150,8 +153,11 @@ - s -
set_norm()
: ch::Process
+set_observable()
+: ch::Process
+
set_pdf()
-: ch::Process
+: ch::Process
set_process()
: ch::Object
@@ -224,6 +230,9 @@ - s -
SOverBInfo()
-: ch::SOverBInfo
+: ch::SOverBInfo
StartTimer()
: ch::FnTimer
diff --git a/hierarchy.html b/hierarchy.html
index e86f455afc8..ac000a2ef0f 100644
--- a/hierarchy.html
+++ b/hierarchy.html
@@ -110,33 +110,34 @@
C BkgInfo
C ch::CardWriter Automates the writing of datacards into directory structures
C ch::syst::channel
- C ColInfo
- C ch::CombineHarvester
- C convert_cpp_map_to_py_dict< TKey, TValue > Convert a C++ map to a python dict
- C convert_cpp_root_to_py_root< T > Covert a C++ ROOT type to a PyROOT type
- C convert_cpp_set_to_py_list< T > Convert a C++ set to a python list
- C convert_cpp_vector_to_py_list< T > Convert a C++ vector to a python list
- C convert_py_root_to_cpp_root< T >
- C convert_py_seq_to_cpp_vector< T >
- C convert_py_tup_to_cpp_pair< T, U >
- C ch::syst::era
- C ch::FnTimer Determine the total amount of time spent in a function
- C ch::HistMapping
- C ch::syst::mass
- ▼ C ch::Object
- C ch::Observation
- C ch::Process
- C ch::Systematic
- C ch::Parameter
- C ch::syst::process
- C ch::SOverBInfo
- C ch::syst::SystMap< T >
- C ch::syst::SystMapAsymm< T >
- C ch::syst::SystMapFunc< T >
- C ch::FnTimer::Token
- C ch::tupleprint::TuplePrinter< Tuple, N >
- C ch::tupleprint::TuplePrinter< Tuple, 0 >
- C ch::tupleprint::TuplePrinter< Tuple, 1 >
+ C ch::CMSHistFuncFactory
+ C ColInfo
+ C ch::CombineHarvester
+ C convert_cpp_map_to_py_dict< TKey, TValue > Convert a C++ map to a python dict
+ C convert_cpp_root_to_py_root< T > Covert a C++ ROOT type to a PyROOT type
+ C convert_cpp_set_to_py_list< T > Convert a C++ set to a python list
+ C convert_cpp_vector_to_py_list< T > Convert a C++ vector to a python list
+ C convert_py_root_to_cpp_root< T >
+ C convert_py_seq_to_cpp_vector< T >
+ C convert_py_tup_to_cpp_pair< T, U >
+ C ch::syst::era
+ C ch::FnTimer Determine the total amount of time spent in a function
+ C ch::HistMapping
+ C ch::syst::mass
+ ▼ C ch::Object
+ C ch::Observation
+ C ch::Process
+ C ch::Systematic
+ C ch::Parameter
+ C ch::syst::process
+ C ch::SOverBInfo
+ C ch::syst::SystMap< T >
+ C ch::syst::SystMapAsymm< T >
+ C ch::syst::SystMapFunc< T >
+ C ch::FnTimer::Token
+ C ch::tupleprint::TuplePrinter< Tuple, N >
+ C ch::tupleprint::TuplePrinter< Tuple, 0 >
+ C ch::tupleprint::TuplePrinter< Tuple, 1 >
diff --git a/hierarchy.js b/hierarchy.js
index 726c63dad63..f9545925788 100644
--- a/hierarchy.js
+++ b/hierarchy.js
@@ -8,6 +8,7 @@ var hierarchy =
[ "BkgInfo", "struct_bkg_info.html", null ],
[ "ch::CardWriter", "classch_1_1_card_writer.html", null ],
[ "ch::syst::channel", "structch_1_1syst_1_1channel.html", null ],
+ [ "ch::CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html", null ],
[ "ColInfo", "struct_col_info.html", null ],
[ "ch::CombineHarvester", "classch_1_1_combine_harvester.html", null ],
[ "convert_cpp_map_to_py_dict< TKey, TValue >", "structconvert__cpp__map__to__py__dict.html", null ],
diff --git a/namespacech.html b/namespacech.html
index e821bcf467c..6dfcf259f24 100644
--- a/namespacech.html
+++ b/namespacech.html
@@ -124,6 +124,8 @@
class CardWriter
Automates the writing of datacards into directory structures. More...
+class CMSHistFuncFactory
+
class CombineHarvester
class FnTimer
@@ -268,8 +270,8 @@
void ParseCombineWorkspacePy (CombineHarvester &cb, RooWorkspace const &ws, std::string const &modelcfg, std::string const &data, bool verbose=false)
-RooAddPdf * FindAddPdf (RooAbsPdf *input)
-
+RooAbsReal * FindAddPdf (RooAbsReal *input)
+
double IntegrateFloatRange (TH1F const *hist, double xmin, double xmax)
std::unique_ptr< TH1 > GetClonedTH1 (TFile *file, std::string const &path)
@@ -1710,7 +1712,7 @@
@@ -1756,25 +1758,25 @@
-
+
- RooAddPdf * ch::FindAddPdf
+ RooAbsReal * ch::FindAddPdf
(
- RooAbsPdf *
+ RooAbsReal *
input )
@@ -2184,7 +2186,7 @@
@@ -2222,7 +2224,7 @@
@@ -2302,7 +2304,7 @@
@@ -2320,7 +2322,7 @@
@@ -2338,7 +2340,7 @@
@@ -2356,7 +2358,7 @@
@@ -2397,7 +2399,7 @@
-Definition at line 248 of file Utilities.cc .
+Definition at line 249 of file Utilities.cc .
@@ -2437,7 +2439,7 @@
-Definition at line 280 of file Utilities.cc .
+Definition at line 281 of file Utilities.cc .
@@ -2455,7 +2457,7 @@
@@ -2473,7 +2475,7 @@
@@ -2503,7 +2505,7 @@
Returns A formatted string of the tuple elements
-Definition at line 213 of file Utilities.h .
+Definition at line 214 of file Utilities.h .
@@ -2543,7 +2545,7 @@
Returns Relative path from p_from
to p_to
-Definition at line 312 of file Utilities.cc .
+Definition at line 313 of file Utilities.cc .
@@ -2767,7 +2769,7 @@
@@ -2795,7 +2797,7 @@
diff --git a/namespacech.js b/namespacech.js
index ef7778d95a7..6ce25490152 100644
--- a/namespacech.js
+++ b/namespacech.js
@@ -5,6 +5,7 @@ var namespacech =
[ "AutoRebin", "classch_1_1_auto_rebin.html", "classch_1_1_auto_rebin" ],
[ "BinByBinFactory", "classch_1_1_bin_by_bin_factory.html", "classch_1_1_bin_by_bin_factory" ],
[ "CardWriter", "classch_1_1_card_writer.html", "classch_1_1_card_writer" ],
+ [ "CMSHistFuncFactory", "classch_1_1_c_m_s_hist_func_factory.html", "classch_1_1_c_m_s_hist_func_factory" ],
[ "CombineHarvester", "classch_1_1_combine_harvester.html", "classch_1_1_combine_harvester" ],
[ "FnTimer", "classch_1_1_fn_timer.html", "classch_1_1_fn_timer" ],
[ "HistMapping", "structch_1_1_hist_mapping.html", "structch_1_1_hist_mapping" ],
diff --git a/namespacemembers.html b/namespacemembers.html
index 38251833a35..9d2bc1602f4 100644
--- a/namespacemembers.html
+++ b/namespacemembers.html
@@ -255,7 +255,7 @@ - f -
: ch
FindAddPdf()
-: ch
+: ch
FindCrossingsWithSpline()
: plotting
diff --git a/namespacemembers_func.html b/namespacemembers_func.html
index 49a0d645fd6..acc99b5eb8a 100644
--- a/namespacemembers_func.html
+++ b/namespacemembers_func.html
@@ -249,7 +249,7 @@ - f -
FindAddPdf()
-: ch
+: ch
FindCrossingsWithSpline()
: plotting
diff --git a/navtreedata.js b/navtreedata.js
index 3f9210fc514..95aa38c77a9 100644
--- a/navtreedata.js
+++ b/navtreedata.js
@@ -119,9 +119,9 @@ var NAVTREE =
var NAVTREEINDEX =
[
"_a_zh_systematics_8cc.html",
-"_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98",
-"classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0",
-"introrun1_h_t_t.html#run1HTTMSSM"
+"_plotting_8h.html#a94fa210a8324e72a82327860972746eb",
+"classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0",
+"intro2.html#ex2-p1"
];
var SYNCONMSG = 'click to disable panel synchronisation';
diff --git a/navtreeindex0.js b/navtreeindex0.js
index 5de7a23f656..cdaa828a743 100644
--- a/navtreeindex0.js
+++ b/navtreeindex0.js
@@ -23,6 +23,10 @@ var NAVTREEINDEX0 =
"_bin_by_bin_8cc_source.html":[17,0,1,3,2],
"_bin_by_bin_8h.html":[17,0,1,1,2],
"_bin_by_bin_8h_source.html":[17,0,1,1,2],
+"_c_m_s_hist_func_factory_8cc.html":[17,0,0,1,0],
+"_c_m_s_hist_func_factory_8cc_source.html":[17,0,0,1,0],
+"_c_m_s_hist_func_factory_8h.html":[17,0,0,0,0],
+"_c_m_s_hist_func_factory_8h_source.html":[17,0,0,0,0],
"_card_writer_8cc.html":[17,0,1,3,3],
"_card_writer_8cc_source.html":[17,0,1,3,3],
"_card_writer_8h.html":[17,0,1,1,3],
@@ -198,16 +202,16 @@ var NAVTREEINDEX0 =
"_model_indep_hhh_a_zh.html#Hhh-Azh-p1":[11,0],
"_model_indep_hhh_a_zh.html#Hhh-Azh-p2":[11,1],
"_model_indep_hhh_a_zh.html#Hhh-Azh-p3":[11,2],
-"_morph_functions_8cc.html":[17,0,0,1,0],
-"_morph_functions_8cc.html#a21ce0ae95c56bde7e1ecc1f21a839d2d":[17,0,0,1,0,1],
-"_morph_functions_8cc.html#a64d9f4241e5148c2ab549c40a731dc8c":[17,0,0,1,0,0],
-"_morph_functions_8cc_source.html":[17,0,0,1,0],
-"_morph_functions_8h.html":[17,0,0,0,0],
-"_morph_functions_8h.html#a21ce0ae95c56bde7e1ecc1f21a839d2d":[17,0,0,0,0,3],
-"_morph_functions_8h.html#a64d9f4241e5148c2ab549c40a731dc8c":[17,0,0,0,0,1],
-"_morph_functions_8h.html#aefdcaba918224f404af9fcd9b53fa7bb":[17,0,0,0,0,2],
-"_morph_functions_8h.html#af9b462e52384bf17acf24c57bee7a5d3":[17,0,0,0,0,0],
-"_morph_functions_8h_source.html":[17,0,0,0,0],
+"_morph_functions_8cc.html":[17,0,0,1,1],
+"_morph_functions_8cc.html#a21ce0ae95c56bde7e1ecc1f21a839d2d":[17,0,0,1,1,1],
+"_morph_functions_8cc.html#a64d9f4241e5148c2ab549c40a731dc8c":[17,0,0,1,1,0],
+"_morph_functions_8cc_source.html":[17,0,0,1,1],
+"_morph_functions_8h.html":[17,0,0,0,1],
+"_morph_functions_8h.html#a21ce0ae95c56bde7e1ecc1f21a839d2d":[17,0,0,0,1,3],
+"_morph_functions_8h.html#a64d9f4241e5148c2ab549c40a731dc8c":[17,0,0,0,1,1],
+"_morph_functions_8h.html#aefdcaba918224f404af9fcd9b53fa7bb":[17,0,0,0,1,2],
+"_morph_functions_8h.html#af9b462e52384bf17acf24c57bee7a5d3":[17,0,0,0,1,0],
+"_morph_functions_8h_source.html":[17,0,0,0,1],
"_object_8cc.html":[17,0,1,3,18],
"_object_8cc.html#acfd60821a2deee24955d3a98e6605fd0":[17,0,1,3,18,0],
"_object_8cc_source.html":[17,0,1,3,18],
@@ -226,12 +230,12 @@ var NAVTREEINDEX0 =
"_parameter_8h.html":[17,0,1,1,14],
"_parameter_8h_source.html":[17,0,1,1,14],
"_parse_combine_workspace_8cc.html":[17,0,1,3,21],
-"_parse_combine_workspace_8cc.html#a0d8871a3c13b62ac6fefeb9a87b5e44a":[17,0,1,3,21,2],
+"_parse_combine_workspace_8cc.html#a5a4aae941cd175bf6764ad6789b4df8c":[17,0,1,3,21,2],
"_parse_combine_workspace_8cc.html#a5ae8a88e9e0d2120deec06e553a525f6":[17,0,1,3,21,1],
"_parse_combine_workspace_8cc.html#af7bcceb32c2f4a82fe1de32a93d0dfa3":[17,0,1,3,21,0],
"_parse_combine_workspace_8cc_source.html":[17,0,1,3,21],
"_parse_combine_workspace_8h.html":[17,0,1,1,15],
-"_parse_combine_workspace_8h.html#a0d8871a3c13b62ac6fefeb9a87b5e44a":[17,0,1,1,15,2],
+"_parse_combine_workspace_8h.html#a5a4aae941cd175bf6764ad6789b4df8c":[17,0,1,1,15,2],
"_parse_combine_workspace_8h.html#a5ae8a88e9e0d2120deec06e553a525f6":[17,0,1,1,15,0],
"_parse_combine_workspace_8h.html#af7bcceb32c2f4a82fe1de32a93d0dfa3":[17,0,1,1,15,1],
"_parse_combine_workspace_8h_source.html":[17,0,1,1,15],
@@ -245,9 +249,5 @@ var NAVTREEINDEX0 =
"_plotting_8h.html#a5f529c55b51440415c95a200a9e0708f":[17,0,1,1,16,23],
"_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161":[17,0,1,1,16,16],
"_plotting_8h.html#a6c102d23f1264e7b30aed6f76ce6c740":[17,0,1,1,16,5],
-"_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f":[17,0,1,1,16,8],
-"_plotting_8h.html#a94fa210a8324e72a82327860972746eb":[17,0,1,1,16,21],
-"_plotting_8h.html#a976a4920cd03f97ded8454279c895a32":[17,0,1,1,16,14],
-"_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2":[17,0,1,1,16,20],
-"_plotting_8h.html#aa098641a0337d718d1074531133b884f":[17,0,1,1,16,0]
+"_plotting_8h.html#a9359e5d70c59b3cd3ec03c4c7b449d1f":[17,0,1,1,16,8]
};
diff --git a/navtreeindex1.js b/navtreeindex1.js
index a42b9a9cb74..7bf9275ac7b 100644
--- a/navtreeindex1.js
+++ b/navtreeindex1.js
@@ -1,5 +1,9 @@
var NAVTREEINDEX1 =
{
+"_plotting_8h.html#a94fa210a8324e72a82327860972746eb":[17,0,1,1,16,21],
+"_plotting_8h.html#a976a4920cd03f97ded8454279c895a32":[17,0,1,1,16,14],
+"_plotting_8h.html#a99344cc5028c90aaafacea9ec5eab9d2":[17,0,1,1,16,20],
+"_plotting_8h.html#aa098641a0337d718d1074531133b884f":[17,0,1,1,16,0],
"_plotting_8h.html#aa8adc566a12b3c090d1e1ff3330f7c98":[17,0,1,1,16,17],
"_plotting_8h.html#aaeb0dadc50435965db936e967dde2799":[17,0,1,1,16,3],
"_plotting_8h.html#aafd63f976dd4c5ae271062e0f91c2681":[17,0,1,1,16,6],
@@ -38,13 +42,13 @@ var NAVTREEINDEX1 =
"_process_8cc_source.html":[17,0,1,3,22],
"_process_8h.html":[17,0,1,1,19],
"_process_8h_source.html":[17,0,1,1,19],
-"_python_8cc.html":[17,0,0,1,1],
-"_python_8cc.html#aac190afbb9da9e7598b2cd0167c88387":[17,0,0,1,1,0],
-"_python_8cc.html#ae158b0ed03c906858425fd2e4f7c5f22":[17,0,0,1,1,1],
-"_python_8cc_source.html":[17,0,0,1,1],
-"_python_8h.html":[17,0,0,0,1],
-"_python_8h.html#aac190afbb9da9e7598b2cd0167c88387":[17,0,0,0,1,0],
-"_python_8h_source.html":[17,0,0,0,1],
+"_python_8cc.html":[17,0,0,1,2],
+"_python_8cc.html#aac190afbb9da9e7598b2cd0167c88387":[17,0,0,1,2,0],
+"_python_8cc.html#ae158b0ed03c906858425fd2e4f7c5f22":[17,0,0,1,2,1],
+"_python_8cc_source.html":[17,0,0,1,2],
+"_python_8h.html":[17,0,0,0,2],
+"_python_8h.html#aac190afbb9da9e7598b2cd0167c88387":[17,0,0,0,2,0],
+"_python_8h_source.html":[17,0,0,0,2],
"_s_m_legacy_example_8cpp.html":[17,0,1,0,2],
"_s_m_legacy_example_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4":[17,0,1,0,2,0],
"_s_m_legacy_example_8cpp_source.html":[17,0,1,0,2],
@@ -145,109 +149,105 @@ var NAVTREEINDEX1 =
"classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062":[16,0,0,3,6],
"classch_1_1_bin_by_bin_factory.html#ab097f067dce0a722af70dd86bf1b5398":[16,0,0,3,2],
"classch_1_1_bin_by_bin_factory.html#ad83ac54b41f5ee9eabc33866bb61b834":[16,0,0,3,0],
+"classch_1_1_c_m_s_hist_func_factory.html":[16,0,0,5],
+"classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3":[16,0,0,5,2],
+"classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60":[16,0,0,5,1],
+"classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7":[16,0,0,5,0],
"classch_1_1_card_writer.html":[16,0,0,4],
"classch_1_1_card_writer.html#a1c214a68a95a4d2f09dbe45a033cce16":[16,0,0,4,3],
"classch_1_1_card_writer.html#a34ef01d0ec9b52687437e01db911f3c8":[16,0,0,4,4],
"classch_1_1_card_writer.html#a55eae164745e2d1a4cc5a8a8cde36033":[16,0,0,4,2],
"classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90":[16,0,0,4,0],
"classch_1_1_card_writer.html#af23bf08d1ef4323fa0f96fb9da9d835e":[16,0,0,4,1],
-"classch_1_1_combine_harvester.html":[16,0,0,5],
-"classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01":[16,0,0,5,14],
-"classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe":[16,0,0,5,84],
-"classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4":[16,0,0,5,80],
-"classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f":[16,0,0,5,71],
-"classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e":[16,0,0,5,79],
-"classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329":[16,0,0,5,31],
-"classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d":[16,0,0,5,89],
-"classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187":[16,0,0,5,22],
-"classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc":[16,0,0,5,83],
-"classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250":[16,0,0,5,33],
-"classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff":[16,0,0,5,95],
-"classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d":[16,0,0,5,32],
-"classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228":[16,0,0,5,19],
-"classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474":[16,0,0,5,27],
-"classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581":[16,0,0,5,60],
-"classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b":[16,0,0,5,10],
-"classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55":[16,0,0,5,35],
-"classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c":[16,0,0,5,94],
-"classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2":[16,0,0,5,58],
-"classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0":[16,0,0,5,81],
-"classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110":[16,0,0,5,20],
-"classch_1_1_combine_harvester.html#a359a11f3f6f9ab27fd7f047a6bf31ae8":[16,0,0,5,0],
-"classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71":[16,0,0,5,38],
-"classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68":[16,0,0,5,97],
-"classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099":[16,0,0,5,23],
-"classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a":[16,0,0,5,64],
-"classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d":[16,0,0,5,75],
-"classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc":[16,0,0,5,62],
-"classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6":[16,0,0,5,51],
-"classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb":[16,0,0,5,78],
-"classch_1_1_combine_harvester.html#a463bab1fa1cc7098f35d82c78a10fb9d":[16,0,0,5,36],
-"classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c":[16,0,0,5,5],
-"classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77":[16,0,0,5,17],
-"classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5":[16,0,0,5,25],
-"classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0":[16,0,0,5,57],
-"classch_1_1_combine_harvester.html#a51e79e40581a2f3602292cde9a858784":[16,0,0,5,42],
-"classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03":[16,0,0,5,4],
-"classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716":[16,0,0,5,43],
-"classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5":[16,0,0,5,67],
-"classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92":[16,0,0,5,18],
-"classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2":[16,0,0,5,28],
-"classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df":[16,0,0,5,9],
-"classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f":[16,0,0,5,24],
-"classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79":[16,0,0,5,98],
-"classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77":[16,0,0,5,53],
-"classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78":[16,0,0,5,49],
-"classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a":[16,0,0,5,1],
-"classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5":[16,0,0,5,76],
-"classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9":[16,0,0,5,69],
-"classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298":[16,0,0,5,52],
-"classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb":[16,0,0,5,21],
-"classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb":[16,0,0,5,56],
-"classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613":[16,0,0,5,47],
-"classch_1_1_combine_harvester.html#a869c951c635b86fba33b2c550c9c39c9":[16,0,0,5,41],
-"classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9":[16,0,0,5,29],
-"classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43":[16,0,0,5,91],
-"classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23":[16,0,0,5,82],
-"classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20":[16,0,0,5,63],
-"classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8":[16,0,0,5,40],
-"classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5":[16,0,0,5,72],
-"classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a":[16,0,0,5,65],
-"classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df":[16,0,0,5,45],
-"classch_1_1_combine_harvester.html#aa65fe68ae736e6b612a9c35f42adf02f":[16,0,0,5,16],
-"classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32":[16,0,0,5,74],
-"classch_1_1_combine_harvester.html#aa7f131550d71b656d7643c32bc6e5673":[16,0,0,5,3],
-"classch_1_1_combine_harvester.html#aa80be2f3c50f226ec74bd2f0249af8f1":[16,0,0,5,2],
-"classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c":[16,0,0,5,46],
-"classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c":[16,0,0,5,37],
-"classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f":[16,0,0,5,85],
-"classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f":[16,0,0,5,39],
-"classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3":[16,0,0,5,13],
-"classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735":[16,0,0,5,96],
-"classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8":[16,0,0,5,34],
-"classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd":[16,0,0,5,92],
-"classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e":[16,0,0,5,55],
-"classch_1_1_combine_harvester.html#abc51018136713ef4bec670b85eda7584":[16,0,0,5,59],
-"classch_1_1_combine_harvester.html#ac293d0d0ac5fff3bab85f86d1a9dcb01":[16,0,0,5,54],
-"classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810":[16,0,0,5,68],
-"classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533":[16,0,0,5,48],
-"classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef":[16,0,0,5,88],
-"classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3":[16,0,0,5,50],
-"classch_1_1_combine_harvester.html#ac64212156595f320b76bf32ec2c7a9e7":[16,0,0,5,6],
-"classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4":[16,0,0,5,11],
-"classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb":[16,0,0,5,15],
-"classch_1_1_combine_harvester.html#acbc55586d0cc9e8dc83f0396157d4b75":[16,0,0,5,8],
-"classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c":[16,0,0,5,90],
-"classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d":[16,0,0,5,12],
-"classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631":[16,0,0,5,44],
-"classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0":[16,0,0,5,86],
-"classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2":[16,0,0,5,66],
-"classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2":[16,0,0,5,7],
-"classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac":[16,0,0,5,61],
-"classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9":[16,0,0,5,26],
-"classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95":[16,0,0,5,30],
-"classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26":[16,0,0,5,73],
-"classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9":[16,0,0,5,93],
-"classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8":[16,0,0,5,77],
-"classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689":[16,0,0,5,70]
+"classch_1_1_combine_harvester.html":[16,0,0,6],
+"classch_1_1_combine_harvester.html#a00245515d95807d1d0c9501c5360ac01":[16,0,0,6,14],
+"classch_1_1_combine_harvester.html#a00bd4490f33ab0ae404fb46a8cbd9dfe":[16,0,0,6,86],
+"classch_1_1_combine_harvester.html#a01d2c826aba1891b7a1a5ce2dba395e4":[16,0,0,6,82],
+"classch_1_1_combine_harvester.html#a0b5444f9dcfa6fdace5fa2d8dc2ca11f":[16,0,0,6,73],
+"classch_1_1_combine_harvester.html#a0d3eca727963c0c14a3c04bbdce2ca5e":[16,0,0,6,81],
+"classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329":[16,0,0,6,31],
+"classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d":[16,0,0,6,91],
+"classch_1_1_combine_harvester.html#a19106a6a89c84b90308b34672de6c187":[16,0,0,6,22],
+"classch_1_1_combine_harvester.html#a1ecb940a59ea7a2039956a07882e9ccc":[16,0,0,6,85],
+"classch_1_1_combine_harvester.html#a1efc38e1377d77deaf5e9c4c8adbb250":[16,0,0,6,33],
+"classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff":[16,0,0,6,97],
+"classch_1_1_combine_harvester.html#a21c176f208a1603055113bd00e920d2d":[16,0,0,6,32],
+"classch_1_1_combine_harvester.html#a224d461aa1eec4a6cf2a3b915469d228":[16,0,0,6,19],
+"classch_1_1_combine_harvester.html#a25c231ed8b1614c5d50f192210374474":[16,0,0,6,27],
+"classch_1_1_combine_harvester.html#a2825b9eeec47f7b23f93520bf615b581":[16,0,0,6,60],
+"classch_1_1_combine_harvester.html#a28d52375fa2e13d80b6db9aa8b10113b":[16,0,0,6,10],
+"classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55":[16,0,0,6,35],
+"classch_1_1_combine_harvester.html#a2eefb78479b655130b6cf5710bdea33c":[16,0,0,6,96],
+"classch_1_1_combine_harvester.html#a2f6fa74fbaa78ec7f73855dc3473a5f2":[16,0,0,6,58],
+"classch_1_1_combine_harvester.html#a2fde08ec87e285cd05be2227a1b2a5b0":[16,0,0,6,83],
+"classch_1_1_combine_harvester.html#a32e3454b8734a04374efef473b1db110":[16,0,0,6,20],
+"classch_1_1_combine_harvester.html#a359a11f3f6f9ab27fd7f047a6bf31ae8":[16,0,0,6,0],
+"classch_1_1_combine_harvester.html#a35f86a79305555fec0a89b825d1fab71":[16,0,0,6,38],
+"classch_1_1_combine_harvester.html#a37e613f8c2c67871b4b3bc89c78a1f68":[16,0,0,6,99],
+"classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099":[16,0,0,6,23],
+"classch_1_1_combine_harvester.html#a3b73ec07ca4de14bf76383b2921f344a":[16,0,0,6,64],
+"classch_1_1_combine_harvester.html#a3d265eb50ea8ec70192788d985733d9d":[16,0,0,6,77],
+"classch_1_1_combine_harvester.html#a44064524ffe47ccac63ef8025a6f46dc":[16,0,0,6,62],
+"classch_1_1_combine_harvester.html#a455e0b19f8ff00c2b82d78baf59055a6":[16,0,0,6,51],
+"classch_1_1_combine_harvester.html#a4601ceaf29711b11611545a3ee4a8fbb":[16,0,0,6,80],
+"classch_1_1_combine_harvester.html#a463bab1fa1cc7098f35d82c78a10fb9d":[16,0,0,6,36],
+"classch_1_1_combine_harvester.html#a4b18f900247617db79a26ea0a08df15c":[16,0,0,6,5],
+"classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77":[16,0,0,6,17],
+"classch_1_1_combine_harvester.html#a4bb3afda2ccc54a1c259be6b715ae8e5":[16,0,0,6,25],
+"classch_1_1_combine_harvester.html#a4ee38f7674ca075beda81b979ba6aac0":[16,0,0,6,57],
+"classch_1_1_combine_harvester.html#a51e79e40581a2f3602292cde9a858784":[16,0,0,6,42],
+"classch_1_1_combine_harvester.html#a537e7bf110bf4e466d5c39843e76fd03":[16,0,0,6,4],
+"classch_1_1_combine_harvester.html#a54433aa1b16fad10c0d29f5d8c789716":[16,0,0,6,43],
+"classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02":[16,0,0,6,70],
+"classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5":[16,0,0,6,67],
+"classch_1_1_combine_harvester.html#a63255dd5ec491fa12857bc63b4174e92":[16,0,0,6,18],
+"classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2":[16,0,0,6,28],
+"classch_1_1_combine_harvester.html#a63ffe9b598a7a6dc9f3cab118b3703df":[16,0,0,6,9],
+"classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f":[16,0,0,6,24],
+"classch_1_1_combine_harvester.html#a6b7c11550052d3edd98cd0971280ff79":[16,0,0,6,100],
+"classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77":[16,0,0,6,53],
+"classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78":[16,0,0,6,49],
+"classch_1_1_combine_harvester.html#a71a57cb6de8ede0b1e8ac51d73571a2a":[16,0,0,6,1],
+"classch_1_1_combine_harvester.html#a749af47fa05e1e11b1488bfdb49efce5":[16,0,0,6,78],
+"classch_1_1_combine_harvester.html#a750a78b28b4ae6ca2d27a34b4ac32cc9":[16,0,0,6,69],
+"classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298":[16,0,0,6,52],
+"classch_1_1_combine_harvester.html#a83dd50569a1f1a4b5a46f2ad2b5c1cdb":[16,0,0,6,21],
+"classch_1_1_combine_harvester.html#a85ec2d316143e79cf690da7ff217eadb":[16,0,0,6,56],
+"classch_1_1_combine_harvester.html#a86674bf95164c39facfd5f9583aae613":[16,0,0,6,47],
+"classch_1_1_combine_harvester.html#a869c951c635b86fba33b2c550c9c39c9":[16,0,0,6,41],
+"classch_1_1_combine_harvester.html#a8a287dbad29d1c2c4963eef0e5d08ea9":[16,0,0,6,29],
+"classch_1_1_combine_harvester.html#a8a4f3b4e71986fd61990e9a66e455f43":[16,0,0,6,93],
+"classch_1_1_combine_harvester.html#a8d7ccde30bda35ec084f4e38b923ef23":[16,0,0,6,84],
+"classch_1_1_combine_harvester.html#a8f679f5e6e6cba2dd10f2d5eb14c4b20":[16,0,0,6,63],
+"classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8":[16,0,0,6,40],
+"classch_1_1_combine_harvester.html#a9c0e44635dc637746222f67e9be518e5":[16,0,0,6,74],
+"classch_1_1_combine_harvester.html#a9ec4406a5a327d11af6257be20865b2a":[16,0,0,6,65],
+"classch_1_1_combine_harvester.html#a9f1ada299ed6d20f749cf10f589c25df":[16,0,0,6,45],
+"classch_1_1_combine_harvester.html#aa65fe68ae736e6b612a9c35f42adf02f":[16,0,0,6,16],
+"classch_1_1_combine_harvester.html#aa7c0646bfab0a974c72fe815e33c5a32":[16,0,0,6,76],
+"classch_1_1_combine_harvester.html#aa7f131550d71b656d7643c32bc6e5673":[16,0,0,6,3],
+"classch_1_1_combine_harvester.html#aa80be2f3c50f226ec74bd2f0249af8f1":[16,0,0,6,2],
+"classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c":[16,0,0,6,46],
+"classch_1_1_combine_harvester.html#aab08f8aee1553b76501ff1a4de0a716c":[16,0,0,6,37],
+"classch_1_1_combine_harvester.html#aab26f47e06ee53fcf1aab5c0940e916f":[16,0,0,6,87],
+"classch_1_1_combine_harvester.html#aab6a698c192aa091178bbd8dfbd0266f":[16,0,0,6,39],
+"classch_1_1_combine_harvester.html#aadea1e068eb474ba7919b1894033e3d3":[16,0,0,6,13],
+"classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735":[16,0,0,6,98],
+"classch_1_1_combine_harvester.html#ab1f4f4e953af6cb2f23b52a69b5900a8":[16,0,0,6,34],
+"classch_1_1_combine_harvester.html#ab6ba1e447ab5b290c22c23218ddf64cd":[16,0,0,6,94],
+"classch_1_1_combine_harvester.html#ab994bb3d7ccc19475a28f5864831841e":[16,0,0,6,55],
+"classch_1_1_combine_harvester.html#abc51018136713ef4bec670b85eda7584":[16,0,0,6,59],
+"classch_1_1_combine_harvester.html#ac293d0d0ac5fff3bab85f86d1a9dcb01":[16,0,0,6,54],
+"classch_1_1_combine_harvester.html#ac3e906d415a6d68713f08a0c3f885810":[16,0,0,6,68],
+"classch_1_1_combine_harvester.html#ac3ef7424cb86d12fd294d9c6de98d533":[16,0,0,6,48],
+"classch_1_1_combine_harvester.html#ac40e961ea428fa6411ec8e3b6ddeadef":[16,0,0,6,90],
+"classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce":[16,0,0,6,71],
+"classch_1_1_combine_harvester.html#ac514e331fc81a67fc9d8de884b5666c3":[16,0,0,6,50],
+"classch_1_1_combine_harvester.html#ac64212156595f320b76bf32ec2c7a9e7":[16,0,0,6,6],
+"classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4":[16,0,0,6,11],
+"classch_1_1_combine_harvester.html#ac66fa8f787cb9e9d00435b8d5ef20aeb":[16,0,0,6,15],
+"classch_1_1_combine_harvester.html#acbc55586d0cc9e8dc83f0396157d4b75":[16,0,0,6,8],
+"classch_1_1_combine_harvester.html#acd2aec5d4b862d3edc79399ae0801f4c":[16,0,0,6,92],
+"classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d":[16,0,0,6,12],
+"classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631":[16,0,0,6,44]
};
diff --git a/navtreeindex2.js b/navtreeindex2.js
index 432245c1f2d..c25f1530f7f 100644
--- a/navtreeindex2.js
+++ b/navtreeindex2.js
@@ -1,137 +1,150 @@
var NAVTREEINDEX2 =
{
-"classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0":[16,0,0,5,87],
-"classch_1_1_fn_timer.html":[16,0,0,6],
-"classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e":[16,0,0,6,5],
-"classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d":[16,0,0,6,3],
-"classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6":[16,0,0,6,4],
-"classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc":[16,0,0,6,1],
-"classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab":[16,0,0,6,2],
-"classch_1_1_fn_timer_1_1_token.html":[16,0,0,6,0],
-"classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab":[16,0,0,6,0,0],
-"classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9":[16,0,0,6,0,1],
-"classch_1_1_object.html":[16,0,0,8],
-"classch_1_1_object.html#a0b0c5f14564e159d11bf325b7a08dfba":[16,0,0,8,8],
-"classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120":[16,0,0,8,11],
-"classch_1_1_object.html#a1d58aeeeea90ab0492d114ad75b9da66":[16,0,0,8,3],
-"classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03":[16,0,0,8,7],
-"classch_1_1_object.html#a4352d90462b331e97f2fabca32e4b90c":[16,0,0,8,10],
-"classch_1_1_object.html#a4c0ab9bc1a210c618008faa8dd72f65d":[16,0,0,8,24],
-"classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3":[16,0,0,8,19],
-"classch_1_1_object.html#a5ff1c80eee75e9f6d5ebc7d7089503d7":[16,0,0,8,14],
-"classch_1_1_object.html#a60ff05363e905e268f4a85bc9d2a63c1":[16,0,0,8,16],
-"classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8":[16,0,0,8,5],
-"classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b":[16,0,0,8,21],
-"classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805":[16,0,0,8,4],
-"classch_1_1_object.html#a88dfb8797821405ddc943dd9b4a0b4ce":[16,0,0,8,20],
-"classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603":[16,0,0,8,25],
-"classch_1_1_object.html#aa2f03ad2ae3518c7169ea0dc79bca780":[16,0,0,8,6],
-"classch_1_1_object.html#ab43915289318053f138083f1e8720646":[16,0,0,8,2],
-"classch_1_1_object.html#ac57605a5c14ab76dc7be7ec7fa74be81":[16,0,0,8,18],
-"classch_1_1_object.html#ac67ae0228db7343bdb8d408e11e19318":[16,0,0,8,23],
-"classch_1_1_object.html#acc6dfa0e69fd9c9647e4b242bfe6a93e":[16,0,0,8,12],
-"classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7":[16,0,0,8,0],
-"classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85":[16,0,0,8,1],
-"classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7":[16,0,0,8,13],
-"classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c":[16,0,0,8,9],
-"classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600":[16,0,0,8,15],
-"classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191":[16,0,0,8,17],
-"classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556":[16,0,0,8,22],
-"classch_1_1_observation.html":[16,0,0,9],
-"classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b":[16,0,0,9,5],
-"classch_1_1_observation.html#a202167d5fed87ee27c287f1a7dd46e50":[16,0,0,9,12],
-"classch_1_1_observation.html#a56897e63ca73b158071633e3f379e8c5":[16,0,0,9,0],
-"classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5":[16,0,0,9,4],
-"classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58":[16,0,0,9,7],
-"classch_1_1_observation.html#a6ecbfa5be95fb8fb644982c76f7e62f8":[16,0,0,9,11],
-"classch_1_1_observation.html#a74f4222e7dd540dc028563ba4923d3e8":[16,0,0,9,6],
-"classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43":[16,0,0,9,13],
-"classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88":[16,0,0,9,16],
-"classch_1_1_observation.html#a95d19e58b38c6dd6313eab955309eeda":[16,0,0,9,9],
-"classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648":[16,0,0,9,15],
-"classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a":[16,0,0,9,2],
-"classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300":[16,0,0,9,8],
-"classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43":[16,0,0,9,1],
-"classch_1_1_observation.html#ad49842c7287e9746b332068e2915c6e7":[16,0,0,9,14],
-"classch_1_1_observation.html#adb67421c69ab33c4d4f5c343f93e7b2e":[16,0,0,9,10],
-"classch_1_1_observation.html#af37c17965ed6342871c1154df190e9cf":[16,0,0,9,3],
-"classch_1_1_parameter.html":[16,0,0,10],
-"classch_1_1_parameter.html#a0a997554cc52ac7b7860e376c3299d4b":[16,0,0,10,8],
-"classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279":[16,0,0,10,18],
-"classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c":[16,0,0,10,1],
-"classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019":[16,0,0,10,21],
-"classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c":[16,0,0,10,9],
-"classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf":[16,0,0,10,11],
-"classch_1_1_parameter.html#a49f2b0d9cc4170effcbb0005dd8760a2":[16,0,0,10,19],
-"classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5":[16,0,0,10,22],
-"classch_1_1_parameter.html#a4c19bef9dbf6821e18477da3286377c6":[16,0,0,10,5],
-"classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76":[16,0,0,10,20],
-"classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec":[16,0,0,10,17],
-"classch_1_1_parameter.html#a72f08021fdbbc3f9760427363ea8e3a5":[16,0,0,10,10],
-"classch_1_1_parameter.html#a84965c0df39666449279066216b3f184":[16,0,0,10,16],
-"classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68":[16,0,0,10,2],
-"classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e":[16,0,0,10,13],
-"classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e":[16,0,0,10,7],
-"classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc":[16,0,0,10,23],
-"classch_1_1_parameter.html#abb14d062556c9445bdfa7c11293bfb50":[16,0,0,10,12],
-"classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a":[16,0,0,10,0],
-"classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff":[16,0,0,10,15],
-"classch_1_1_parameter.html#ad0958b8f9f2bbe6671bedce5005058f4":[16,0,0,10,14],
-"classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd":[16,0,0,10,3],
-"classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe":[16,0,0,10,4],
-"classch_1_1_parameter.html#af57376e4f0eb43b4aa62fd18759f4a17":[16,0,0,10,6],
-"classch_1_1_process.html":[16,0,0,11],
-"classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20":[16,0,0,11,18],
-"classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30":[16,0,0,11,5],
-"classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d":[16,0,0,11,1],
-"classch_1_1_process.html#a29daf76545fd7b93af93aa0b42af1790":[16,0,0,11,14],
-"classch_1_1_process.html#a2e2e290f4c554cf76456180913188b7b":[16,0,0,11,17],
-"classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea":[16,0,0,11,8],
-"classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d":[16,0,0,11,9],
-"classch_1_1_process.html#a6dabe794611839385254eba00f46de2d":[16,0,0,11,6],
-"classch_1_1_process.html#a75dddf259aac5a30b652a7f838fccc5d":[16,0,0,11,13],
-"classch_1_1_process.html#a7fdac7c901b10af74e32709528d86f71":[16,0,0,11,10],
-"classch_1_1_process.html#a95f8396972318625650d3c8a773bb561":[16,0,0,11,12],
-"classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c":[16,0,0,11,16],
-"classch_1_1_process.html#aa2f461778b7c77eca21aad2989d15184":[16,0,0,11,0],
-"classch_1_1_process.html#ab41c6e3bf638dbb480404166185ed0a1":[16,0,0,11,19],
-"classch_1_1_process.html#ab648ac76032cada297b0eb54bdba471d":[16,0,0,11,3],
-"classch_1_1_process.html#abd6b57dd2665b2e4edfb9d648e09b6f8":[16,0,0,11,11],
-"classch_1_1_process.html#ac3de97aa921675b3cefe9d507c13e728":[16,0,0,11,2],
-"classch_1_1_process.html#ac6081e1fd33bfe87f28e42145d53c535":[16,0,0,11,7],
-"classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa":[16,0,0,11,21],
-"classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29":[16,0,0,11,20],
-"classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a":[16,0,0,11,4],
-"classch_1_1_process.html#afbce7b1c6d9fc6cfcebdf4b3c54e6bd3":[16,0,0,11,15],
-"classch_1_1_systematic.html":[16,0,0,13],
-"classch_1_1_systematic.html#a003ef543320b8966fd66d85cc5a8cd87":[16,0,0,13,6],
-"classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8":[16,0,0,13,26],
-"classch_1_1_systematic.html#a115e6483141fc9c95c1c55f3e2aa97a3":[16,0,0,13,10],
-"classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4":[16,0,0,13,4],
-"classch_1_1_systematic.html#a39ef082b25f09b1080c21d15a8a92187":[16,0,0,13,20],
-"classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb":[16,0,0,13,2],
-"classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d":[16,0,0,13,24],
-"classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a":[16,0,0,13,11],
-"classch_1_1_systematic.html#a495c6a0c53d7bf58fbb8ef0666f34deb":[16,0,0,13,16],
-"classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff":[16,0,0,13,0],
-"classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049":[16,0,0,13,5],
-"classch_1_1_systematic.html#a6773e4814fb89d2258018895f078095a":[16,0,0,13,12],
-"classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8":[16,0,0,13,23],
-"classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661":[16,0,0,13,25],
-"classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f":[16,0,0,13,9],
-"classch_1_1_systematic.html#a95a30941a8b10c59b54a2d7bedd5c80e":[16,0,0,13,21],
-"classch_1_1_systematic.html#aa9b12a8b0ad6495226ab719f490dffc8":[16,0,0,13,19],
-"classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf":[16,0,0,13,15],
-"classch_1_1_systematic.html#ab0fc94bc1ba9eed9c747a6c1c40abba9":[16,0,0,13,22],
-"classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d":[16,0,0,13,3],
-"classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff":[16,0,0,13,13],
-"classch_1_1_systematic.html#accf5f1c59b7c712d701d879452597e94":[16,0,0,13,17],
-"classch_1_1_systematic.html#ad299d1cae11a0803583ae27a3adef31a":[16,0,0,13,8],
-"classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5":[16,0,0,13,1],
-"classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0":[16,0,0,13,7],
-"classch_1_1_systematic.html#ae0814d4e8b74020a7e8b8f37985aa882":[16,0,0,13,18],
-"classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a":[16,0,0,13,27],
-"classch_1_1_systematic.html#ae9e66ad2fbbe46b133505fe2b9906a78":[16,0,0,13,14],
+"classch_1_1_combine_harvester.html#ad4bd2bb5458d8435efd8fff49624b7b0":[16,0,0,6,88],
+"classch_1_1_combine_harvester.html#ad61cdbfaea0ed88c09651c2a92c934e2":[16,0,0,6,66],
+"classch_1_1_combine_harvester.html#ade0f7c161d078a189404a274b93336d2":[16,0,0,6,7],
+"classch_1_1_combine_harvester.html#adfa906384002e89b68fa1adcce4023ac":[16,0,0,6,61],
+"classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9":[16,0,0,6,26],
+"classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95":[16,0,0,6,30],
+"classch_1_1_combine_harvester.html#af71f64a1d858700bd16d98cee1c10c26":[16,0,0,6,75],
+"classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9":[16,0,0,6,95],
+"classch_1_1_combine_harvester.html#afeae4c75ae1a122fdcf0a7f28b15a9d8":[16,0,0,6,79],
+"classch_1_1_combine_harvester.html#aff4165661f9f137607d6c3c881172689":[16,0,0,6,72],
+"classch_1_1_combine_harvester.html#aff8e163ca0abe844603e676d142986a0":[16,0,0,6,89],
+"classch_1_1_fn_timer.html":[16,0,0,7],
+"classch_1_1_fn_timer.html#a4dc02384a997b93294cd083b107a673e":[16,0,0,7,5],
+"classch_1_1_fn_timer.html#a68814f0e60141ebf55f8138f7dbb597d":[16,0,0,7,3],
+"classch_1_1_fn_timer.html#aa6368e35ad1520773275baf7ad1bbcb6":[16,0,0,7,4],
+"classch_1_1_fn_timer.html#aa6e36b42f8bfa11abc0223da0ff485cc":[16,0,0,7,1],
+"classch_1_1_fn_timer.html#ad250e7cf97d91e1fe83d1d861a2fc7ab":[16,0,0,7,2],
+"classch_1_1_fn_timer_1_1_token.html":[16,0,0,7,0],
+"classch_1_1_fn_timer_1_1_token.html#a1c853c1c56a90922270aeaa2727b1fab":[16,0,0,7,0,0],
+"classch_1_1_fn_timer_1_1_token.html#a8f09c19cbce557ae83281e8a0c36c8e9":[16,0,0,7,0,1],
+"classch_1_1_object.html":[16,0,0,9],
+"classch_1_1_object.html#a0b0c5f14564e159d11bf325b7a08dfba":[16,0,0,9,8],
+"classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120":[16,0,0,9,11],
+"classch_1_1_object.html#a1d58aeeeea90ab0492d114ad75b9da66":[16,0,0,9,3],
+"classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03":[16,0,0,9,7],
+"classch_1_1_object.html#a4352d90462b331e97f2fabca32e4b90c":[16,0,0,9,10],
+"classch_1_1_object.html#a4c0ab9bc1a210c618008faa8dd72f65d":[16,0,0,9,25],
+"classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3":[16,0,0,9,19],
+"classch_1_1_object.html#a5ff1c80eee75e9f6d5ebc7d7089503d7":[16,0,0,9,14],
+"classch_1_1_object.html#a60ff05363e905e268f4a85bc9d2a63c1":[16,0,0,9,16],
+"classch_1_1_object.html#a7997c967b45c8048e5d37284634192c8":[16,0,0,9,5],
+"classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b":[16,0,0,9,21],
+"classch_1_1_object.html#a852658426c7ab24d17a8cf5b33ec6805":[16,0,0,9,4],
+"classch_1_1_object.html#a88dfb8797821405ddc943dd9b4a0b4ce":[16,0,0,9,20],
+"classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f":[16,0,0,9,23],
+"classch_1_1_object.html#a9ea9cb8427d79a8fccee9409eae3f603":[16,0,0,9,26],
+"classch_1_1_object.html#aa2f03ad2ae3518c7169ea0dc79bca780":[16,0,0,9,6],
+"classch_1_1_object.html#ab43915289318053f138083f1e8720646":[16,0,0,9,2],
+"classch_1_1_object.html#ac57605a5c14ab76dc7be7ec7fa74be81":[16,0,0,9,18],
+"classch_1_1_object.html#ac67ae0228db7343bdb8d408e11e19318":[16,0,0,9,24],
+"classch_1_1_object.html#acc6dfa0e69fd9c9647e4b242bfe6a93e":[16,0,0,9,12],
+"classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7":[16,0,0,9,0],
+"classch_1_1_object.html#ae38bc7ac84c1624c0d8145fa67ea8d85":[16,0,0,9,1],
+"classch_1_1_object.html#aeb86ec002c906c6845c7ae304435c1c7":[16,0,0,9,13],
+"classch_1_1_object.html#aef78a48151888bb0731a2e00cd0fa62c":[16,0,0,9,9],
+"classch_1_1_object.html#af7f8e3b47e518df640826bd2c6aac600":[16,0,0,9,15],
+"classch_1_1_object.html#af89246351b95fa11b2baa05b6d7ed191":[16,0,0,9,17],
+"classch_1_1_object.html#afe324e1fe370f7804a30e84da0a67556":[16,0,0,9,22],
+"classch_1_1_observation.html":[16,0,0,10],
+"classch_1_1_observation.html#a08892e94877d2006921a9e3b3007eb3b":[16,0,0,10,5],
+"classch_1_1_observation.html#a202167d5fed87ee27c287f1a7dd46e50":[16,0,0,10,12],
+"classch_1_1_observation.html#a56897e63ca73b158071633e3f379e8c5":[16,0,0,10,0],
+"classch_1_1_observation.html#a64da98f3d291c5f1b9cdd26d9e6999c5":[16,0,0,10,4],
+"classch_1_1_observation.html#a69698abc2c0a53c737e3e595d37f2b58":[16,0,0,10,7],
+"classch_1_1_observation.html#a6ecbfa5be95fb8fb644982c76f7e62f8":[16,0,0,10,11],
+"classch_1_1_observation.html#a74f4222e7dd540dc028563ba4923d3e8":[16,0,0,10,6],
+"classch_1_1_observation.html#a8069a2cfb78c84325ba023064930bd43":[16,0,0,10,13],
+"classch_1_1_observation.html#a89be1a9e99b14efd3d528195c3f8eb88":[16,0,0,10,16],
+"classch_1_1_observation.html#a95d19e58b38c6dd6313eab955309eeda":[16,0,0,10,9],
+"classch_1_1_observation.html#a987488ba4dcac7dee972febeeab0b648":[16,0,0,10,15],
+"classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a":[16,0,0,10,2],
+"classch_1_1_observation.html#ab61b8fc11b80ebd6136d3923a6d80300":[16,0,0,10,8],
+"classch_1_1_observation.html#abd0305355e2b59895fa3ee52bb89ec43":[16,0,0,10,1],
+"classch_1_1_observation.html#ad49842c7287e9746b332068e2915c6e7":[16,0,0,10,14],
+"classch_1_1_observation.html#adb67421c69ab33c4d4f5c343f93e7b2e":[16,0,0,10,10],
+"classch_1_1_observation.html#af37c17965ed6342871c1154df190e9cf":[16,0,0,10,3],
+"classch_1_1_parameter.html":[16,0,0,11],
+"classch_1_1_parameter.html#a0a997554cc52ac7b7860e376c3299d4b":[16,0,0,11,8],
+"classch_1_1_parameter.html#a1539eec34291394e236f4dc6d7a43279":[16,0,0,11,18],
+"classch_1_1_parameter.html#a23a0cca56da830a0bc521f5980de371c":[16,0,0,11,1],
+"classch_1_1_parameter.html#a241d3b9acedcf0c2de4d44646e288019":[16,0,0,11,21],
+"classch_1_1_parameter.html#a29a0eec868eb1dd17e7443f0e154c35c":[16,0,0,11,9],
+"classch_1_1_parameter.html#a2c1b75c9deb9a66a5065c6e67bb7eecf":[16,0,0,11,11],
+"classch_1_1_parameter.html#a49f2b0d9cc4170effcbb0005dd8760a2":[16,0,0,11,19],
+"classch_1_1_parameter.html#a4b23aafe9b144c9d6affc3a86d1efeb5":[16,0,0,11,22],
+"classch_1_1_parameter.html#a4c19bef9dbf6821e18477da3286377c6":[16,0,0,11,5],
+"classch_1_1_parameter.html#a51f57bf4e727f2024da96a2ae2e5cf76":[16,0,0,11,20],
+"classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec":[16,0,0,11,17],
+"classch_1_1_parameter.html#a72f08021fdbbc3f9760427363ea8e3a5":[16,0,0,11,10],
+"classch_1_1_parameter.html#a84965c0df39666449279066216b3f184":[16,0,0,11,16],
+"classch_1_1_parameter.html#aa4ee9592da987b521e06b99bb2323a68":[16,0,0,11,2],
+"classch_1_1_parameter.html#aac84fa2bc04bb36353fdb766d97bf89e":[16,0,0,11,13],
+"classch_1_1_parameter.html#aae9193801a4ac8da13c7b873d87f2e3e":[16,0,0,11,7],
+"classch_1_1_parameter.html#ab9f57f473beb19a385c769a104aee7cc":[16,0,0,11,23],
+"classch_1_1_parameter.html#abb14d062556c9445bdfa7c11293bfb50":[16,0,0,11,12],
+"classch_1_1_parameter.html#ac3be609032d840cf477cfa3cf7982c7a":[16,0,0,11,0],
+"classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff":[16,0,0,11,15],
+"classch_1_1_parameter.html#ad0958b8f9f2bbe6671bedce5005058f4":[16,0,0,11,14],
+"classch_1_1_parameter.html#ad1459e77cbe8a5a4814ca9b90be346fd":[16,0,0,11,3],
+"classch_1_1_parameter.html#ae6cafb3e152e109ff3e3e7b829eb58fe":[16,0,0,11,4],
+"classch_1_1_parameter.html#af57376e4f0eb43b4aa62fd18759f4a17":[16,0,0,11,6],
+"classch_1_1_process.html":[16,0,0,12],
+"classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20":[16,0,0,12,18],
+"classch_1_1_process.html#a178a4692175af3cb3f9699f424a03b30":[16,0,0,12,5],
+"classch_1_1_process.html#a23ead7f55f163bdb9cb9b1a3de30085d":[16,0,0,12,1],
+"classch_1_1_process.html#a25e01410aada0818fa20a95a30a96025":[16,0,0,12,21],
+"classch_1_1_process.html#a2e2e290f4c554cf76456180913188b7b":[16,0,0,12,17],
+"classch_1_1_process.html#a40aab277133c48b1852d33e6fdb35ecf":[16,0,0,12,15],
+"classch_1_1_process.html#a4f1a875514ceec5b7758112dc88b92ea":[16,0,0,12,8],
+"classch_1_1_process.html#a51ea6848ecb6b5030d96eff0b95ad99d":[16,0,0,12,9],
+"classch_1_1_process.html#a6dabe794611839385254eba00f46de2d":[16,0,0,12,6],
+"classch_1_1_process.html#a75dddf259aac5a30b652a7f838fccc5d":[16,0,0,12,13],
+"classch_1_1_process.html#a7fdac7c901b10af74e32709528d86f71":[16,0,0,12,10],
+"classch_1_1_process.html#a95f8396972318625650d3c8a773bb561":[16,0,0,12,12],
+"classch_1_1_process.html#a97283db14e35e64eef1f0231c8cdd64c":[16,0,0,12,16],
+"classch_1_1_process.html#aa2f461778b7c77eca21aad2989d15184":[16,0,0,12,0],
+"classch_1_1_process.html#ab41c6e3bf638dbb480404166185ed0a1":[16,0,0,12,19],
+"classch_1_1_process.html#ab648ac76032cada297b0eb54bdba471d":[16,0,0,12,3],
+"classch_1_1_process.html#abd6b57dd2665b2e4edfb9d648e09b6f8":[16,0,0,12,11],
+"classch_1_1_process.html#ac3de97aa921675b3cefe9d507c13e728":[16,0,0,12,2],
+"classch_1_1_process.html#ac6081e1fd33bfe87f28e42145d53c535":[16,0,0,12,7],
+"classch_1_1_process.html#acdd8a9af1254395822e5c250053397aa":[16,0,0,12,23],
+"classch_1_1_process.html#ad2d1aa710013a7a2eac899ed820a8f29":[16,0,0,12,22],
+"classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae":[16,0,0,12,14],
+"classch_1_1_process.html#ae59eb8e73740459d47205a32d23b517a":[16,0,0,12,4],
+"classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f":[16,0,0,12,20],
+"classch_1_1_systematic.html":[16,0,0,14],
+"classch_1_1_systematic.html#a003ef543320b8966fd66d85cc5a8cd87":[16,0,0,14,6],
+"classch_1_1_systematic.html#a02ece8cccb0b41cb2cb28145822875d8":[16,0,0,14,26],
+"classch_1_1_systematic.html#a115e6483141fc9c95c1c55f3e2aa97a3":[16,0,0,14,10],
+"classch_1_1_systematic.html#a14586d1bc593e9564ce15736ad8367c4":[16,0,0,14,4],
+"classch_1_1_systematic.html#a39ef082b25f09b1080c21d15a8a92187":[16,0,0,14,20],
+"classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb":[16,0,0,14,2],
+"classch_1_1_systematic.html#a400bca9bdb905d91e094ebd30a4aac7d":[16,0,0,14,24],
+"classch_1_1_systematic.html#a40fb079acc7cdf7acd81d7bccb653f8a":[16,0,0,14,11],
+"classch_1_1_systematic.html#a495c6a0c53d7bf58fbb8ef0666f34deb":[16,0,0,14,16],
+"classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff":[16,0,0,14,0],
+"classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049":[16,0,0,14,5],
+"classch_1_1_systematic.html#a6773e4814fb89d2258018895f078095a":[16,0,0,14,12],
+"classch_1_1_systematic.html#a7488a889a863e7ae1395ff80320edbd8":[16,0,0,14,23],
+"classch_1_1_systematic.html#a76e80983e8424d7326ea34eac9d2b661":[16,0,0,14,25],
+"classch_1_1_systematic.html#a780d467fd100c4c521fc604ddcea6f0f":[16,0,0,14,9],
+"classch_1_1_systematic.html#a95a30941a8b10c59b54a2d7bedd5c80e":[16,0,0,14,21],
+"classch_1_1_systematic.html#aa9b12a8b0ad6495226ab719f490dffc8":[16,0,0,14,19],
+"classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf":[16,0,0,14,15],
+"classch_1_1_systematic.html#ab0fc94bc1ba9eed9c747a6c1c40abba9":[16,0,0,14,22],
+"classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d":[16,0,0,14,3],
+"classch_1_1_systematic.html#ac02769c45caa0d41076ae1d92d5860ff":[16,0,0,14,13],
+"classch_1_1_systematic.html#accf5f1c59b7c712d701d879452597e94":[16,0,0,14,17],
+"classch_1_1_systematic.html#ad299d1cae11a0803583ae27a3adef31a":[16,0,0,14,8],
+"classch_1_1_systematic.html#ad58316d4253223444aa64d0d67ef4af5":[16,0,0,14,1],
+"classch_1_1_systematic.html#ad6299bae494e334e253e7486f7bff1d0":[16,0,0,14,7],
+"classch_1_1_systematic.html#ae0814d4e8b74020a7e8b8f37985aa882":[16,0,0,14,18],
+"classch_1_1_systematic.html#ae72c57591746155a32cd36adc350e92a":[16,0,0,14,27],
+"classch_1_1_systematic.html#ae9e66ad2fbbe46b133505fe2b9906a78":[16,0,0,14,14],
"classch_1_1syst_1_1_syst_map.html":[16,0,0,0,7],
"classch_1_1syst_1_1_syst_map.html#a02ae9fcc37d82f83f890676f214a2136":[16,0,0,0,7,3],
"classch_1_1syst_1_1_syst_map.html#a13cc5ac78628dac053f52060d9fe7c0d":[16,0,0,0,7,2],
@@ -181,8 +194,8 @@ var NAVTREEINDEX2 =
"functions_d.html":[16,2,0,3],
"functions_e.html":[16,2,0,4],
"functions_f.html":[16,2,0,5],
-"functions_func.html":[16,2,1,0],
"functions_func.html":[16,2,1],
+"functions_func.html":[16,2,1,0],
"functions_func_b.html":[16,2,1,1],
"functions_func_c.html":[16,2,1,2],
"functions_func_d.html":[16,2,1,3],
@@ -226,8 +239,8 @@ var NAVTREEINDEX2 =
"globals_func.html":[17,1,1],
"globals_vars.html":[17,1,2],
"hierarchy.html":[16,1],
-"index.html":[0],
"index.html":[],
+"index.html":[0],
"index.html#getting-started":[0,0],
"index.html#high-level-tools":[0,1],
"index.html#note":[0,2],
@@ -236,18 +249,5 @@ var NAVTREEINDEX2 =
"intro1.html#ex1-p2":[1,1],
"intro1.html#ex1-p3":[1,2],
"intro1.html#ex1-p4":[1,3],
-"intro2.html":[2],
-"intro2.html#ex2-p1":[2,0],
-"intro2.html#ex2-p2":[2,1],
-"intro2.html#ex2-p3":[2,2],
-"intro2.html#ex2-p4":[2,3],
-"intro2.html#ex2-p5":[2,4],
-"intro3.html":[3],
-"intro_morph.html":[7],
-"intro_morph.html#BuildRooMorph":[7,0],
-"intro_morph.html#MSSMModel":[7,3],
-"intro_morph.html#MSSMMorph":[7,2],
-"intro_morph.html#SMMorph":[7,1],
-"introrun1_h_t_t.html":[8],
-"introrun1_h_t_t.html#run1HTTHhhAZh":[8,2]
+"intro2.html":[2]
};
diff --git a/navtreeindex3.js b/navtreeindex3.js
index 0e68abde225..892d6b5fbca 100644
--- a/navtreeindex3.js
+++ b/navtreeindex3.js
@@ -1,5 +1,18 @@
var NAVTREEINDEX3 =
{
+"intro2.html#ex2-p1":[2,0],
+"intro2.html#ex2-p2":[2,1],
+"intro2.html#ex2-p3":[2,2],
+"intro2.html#ex2-p4":[2,3],
+"intro2.html#ex2-p5":[2,4],
+"intro3.html":[3],
+"intro_morph.html":[7],
+"intro_morph.html#BuildRooMorph":[7,0],
+"intro_morph.html#MSSMModel":[7,3],
+"intro_morph.html#MSSMMorph":[7,2],
+"intro_morph.html#SMMorph":[7,1],
+"introrun1_h_t_t.html":[8],
+"introrun1_h_t_t.html#run1HTTHhhAZh":[8,2],
"introrun1_h_t_t.html#run1HTTMSSM":[8,3],
"introrun1_h_t_t.html#run1HTTSM":[8,1],
"introrun1_h_t_t.html#run1HTTsystematics":[8,0],
@@ -15,8 +28,8 @@ var NAVTREEINDEX3 =
"limits.html#limits-pre-vs-post":[6,1,0],
"md_docs__charged_higgs.html":[9],
"md_docs__hybrid_new_grid.html":[13],
-"namespacech.html":[15,0,0],
"namespacech.html":[16,0,0],
+"namespacech.html":[15,0,0],
"namespacech_1_1syst.html":[15,0,0,0],
"namespacech_1_1syst.html":[16,0,0,0],
"namespacech_1_1syst_1_1detail.html":[15,0,0,0,0],
@@ -128,32 +141,32 @@ var NAVTREEINDEX3 =
"struct_col_info.html#a89d79108973a299d202a3c3029aacaf6":[16,0,2,4],
"struct_col_info.html#ac7f91521ac9e960f88219cbf4e3d4bbc":[16,0,2,2],
"struct_col_info.html#ae8b8720618660a433e3965c626a00580":[16,0,2,0],
-"structch_1_1_hist_mapping.html":[16,0,0,7],
-"structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a":[16,0,0,7,9],
-"structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377":[16,0,0,7,0],
-"structch_1_1_hist_mapping.html#a299addf7ee94f1d2c540dd3c34cf9cbd":[16,0,0,7,5],
-"structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8":[16,0,0,7,14],
-"structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857":[16,0,0,7,11],
-"structch_1_1_hist_mapping.html#a530f04d5c47606a344b2f2cacbc98c12":[16,0,0,7,2],
-"structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310":[16,0,0,7,12],
-"structch_1_1_hist_mapping.html#a656a0872da1b34c12d70a31cdf628a01":[16,0,0,7,7],
-"structch_1_1_hist_mapping.html#a87115b750963b4e91c4b86271be8beb6":[16,0,0,7,8],
-"structch_1_1_hist_mapping.html#a877c6f1d8752de305399a94ec8dc3c81":[16,0,0,7,4],
-"structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f":[16,0,0,7,1],
-"structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816":[16,0,0,7,10],
-"structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2":[16,0,0,7,13],
-"structch_1_1_hist_mapping.html#ac9bd145bd1e199691de3fae76594580d":[16,0,0,7,6],
-"structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7":[16,0,0,7,15],
-"structch_1_1_hist_mapping.html#addb7c4aaf346ee4e09fcd732e126d887":[16,0,0,7,3],
-"structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122":[16,0,0,7,16],
-"structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb":[16,0,0,7,17],
-"structch_1_1_s_over_b_info.html":[16,0,0,12],
-"structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924":[16,0,0,12,5],
-"structch_1_1_s_over_b_info.html#a4b9f6bf1c14831274dd072306f69c5ef":[16,0,0,12,3],
-"structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1":[16,0,0,12,0],
-"structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2":[16,0,0,12,2],
-"structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96":[16,0,0,12,1],
-"structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a":[16,0,0,12,4],
+"structch_1_1_hist_mapping.html":[16,0,0,8],
+"structch_1_1_hist_mapping.html#a082b489ab66940ac856997bfcd1ced7a":[16,0,0,8,9],
+"structch_1_1_hist_mapping.html#a13159d261f11d033b6281333d9e81377":[16,0,0,8,0],
+"structch_1_1_hist_mapping.html#a299addf7ee94f1d2c540dd3c34cf9cbd":[16,0,0,8,5],
+"structch_1_1_hist_mapping.html#a3a7318d36a94d5902b6da6382051efd8":[16,0,0,8,14],
+"structch_1_1_hist_mapping.html#a3f5bb3146facf941b757e6af4c0ac857":[16,0,0,8,11],
+"structch_1_1_hist_mapping.html#a530f04d5c47606a344b2f2cacbc98c12":[16,0,0,8,2],
+"structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310":[16,0,0,8,12],
+"structch_1_1_hist_mapping.html#a656a0872da1b34c12d70a31cdf628a01":[16,0,0,8,7],
+"structch_1_1_hist_mapping.html#a87115b750963b4e91c4b86271be8beb6":[16,0,0,8,8],
+"structch_1_1_hist_mapping.html#a877c6f1d8752de305399a94ec8dc3c81":[16,0,0,8,4],
+"structch_1_1_hist_mapping.html#a963916cdc08c796c0146d2ec63746d9f":[16,0,0,8,1],
+"structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816":[16,0,0,8,10],
+"structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2":[16,0,0,8,13],
+"structch_1_1_hist_mapping.html#ac9bd145bd1e199691de3fae76594580d":[16,0,0,8,6],
+"structch_1_1_hist_mapping.html#ad83659fc57397fca2243f3ad26eb44a7":[16,0,0,8,15],
+"structch_1_1_hist_mapping.html#addb7c4aaf346ee4e09fcd732e126d887":[16,0,0,8,3],
+"structch_1_1_hist_mapping.html#addf039e15f8e0331e04e90f7d05b7122":[16,0,0,8,16],
+"structch_1_1_hist_mapping.html#ae18110c613c02c72501d599f71e26dfb":[16,0,0,8,17],
+"structch_1_1_s_over_b_info.html":[16,0,0,13],
+"structch_1_1_s_over_b_info.html#a0756a714ee23117ba20c261e9c03c924":[16,0,0,13,5],
+"structch_1_1_s_over_b_info.html#a4b9f6bf1c14831274dd072306f69c5ef":[16,0,0,13,3],
+"structch_1_1_s_over_b_info.html#a4e552b096fd68bb3ebf2de40bc2cf9d1":[16,0,0,13,0],
+"structch_1_1_s_over_b_info.html#aa596edaf3d5bcea0af28583b362a33c2":[16,0,0,13,2],
+"structch_1_1_s_over_b_info.html#ac6c910ec7a9f9273987ef29a93d3ee96":[16,0,0,13,1],
+"structch_1_1_s_over_b_info.html#ae94fc8af21cd3927f289993407ce417a":[16,0,0,13,4],
"structch_1_1syst_1_1analysis.html":[16,0,0,0,0],
"structch_1_1syst_1_1analysis.html#a11b01686f41ab63649080f7bc4aa9aaa":[16,0,0,0,0,0],
"structch_1_1syst_1_1bin.html":[16,0,0,0,1],
diff --git a/search/all_0.js b/search/all_0.js
index a68f0cd3cca..d8669c4dd12 100644
--- a/search/all_0.js
+++ b/search/all_0.js
@@ -1,6 +1,7 @@
var searchData=
[
['addbinbybin',['AddBinByBin',['../classch_1_1_bin_by_bin_factory.html#ab097f067dce0a722af70dd86bf1b5398',1,'ch::BinByBinFactory::AddBinByBin()'],['../classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)'],['../classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester &other)']]],
+ ['adddatacardlineatend',['AddDatacardLineAtEnd',['../classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02',1,'ch::CombineHarvester']]],
['addmssmsystematics',['AddMSSMSystematics',['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)']]],
['addmssmupdatesystematics_5fem',['AddMSSMUpdateSystematics_em',['../namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#acec5cdd79f370c7bee88f4de418c9423',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb)']]],
['addmssmupdatesystematics_5fet_5fmt',['AddMSSMUpdateSystematics_et_mt',['../namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a2718097dd3af197ac2ad9d728b70ddde',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb)']]],
@@ -20,8 +21,8 @@ var searchData=
['addworkspace',['AddWorkspace',['../classch_1_1_combine_harvester.html#a17500b104a107f1ca619a9b659d4a76d',1,'ch::CombineHarvester']]],
['algorithm_2eh',['Algorithm.h',['../_algorithm_8h.html',1,'']]],
['all_5fattributes',['all_attributes',['../classch_1_1_object.html#ac67ae0228db7343bdb8d408e11e19318',1,'ch::Object']]],
- ['analysis',['analysis',['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis()'],['../classch_1_1_object.html#acc6dfa0e69fd9c9647e4b242bfe6a93e',1,'ch::Object::analysis()']]],
['analysis',['analysis',['../structch_1_1syst_1_1analysis.html',1,'ch::syst']]],
+ ['analysis',['analysis',['../classch_1_1_combine_harvester.html#a672af065808c26e0795259876787c57f',1,'ch::CombineHarvester::analysis()'],['../classch_1_1_object.html#acc6dfa0e69fd9c9647e4b242bfe6a93e',1,'ch::Object::analysis()']]],
['analysis_5fset',['analysis_set',['../classch_1_1_combine_harvester.html#ad2c92025d60e32b438a3445aa756d631',1,'ch::CombineHarvester']]],
['any_5fof',['any_of',['../namespacech.html#a9ae81b01c3e51356f05c2734d4e7fd8d',1,'ch']]],
['applygraphyoffset',['ApplyGraphYOffset',['../namespaceplotting.html#a9199ca7348c6e70e13e9ec5205437f70',1,'plotting']]],
@@ -30,8 +31,8 @@ var searchData=
['asymm',['asymm',['../classch_1_1_systematic.html#a495c6a0c53d7bf58fbb8ef0666f34deb',1,'ch::Systematic']]],
['attr',['attr',['../classch_1_1_combine_harvester.html#a634f83792bbce25a8ceed4621fbb6ca2',1,'ch::CombineHarvester']]],
['attribute',['attribute',['../classch_1_1_object.html#a4c0ab9bc1a210c618008faa8dd72f65d',1,'ch::Object']]],
- ['autorebin',['AutoRebin',['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin']]],
['autorebin',['AutoRebin',['../classch_1_1_auto_rebin.html',1,'ch']]],
+ ['autorebin',['AutoRebin',['../classch_1_1_auto_rebin.html#a9305a4b7d600e31a17ccc6606d488825',1,'ch::AutoRebin']]],
['autorebin_2ecc',['AutoRebin.cc',['../_auto_rebin_8cc.html',1,'']]],
['autorebin_2eh',['AutoRebin.h',['../_auto_rebin_8h.html',1,'']]],
['azhsystematics_2ecc',['AZhSystematics.cc',['../_a_zh_systematics_8cc.html',1,'']]]
diff --git a/search/all_10.js b/search/all_10.js
index 49e99d5c56f..23f64cc54ba 100644
--- a/search/all_10.js
+++ b/search/all_10.js
@@ -4,6 +4,7 @@ var searchData=
['scale',['scale',['../classch_1_1_systematic.html#ae9e66ad2fbbe46b133505fe2b9906a78',1,'ch::Systematic']]],
['set',['Set',['../namespaceplotting.html#a30511a379335c5e5c295f88dc146e448',1,'plotting']]],
['set2vec',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]],
+ ['set_5fall_5fattributes',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]],
['set_5fanalysis',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]],
['set_5fasymm',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]],
['set_5fattribute',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]],
@@ -18,7 +19,8 @@ var searchData=
['set_5fmass',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]],
['set_5fname',['set_name',['../classch_1_1_parameter.html#a4c19bef9dbf6821e18477da3286377c6',1,'ch::Parameter::set_name()'],['../classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049',1,'ch::Systematic::set_name()']]],
['set_5fnorm',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]],
- ['set_5fpdf',['set_pdf',['../classch_1_1_process.html#a29daf76545fd7b93af93aa0b42af1790',1,'ch::Process']]],
+ ['set_5fobservable',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]],
+ ['set_5fpdf',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process']]],
['set_5fprocess',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]],
['set_5frange',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]],
['set_5frange_5fd',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]],
@@ -46,6 +48,7 @@ var searchData=
['setfromprocs',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]],
['setfromsysts',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]],
['setgroup',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]],
+ ['sethorizontalmorphingvariable',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]],
['setmergesaturatedbins',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]],
['setmergethreshold',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]],
['setmergezerobins',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]],
@@ -88,8 +91,8 @@ var searchData=
['syst_5fpattern',['syst_pattern',['../structch_1_1_hist_mapping.html#ab8e25efafca82f1152d94819130157d2',1,'ch::HistMapping']]],
['syst_5ftype',['syst_type',['../classch_1_1_combine_harvester.html#af13ff7dd8c281cd9e9cfd6b11fc05b95',1,'ch::CombineHarvester']]],
['syst_5ftype_5fset',['syst_type_set',['../classch_1_1_combine_harvester.html#a6db7fd938efd2ce05454a72c4b6cbc78',1,'ch::CombineHarvester']]],
- ['systematic',['Systematic',['../classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff',1,'ch::Systematic::Systematic()'],['../classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb',1,'ch::Systematic::Systematic(Systematic const &other)'],['../classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d',1,'ch::Systematic::Systematic(Systematic &&other)']]],
['systematic',['Systematic',['../classch_1_1_systematic.html',1,'ch']]],
+ ['systematic',['Systematic',['../classch_1_1_systematic.html#a4e1cc3aec9d8ad8e8a482a07dbbc4eff',1,'ch::Systematic::Systematic()'],['../classch_1_1_systematic.html#a3a32c848411fbc9ff19899670a3c9bfb',1,'ch::Systematic::Systematic(Systematic const &other)'],['../classch_1_1_systematic.html#abfaf59dd68bf8a9346fc5a9ce3bb745d',1,'ch::Systematic::Systematic(Systematic &&other)']]],
['systematic_2ecc',['Systematic.cc',['../_systematic_8cc.html',1,'']]],
['systematic_2eh',['Systematic.h',['../_systematic_8h.html',1,'']]],
['systematics_2eh',['Systematics.h',['../_systematics_8h.html',1,'']]],
diff --git a/search/all_2.js b/search/all_2.js
index a5687b5bdd4..c60382e74c4 100644
--- a/search/all_2.js
+++ b/search/all_2.js
@@ -13,6 +13,7 @@ var searchData=
['channel',['channel',['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel()'],['../classch_1_1_object.html#a60ff05363e905e268f4a85bc9d2a63c1',1,'ch::Object::channel()']]],
['channel_5fset',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]],
['chargedhiggs_2emd',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]],
+ ['cleardatacardlinesatend',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]],
['clonedscaledshape',['ClonedScaledShape',['../classch_1_1_observation.html#a6ecbfa5be95fb8fb644982c76f7e62f8',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a95f8396972318625650d3c8a773bb561',1,'ch::Process::ClonedScaledShape()']]],
['clonedshape',['ClonedShape',['../classch_1_1_observation.html#adb67421c69ab33c4d4f5c343f93e7b2e',1,'ch::Observation::ClonedShape()'],['../classch_1_1_process.html#abd6b57dd2665b2e4edfb9d648e09b6f8',1,'ch::Process::ClonedShape()']]],
['clonedshaped',['ClonedShapeD',['../classch_1_1_systematic.html#aa9b12a8b0ad6495226ab719f490dffc8',1,'ch::Systematic']]],
@@ -25,6 +26,10 @@ var searchData=
['cloneprocspy',['CloneProcsPy',['../_combine_harvester___python_8h.html#ae21a869ed5a48874e8e7583cee9b536e',1,'CloneProcsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#ae21a869ed5a48874e8e7583cee9b536e',1,'CloneProcsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc']]],
['clonesysts',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]],
['clonesystspy',['CloneSystsPy',['../_combine_harvester___python_8h.html#ad5bc5632695a0d86c427ff2dbebbf092',1,'CloneSystsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#ad5bc5632695a0d86c427ff2dbebbf092',1,'CloneSystsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc']]],
+ ['cmshistfuncfactory',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory']]],
+ ['cmshistfuncfactory',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch']]],
+ ['cmshistfuncfactory_2ecc',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]],
+ ['cmshistfuncfactory_2eh',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]],
['col_5fstore',['COL_STORE',['../namespaceplotting.html#a4642a0d8351a06f55e85e7d5f5d00f22',1,'plotting']]],
['colinfo',['ColInfo',['../struct_col_info.html',1,'']]],
['combineharvester',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch']]],
diff --git a/search/all_5.js b/search/all_5.js
index e8f8c22fcb5..5096191b7b8 100644
--- a/search/all_5.js
+++ b/search/all_5.js
@@ -13,7 +13,7 @@ var searchData=
['filterprocspy',['FilterProcsPy',['../_combine_harvester___python_8h.html#a56ae7ecb5e38f893261f069dfdf2bd71',1,'FilterProcsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#a56ae7ecb5e38f893261f069dfdf2bd71',1,'FilterProcsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc']]],
['filtersysts',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]],
['filtersystspy',['FilterSystsPy',['../_combine_harvester___python_8h.html#a012558445da84ccfe7ddc24ad2a7eb75',1,'FilterSystsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#a012558445da84ccfe7ddc24ad2a7eb75',1,'FilterSystsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc']]],
- ['findaddpdf',['FindAddPdf',['../namespacech.html#a0d8871a3c13b62ac6fefeb9a87b5e44a',1,'ch']]],
+ ['findaddpdf',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]],
['findcrossingswithspline',['FindCrossingsWithSpline',['../namespaceplotting.html#a930ca7cb0408b290b0db1c79f5911105',1,'plotting']]],
['findnewbinning',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]],
['fixbothranges',['FixBothRanges',['../namespaceplotting.html#a436e05154225b06e1a13a22dbffd2096',1,'plotting']]],
diff --git a/search/all_d.js b/search/all_d.js
index 6963ddb9c5b..a49499286c2 100644
--- a/search/all_d.js
+++ b/search/all_d.js
@@ -4,6 +4,7 @@ var searchData=
['object',['Object',['../classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7',1,'ch::Object::Object()'],['../classch_1_1_object.html#ab43915289318053f138083f1e8720646',1,'ch::Object::Object(Object const &other)'],['../classch_1_1_object.html#a1d58aeeeea90ab0492d114ad75b9da66',1,'ch::Object::Object(Object &&other)']]],
['object_2ecc',['Object.cc',['../_object_8cc.html',1,'']]],
['object_2eh',['Object.h',['../_object_8h.html',1,'']]],
+ ['observable',['observable',['../classch_1_1_process.html#a25e01410aada0818fa20a95a30a96025',1,'ch::Process']]],
['observation',['Observation',['../classch_1_1_observation.html#a56897e63ca73b158071633e3f379e8c5',1,'ch::Observation::Observation()'],['../classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a',1,'ch::Observation::Observation(Observation const &other)'],['../classch_1_1_observation.html#af37c17965ed6342871c1154df190e9cf',1,'ch::Observation::Observation(Observation &&other)']]],
['observation',['Observation',['../classch_1_1_observation.html',1,'ch']]],
['observation_2ecc',['Observation.cc',['../_observation_8cc.html',1,'']]],
diff --git a/search/all_e.js b/search/all_e.js
index 2d350a320c7..80c52a9f46e 100644
--- a/search/all_e.js
+++ b/search/all_e.js
@@ -13,7 +13,7 @@ var searchData=
['parsedatacard',['ParseDatacard',['../classch_1_1_combine_harvester.html#aa65fe68ae736e6b612a9c35f42adf02f',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string const &analysis, std::string const &era, std::string const &channel, int bin_id, std::string const &mass)'],['../classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string parse_rule="")']]],
['parsefilelines',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]],
['pattern',['pattern',['../structch_1_1_hist_mapping.html#a5705aeb8c0ff8925de9fd5aaa5fd7310',1,'ch::HistMapping']]],
- ['pdf',['pdf',['../classch_1_1_process.html#afbce7b1c6d9fc6cfcebdf4b3c54e6bd3',1,'ch::Process']]],
+ ['pdf',['pdf',['../classch_1_1_process.html#a40aab277133c48b1852d33e6fdb35ecf',1,'ch::Process']]],
['pdfs',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]],
['plotting',['plotting',['../namespaceplotting.html',1,'']]],
['plotting_2eh',['Plotting.h',['../_plotting_8h.html',1,'']]],
@@ -32,8 +32,8 @@ var searchData=
['printprocs',['PrintProcs',['../classch_1_1_combine_harvester.html#ac65ce5523ef5b0fdcab6c2c6d21b49f4',1,'ch::CombineHarvester']]],
['printsysts',['PrintSysts',['../classch_1_1_combine_harvester.html#acee50a734519bf510935610238641b7d',1,'ch::CombineHarvester']]],
['process',['process',['../structch_1_1_hist_mapping.html#aa63cc6db2afbb37ee7559452b7966816',1,'ch::HistMapping::process()'],['../classch_1_1_combine_harvester.html#a3afe330e302ad37b9fd69a821b8b4099',1,'ch::CombineHarvester::process()'],['../classch_1_1_object.html#a0b0c5f14564e159d11bf325b7a08dfba',1,'ch::Object::process()'],['../classch_1_1_process.html#aa2f461778b7c77eca21aad2989d15184',1,'ch::Process::Process()'],['../classch_1_1_process.html#ac3de97aa921675b3cefe9d507c13e728',1,'ch::Process::Process(Process const &other)'],['../classch_1_1_process.html#ab648ac76032cada297b0eb54bdba471d',1,'ch::Process::Process(Process &&other)']]],
- ['process',['Process',['../classch_1_1_process.html',1,'ch']]],
['process',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst']]],
+ ['process',['Process',['../classch_1_1_process.html',1,'ch']]],
['process_2ecc',['Process.cc',['../_process_8cc.html',1,'']]],
['process_2eh',['Process.h',['../_process_8h.html',1,'']]],
['process_5frgx',['process_rgx',['../classch_1_1_combine_harvester.html#a1745d39918ec65cf539fcf72b03f6329',1,'ch::CombineHarvester']]],
diff --git a/search/all_f.js b/search/all_f.js
index 57ce87a0bf0..7042700d1e9 100644
--- a/search/all_f.js
+++ b/search/all_f.js
@@ -20,5 +20,6 @@ var searchData=
['restorebinning',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]],
['rezerotgraph',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'ReZeroTGraph(): Plotting.h'],['../namespaceplotting.html#a273bab5cfe205a69a469a86828ab3f3b',1,'plotting.ReZeroTGraph()']]],
['roccurvefrom1dhists',['RocCurveFrom1DHists',['../namespaceplotting.html#a0d8bc74b28155809f534df954fe60355',1,'plotting']]],
- ['roomorphingpdf_2emd',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]]
+ ['roomorphingpdf_2emd',['RooMorphingPdf.md',['../_roo_morphing_pdf_8md.html',1,'']]],
+ ['run',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory']]]
];
diff --git a/search/classes_2.js b/search/classes_2.js
index 5c52c595784..1adb8565cf2 100644
--- a/search/classes_2.js
+++ b/search/classes_2.js
@@ -2,6 +2,7 @@ var searchData=
[
['cardwriter',['CardWriter',['../classch_1_1_card_writer.html',1,'ch']]],
['channel',['channel',['../structch_1_1syst_1_1channel.html',1,'ch::syst']]],
+ ['cmshistfuncfactory',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html',1,'ch']]],
['colinfo',['ColInfo',['../struct_col_info.html',1,'']]],
['combineharvester',['CombineHarvester',['../classch_1_1_combine_harvester.html',1,'ch']]],
['convert_5fcpp_5fmap_5fto_5fpy_5fdict',['convert_cpp_map_to_py_dict',['../structconvert__cpp__map__to__py__dict.html',1,'']]],
diff --git a/search/classes_8.js b/search/classes_8.js
index da5fc825c29..0a3c7c7c9b2 100644
--- a/search/classes_8.js
+++ b/search/classes_8.js
@@ -1,6 +1,6 @@
var searchData=
[
['parameter',['Parameter',['../classch_1_1_parameter.html',1,'ch']]],
- ['process',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst']]],
- ['process',['Process',['../classch_1_1_process.html',1,'ch']]]
+ ['process',['Process',['../classch_1_1_process.html',1,'ch']]],
+ ['process',['process',['../structch_1_1syst_1_1process.html',1,'ch::syst']]]
];
diff --git a/search/files_2.js b/search/files_2.js
index f0e8d5a6d64..9241a2169b1 100644
--- a/search/files_2.js
+++ b/search/files_2.js
@@ -3,6 +3,8 @@ var searchData=
['cardwriter_2ecc',['CardWriter.cc',['../_card_writer_8cc.html',1,'']]],
['cardwriter_2eh',['CardWriter.h',['../_card_writer_8h.html',1,'']]],
['chargedhiggs_2emd',['ChargedHiggs.md',['../_charged_higgs_8md.html',1,'']]],
+ ['cmshistfuncfactory_2ecc',['CMSHistFuncFactory.cc',['../_c_m_s_hist_func_factory_8cc.html',1,'']]],
+ ['cmshistfuncfactory_2eh',['CMSHistFuncFactory.h',['../_c_m_s_hist_func_factory_8h.html',1,'']]],
['combineharvester_2ecc',['CombineHarvester.cc',['../_combine_harvester_8cc.html',1,'']]],
['combineharvester_2eh',['CombineHarvester.h',['../_combine_harvester_8h.html',1,'']]],
['combineharvester_5fcreation_2ecc',['CombineHarvester_Creation.cc',['../_combine_harvester___creation_8cc.html',1,'']]],
diff --git a/search/functions_0.js b/search/functions_0.js
index 3b58f57df29..5e8e438c521 100644
--- a/search/functions_0.js
+++ b/search/functions_0.js
@@ -1,6 +1,7 @@
var searchData=
[
['addbinbybin',['AddBinByBin',['../classch_1_1_bin_by_bin_factory.html#ab097f067dce0a722af70dd86bf1b5398',1,'ch::BinByBinFactory::AddBinByBin()'],['../classch_1_1_combine_harvester.html#a20c5575a1983fbd8ff1b4232128610ff',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester *other)'],['../classch_1_1_combine_harvester.html#aaf7c0e7a370d1a43290815e818058735',1,'ch::CombineHarvester::AddBinByBin(double threshold, bool fixed_norm, CombineHarvester &other)']]],
+ ['adddatacardlineatend',['AddDatacardLineAtEnd',['../classch_1_1_combine_harvester.html#a59b5a637f7f11c2ee77a9b07bc1deb02',1,'ch::CombineHarvester']]],
['addmssmsystematics',['AddMSSMSystematics',['../namespacech.html#aa94f943eeda46d951fd794b7532944ed',1,'ch::AddMSSMSystematics(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a597c0a29e463a96eb05f9df8cb9dfe90',1,'ch::AddMSSMSystematics(CombineHarvester &cb)']]],
['addmssmupdatesystematics_5fem',['AddMSSMUpdateSystematics_em',['../namespacech.html#ae6eebbd180b87701e7724c3db9d6cd5a',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#acec5cdd79f370c7bee88f4de418c9423',1,'ch::AddMSSMUpdateSystematics_em(CombineHarvester &cb)']]],
['addmssmupdatesystematics_5fet_5fmt',['AddMSSMUpdateSystematics_et_mt',['../namespacech.html#a0d7482a8b0989a1b6b7fe1689c65b0e1',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb, CombineHarvester src)'],['../namespacech.html#a2718097dd3af197ac2ad9d728b70ddde',1,'ch::AddMSSMUpdateSystematics_et_mt(CombineHarvester &cb)']]],
diff --git a/search/functions_10.js b/search/functions_10.js
index 505b95235df..bc64cb8d689 100644
--- a/search/functions_10.js
+++ b/search/functions_10.js
@@ -3,6 +3,7 @@ var searchData=
['scale',['scale',['../classch_1_1_systematic.html#ae9e66ad2fbbe46b133505fe2b9906a78',1,'ch::Systematic']]],
['set',['Set',['../namespaceplotting.html#a30511a379335c5e5c295f88dc146e448',1,'plotting']]],
['set2vec',['Set2Vec',['../namespacech.html#a5e23234ab65cfa48c99b83d94e291125',1,'ch']]],
+ ['set_5fall_5fattributes',['set_all_attributes',['../classch_1_1_object.html#a8c779be0d578124a56a17031abd86c9f',1,'ch::Object']]],
['set_5fanalysis',['set_analysis',['../classch_1_1_object.html#a1bae4062339f6b27251fa40eb3360120',1,'ch::Object']]],
['set_5fasymm',['set_asymm',['../classch_1_1_systematic.html#aae12e2d99a326bfe80a821cb5885afbf',1,'ch::Systematic']]],
['set_5fattribute',['set_attribute',['../classch_1_1_object.html#a7fdcd9b776c2fa52ad292ef857dd285b',1,'ch::Object']]],
@@ -17,7 +18,8 @@ var searchData=
['set_5fmass',['set_mass',['../classch_1_1_object.html#a5c94a9f7878cd40ca8aa8f701b6953e3',1,'ch::Object']]],
['set_5fname',['set_name',['../classch_1_1_parameter.html#a4c19bef9dbf6821e18477da3286377c6',1,'ch::Parameter::set_name()'],['../classch_1_1_systematic.html#a5b8ccb1b97744d1b4c2b9e5f410c4049',1,'ch::Systematic::set_name()']]],
['set_5fnorm',['set_norm',['../classch_1_1_process.html#a0d192379f39205b78311bd0d8cb13f20',1,'ch::Process']]],
- ['set_5fpdf',['set_pdf',['../classch_1_1_process.html#a29daf76545fd7b93af93aa0b42af1790',1,'ch::Process']]],
+ ['set_5fobservable',['set_observable',['../classch_1_1_process.html#af8158fc6ada12e951a6c84504d05444f',1,'ch::Process']]],
+ ['set_5fpdf',['set_pdf',['../classch_1_1_process.html#ad7adabf3df5395b10b80c77af00648ae',1,'ch::Process']]],
['set_5fprocess',['set_process',['../classch_1_1_object.html#a3515d3c5453c0141c198718eb7b4bd03',1,'ch::Object']]],
['set_5frange',['set_range',['../classch_1_1_parameter.html#a63f525de6f8c58439e852c0224ab2fec',1,'ch::Parameter']]],
['set_5frange_5fd',['set_range_d',['../classch_1_1_parameter.html#ac6d7d553f9a6eeb1c06105fc531000ff',1,'ch::Parameter']]],
@@ -45,6 +47,7 @@ var searchData=
['setfromprocs',['SetFromProcs',['../classch_1_1_combine_harvester.html#a7a0c6913b055e11798269034ae324298',1,'ch::CombineHarvester']]],
['setfromsysts',['SetFromSysts',['../classch_1_1_combine_harvester.html#a6c60a401231bfded23a56abe3f6dbf77',1,'ch::CombineHarvester']]],
['setgroup',['SetGroup',['../classch_1_1_combine_harvester.html#a5d75e03de3d628f7281a2e6914722bc5',1,'ch::CombineHarvester']]],
+ ['sethorizontalmorphingvariable',['SetHorizontalMorphingVariable',['../classch_1_1_c_m_s_hist_func_factory.html#a73f46125c448b221340e3573565645a3',1,'ch::CMSHistFuncFactory']]],
['setmergesaturatedbins',['SetMergeSaturatedBins',['../classch_1_1_bin_by_bin_factory.html#a7240cc3c8d9be4d77e3e041256397e8f',1,'ch::BinByBinFactory']]],
['setmergethreshold',['SetMergeThreshold',['../classch_1_1_bin_by_bin_factory.html#aa983d4e391adbf5a7af40458a3ffc062',1,'ch::BinByBinFactory']]],
['setmergezerobins',['SetMergeZeroBins',['../classch_1_1_bin_by_bin_factory.html#a57a7a111d2b683912cb70e5e9786432c',1,'ch::BinByBinFactory']]],
diff --git a/search/functions_2.js b/search/functions_2.js
index df18a095215..25ecfae0f9d 100644
--- a/search/functions_2.js
+++ b/search/functions_2.js
@@ -3,6 +3,7 @@ var searchData=
['cardwriter',['CardWriter',['../classch_1_1_card_writer.html#ac6b92918c967a8177add4d72bfa44e90',1,'ch::CardWriter']]],
['channel',['channel',['../classch_1_1_combine_harvester.html#af0aa39911df61ce140c97b13ffde77e9',1,'ch::CombineHarvester::channel()'],['../classch_1_1_object.html#a60ff05363e905e268f4a85bc9d2a63c1',1,'ch::Object::channel()']]],
['channel_5fset',['channel_set',['../classch_1_1_combine_harvester.html#aa8d68c05c6be27db6568098a15f07e5c',1,'ch::CombineHarvester']]],
+ ['cleardatacardlinesatend',['ClearDatacardLinesAtEnd',['../classch_1_1_combine_harvester.html#ac431bdfafad282e891915f7488f43bce',1,'ch::CombineHarvester']]],
['clonedscaledshape',['ClonedScaledShape',['../classch_1_1_observation.html#a6ecbfa5be95fb8fb644982c76f7e62f8',1,'ch::Observation::ClonedScaledShape()'],['../classch_1_1_process.html#a95f8396972318625650d3c8a773bb561',1,'ch::Process::ClonedScaledShape()']]],
['clonedshape',['ClonedShape',['../classch_1_1_observation.html#adb67421c69ab33c4d4f5c343f93e7b2e',1,'ch::Observation::ClonedShape()'],['../classch_1_1_process.html#abd6b57dd2665b2e4edfb9d648e09b6f8',1,'ch::Process::ClonedShape()']]],
['clonedshaped',['ClonedShapeD',['../classch_1_1_systematic.html#aa9b12a8b0ad6495226ab719f490dffc8',1,'ch::Systematic']]],
@@ -15,6 +16,7 @@ var searchData=
['cloneprocspy',['CloneProcsPy',['../_combine_harvester___python_8h.html#ae21a869ed5a48874e8e7583cee9b536e',1,'CloneProcsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#ae21a869ed5a48874e8e7583cee9b536e',1,'CloneProcsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc']]],
['clonesysts',['CloneSysts',['../namespacech.html#aa9eced43e8f467639564c24f2203f818',1,'ch']]],
['clonesystspy',['CloneSystsPy',['../_combine_harvester___python_8h.html#ad5bc5632695a0d86c427ff2dbebbf092',1,'CloneSystsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#ad5bc5632695a0d86c427ff2dbebbf092',1,'CloneSystsPy(ch::CombineHarvester &src, ch::CombineHarvester &dest, boost::python::object func): CombineHarvester_Python.cc']]],
+ ['cmshistfuncfactory',['CMSHistFuncFactory',['../classch_1_1_c_m_s_hist_func_factory.html#aab342dafc3932662c321d48c33b393c7',1,'ch::CMSHistFuncFactory']]],
['combineharvester',['CombineHarvester',['../classch_1_1_combine_harvester.html#a359a11f3f6f9ab27fd7f047a6bf31ae8',1,'ch::CombineHarvester::CombineHarvester()'],['../classch_1_1_combine_harvester.html#aa80be2f3c50f226ec74bd2f0249af8f1',1,'ch::CombineHarvester::CombineHarvester(CombineHarvester const &other)'],['../classch_1_1_combine_harvester.html#aa7f131550d71b656d7643c32bc6e5673',1,'ch::CombineHarvester::CombineHarvester(CombineHarvester &&other)']]],
['construct',['construct',['../structconvert__py__root__to__cpp__root.html#a075514895ee70ea862a61d9448faeac6',1,'convert_py_root_to_cpp_root::construct()'],['../structconvert__py__seq__to__cpp__vector.html#acb3d1a754a3986d1e42210211137fb22',1,'convert_py_seq_to_cpp_vector::construct()'],['../structconvert__py__tup__to__cpp__pair.html#a1e081b6d5eb91f303ec603b007b37c4c',1,'convert_py_tup_to_cpp_pair::construct()']]],
['contains',['Contains',['../classch_1_1syst_1_1_syst_map.html#ac2e80564cadaae7a32b80c14fd1181dd',1,'ch::syst::SystMap::Contains()'],['../classch_1_1syst_1_1_syst_map_asymm.html#a6883c36dbe318638857de43f3c8eac76',1,'ch::syst::SystMapAsymm::Contains()'],['../classch_1_1syst_1_1_syst_map_func.html#a7ddc23f4596678a3f62dacdd1f103fac',1,'ch::syst::SystMapFunc::Contains()'],['../namespacech.html#a961ef6b98124198d1648868011bc0153',1,'ch::contains(const Range &r, T p)'],['../namespacech.html#a7d0976239046f20281fb0bd2bd2c3625',1,'ch::contains(const std::initializer_list< R > &r, T p)']]],
diff --git a/search/functions_5.js b/search/functions_5.js
index de6a83972c1..808d4382a46 100644
--- a/search/functions_5.js
+++ b/search/functions_5.js
@@ -12,7 +12,7 @@ var searchData=
['filterprocspy',['FilterProcsPy',['../_combine_harvester___python_8h.html#a56ae7ecb5e38f893261f069dfdf2bd71',1,'FilterProcsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#a56ae7ecb5e38f893261f069dfdf2bd71',1,'FilterProcsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc']]],
['filtersysts',['FilterSysts',['../classch_1_1_combine_harvester.html#a91821b9464ebaacb5b92be2b3bc794f8',1,'ch::CombineHarvester']]],
['filtersystspy',['FilterSystsPy',['../_combine_harvester___python_8h.html#a012558445da84ccfe7ddc24ad2a7eb75',1,'FilterSystsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc'],['../_combine_harvester___python_8cc.html#a012558445da84ccfe7ddc24ad2a7eb75',1,'FilterSystsPy(ch::CombineHarvester &cb, boost::python::object func): CombineHarvester_Python.cc']]],
- ['findaddpdf',['FindAddPdf',['../namespacech.html#a0d8871a3c13b62ac6fefeb9a87b5e44a',1,'ch']]],
+ ['findaddpdf',['FindAddPdf',['../namespacech.html#a5a4aae941cd175bf6764ad6789b4df8c',1,'ch']]],
['findcrossingswithspline',['FindCrossingsWithSpline',['../namespaceplotting.html#a930ca7cb0408b290b0db1c79f5911105',1,'plotting']]],
['findnewbinning',['FindNewBinning',['../classch_1_1_auto_rebin.html#a2dc97baa47e812e6aa1817f604e2541a',1,'ch::AutoRebin']]],
['fixbothranges',['FixBothRanges',['../namespaceplotting.html#a436e05154225b06e1a13a22dbffd2096',1,'plotting']]],
diff --git a/search/functions_d.js b/search/functions_d.js
index 5a62482eb01..d9067b725cb 100644
--- a/search/functions_d.js
+++ b/search/functions_d.js
@@ -1,6 +1,7 @@
var searchData=
[
['object',['Object',['../classch_1_1_object.html#adff80080730670f56fc3fcb4cecf65a7',1,'ch::Object::Object()'],['../classch_1_1_object.html#ab43915289318053f138083f1e8720646',1,'ch::Object::Object(Object const &other)'],['../classch_1_1_object.html#a1d58aeeeea90ab0492d114ad75b9da66',1,'ch::Object::Object(Object &&other)']]],
+ ['observable',['observable',['../classch_1_1_process.html#a25e01410aada0818fa20a95a30a96025',1,'ch::Process']]],
['observation',['Observation',['../classch_1_1_observation.html#a56897e63ca73b158071633e3f379e8c5',1,'ch::Observation::Observation()'],['../classch_1_1_observation.html#a9f88f5220628a9d923539c3fe8a0669a',1,'ch::Observation::Observation(Observation const &other)'],['../classch_1_1_observation.html#af37c17965ed6342871c1154df190e9cf',1,'ch::Observation::Observation(Observation &&other)']]],
['onepad',['OnePad',['../_plotting_8h.html#aa098641a0337d718d1074531133b884f',1,'OnePad(): Plotting.h'],['../namespaceplotting.html#a1126597eb4f60cba5a5b87ab05dcc46b',1,'plotting.OnePad()']]],
['openfromtfile',['OpenFromTFile',['../namespacech.html#aa859d4d87eb7f27b2499e55c73789d98',1,'ch::OpenFromTFile(std::string const &fullpath)'],['../namespacech.html#af7fe148f865bc9674341c9aa36d875ef',1,'ch::OpenFromTFile(TFile *file, std::string const &path)']]],
diff --git a/search/functions_e.js b/search/functions_e.js
index f1477f1a028..9a9c019f66c 100644
--- a/search/functions_e.js
+++ b/search/functions_e.js
@@ -7,7 +7,7 @@ var searchData=
['parsecombineworkspacepy',['ParseCombineWorkspacePy',['../namespacech.html#af7bcceb32c2f4a82fe1de32a93d0dfa3',1,'ch']]],
['parsedatacard',['ParseDatacard',['../classch_1_1_combine_harvester.html#aa65fe68ae736e6b612a9c35f42adf02f',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string const &analysis, std::string const &era, std::string const &channel, int bin_id, std::string const &mass)'],['../classch_1_1_combine_harvester.html#a4b7fe2fb7c1b3ba4da84fbd123388f77',1,'ch::CombineHarvester::ParseDatacard(std::string const &filename, std::string parse_rule="")']]],
['parsefilelines',['ParseFileLines',['../namespacech.html#a23a4079d5c68e21d9697570255e08224',1,'ch']]],
- ['pdf',['pdf',['../classch_1_1_process.html#afbce7b1c6d9fc6cfcebdf4b3c54e6bd3',1,'ch::Process']]],
+ ['pdf',['pdf',['../classch_1_1_process.html#a40aab277133c48b1852d33e6fdb35ecf',1,'ch::Process']]],
['pdfs',['pdfs',['../classch_1_1_combine_harvester.html#a2b38f8591d1dc642136160c96112ec55',1,'ch::CombineHarvester']]],
['positionedlegend',['PositionedLegend',['../_plotting_8h.html#a658a1da4505b61eb5a0f0db01c01e161',1,'PositionedLegend(): Plotting.h'],['../namespaceplotting.html#afb5d5a7e73f1b2b143d2e5d8b5e53f33',1,'plotting.PositionedLegend()']]],
['print',['print',['../structch_1_1tupleprint_1_1_tuple_printer.html#ac56a48381e7a162e1d0c4508045678ff',1,'ch::tupleprint::TuplePrinter::print()'],['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html#a4792690e23c8eab9d9857a1aebd9059b',1,'ch::tupleprint::TuplePrinter< Tuple, 1 >::print()'],['../structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html#ade2db8176ec0411cc79bb931d63bde09',1,'ch::tupleprint::TuplePrinter< Tuple, 0 >::print()']]],
diff --git a/search/functions_f.js b/search/functions_f.js
index e0e1c62e4e3..a2e78f5c470 100644
--- a/search/functions_f.js
+++ b/search/functions_f.js
@@ -16,5 +16,6 @@ var searchData=
['renamesystematic',['RenameSystematic',['../classch_1_1_combine_harvester.html#afb997f5e694eaec9b99aeabe474185d9',1,'ch::CombineHarvester']]],
['restorebinning',['RestoreBinning',['../namespacech.html#a23cd9444931a49de080638458f722501',1,'ch']]],
['rezerotgraph',['ReZeroTGraph',['../_plotting_8h.html#af2524f9f02ac66a16164c87bfc149628',1,'ReZeroTGraph(): Plotting.h'],['../namespaceplotting.html#a273bab5cfe205a69a469a86828ab3f3b',1,'plotting.ReZeroTGraph()']]],
- ['roccurvefrom1dhists',['RocCurveFrom1DHists',['../namespaceplotting.html#a0d8bc74b28155809f534df954fe60355',1,'plotting']]]
+ ['roccurvefrom1dhists',['RocCurveFrom1DHists',['../namespaceplotting.html#a0d8bc74b28155809f534df954fe60355',1,'plotting']]],
+ ['run',['Run',['../classch_1_1_c_m_s_hist_func_factory.html#a76a006851773756a05ca67e577b32c60',1,'ch::CMSHistFuncFactory']]]
];
diff --git a/structch_1_1tupleprint_1_1_tuple_printer.html b/structch_1_1tupleprint_1_1_tuple_printer.html
index ecc51cee3cc..c021a532d34 100644
--- a/structch_1_1tupleprint_1_1_tuple_printer.html
+++ b/structch_1_1tupleprint_1_1_tuple_printer.html
@@ -115,7 +115,7 @@
struct ch::tupleprint::TuplePrinter< Tuple, N >
-Definition at line 179 of file Utilities.h .
+Definition at line 180 of file Utilities.h .
@@ -151,7 +151,7 @@
diff --git a/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html b/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html
index e79981af391..b559f4650ba 100644
--- a/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html
+++ b/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_010_01_4.html
@@ -115,7 +115,7 @@
struct ch::tupleprint::TuplePrinter< Tuple, 0 >
-Definition at line 196 of file Utilities.h .
+Definition at line 197 of file Utilities.h .
@@ -151,7 +151,7 @@
diff --git a/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html b/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html
index 137e35ce9c1..6e35335ef6f 100644
--- a/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html
+++ b/structch_1_1tupleprint_1_1_tuple_printer_3_01_tuple_00_011_01_4.html
@@ -115,7 +115,7 @@
struct ch::tupleprint::TuplePrinter< Tuple, 1 >
-Definition at line 187 of file Utilities.h .
+Definition at line 188 of file Utilities.h .
@@ -151,7 +151,7 @@